from __future__ import annotations

import logging
from dataclasses import dataclass, field
from enum import Enum
from typing import Optional

from cimgraph.data_profile.identity import Identity, stereotype
from cimgraph.data_profile.units import CIMUnit, UnitMultiplier, UnitSymbol

_log = logging.getLogger(__name__)
'''
Annotated CIMantic Graphs data profile for Profile
Generated by CIMTool http://cimtool.org
'''

class CIMStereotype(Enum):
    AggregateOf = 'AggregateOf'
    Attribute = 'Attribute'
    CIMDatatype = 'CIMDatatype'
    Compound = 'Compound'
    Concrete = 'Concrete'
    European = 'European'
    NC = 'NC'
    NeedsWork = 'NeedsWork'
    OfAggregate = 'OfAggregate'
    Part3Ext = 'Part3Ext'
    Primitive = 'Primitive'
    ShadowExtension = 'ShadowExtension'
    add = 'add'
    archive = 'archive'
    deprecated = 'deprecated'
    enumeration = 'enumeration'
    gmdm = 'gmdm'
    harmonization = 'harmonization'
    informative = 'informative'
    modify = 'modify'
    moved = 'moved'

BASE_URI = 'http://www.ucaiug.org/gmdm/global#'
ONTOLOGY_URI = 'http://cim.ucaiug.io/CIM101/draft#'

@dataclass(repr=False)
class AdditionalAddressInformation(Identity):
    '''
    Address information which cannot be specified through the other attributes.
    '''

    addressInformationText: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Text for the additional address information.
            '''

        })
    '''
    Text for the additional address information.
    '''

    addressInformationType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Identifies the type of the additional address information (e.g. mail stop,
            attention to).
            '''

        })
    '''
    Identifies the type of the additional address information (e.g. mail
    stop, attention to).
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For an address having multiple instances of additional address information,
            this specifies the sequence in which the instances should be ordered.
            '''

        })
    '''
    For an address having multiple instances of additional address information,
    this specifies the sequence in which the instances should be ordered.
    '''

    Address: Optional[Address] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Address.AdditionalAddressInformation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The address for which there is additional infomation.
            '''

        })
    '''
    The address for which there is additional infomation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AgentCapability(Identity):
    '''
    Capabilities that are held by a person, organisation or automated agent.
    This can be individual sills, traits and qualities that give indication
    on the agent ability to perform various tasks to archive relevant goals.
    However, this is primarily refer to license and certification held by the
    agent.
    '''

    otherCapabilityKind: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the Agent's capability requirement
            when the value for the attribute AgentCapability.kind is "other."
            '''

        })
    '''
    This attribute should be used to specify the Agent's capability requirement
    when the value for the attribute AgentCapability.kind is "other."
    '''

    otherSkillLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the kind of agent capability skill
            level when the value for the attribute AgentCapability.skillLevel is "other."
            '''

        })
    '''
    This attribute should be used to specify the kind of agent capability
    skill level when the value for the attribute AgentCapability.skillLevel
    is "other."
    '''

    reference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reference to the concrete capability, e.g. license number, certificate
            or training reference.
            '''

        })
    '''
    Reference to the concrete capability, e.g. license number, certificate
    or training reference.
    '''

    kind: Optional[CapabilityRequirementKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of capability reference.
            '''

        })
    '''
    Kind of capability reference.
    '''

    skillLevel: Optional[SkillLevelKind] = field(
        default=None,
        metadata={
        'type': 'enumeration deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Proficiency level of an Agent to operate or maintain a particular type
            of asset and/or perform certain types of work.
            '''

        })
    '''
    Proficiency level of an Agent to operate or maintain a particular type
    of asset and/or perform certain types of work.
    '''

    Agent: Optional[Agent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Agent.AgentCapability',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CertificationOrganisation: Optional[Organisation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Organisation.AgentCapability',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectivePeriod: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Effective period for the capability.
            '''

        })
    '''
    Effective period for the capability.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    CertificationOrganisation: Optional[Organisation] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Organisation.AgentCapability',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class AgentRoleQualification(Identity):
    '''
    A qualification required for an agent to play an agent role. For example,
    certain skills are required and must be certified in order for a person
    (typically a member of a crew) to be qualified to perform a task.
    '''

    otherQualificationKind: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the kind of qualification when
            the value for the attribute AgentRoleQualification.qualificationKind is
            "other."
            '''

        })
    '''
    This attribute should be used to specify the kind of qualification
    when the value for the attribute AgentRoleQualification.qualificationKind
    is "other."
    '''

    otherSkillLevelKind: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the qualifying skill level when
            the value for the attribute AgentRoleQualification.skillLevel is "other."
            '''

        })
    '''
    This attribute should be used to specify the qualifying skill level
    when the value for the attribute AgentRoleQualification.skillLevel
    is "other."
    '''

    qualificationReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reference to the description of the qualification.
            '''

        })
    '''
    A reference to the description of the qualification.
    '''

    status: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The status of a qualification (the status of a license, for example).
            '''

        })
    '''
    The status of a qualification (the status of a license, for example).
    '''

    qualificationKind: Optional[CapabilityRequirementKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The kind of qualification required to play an agent role.
            '''

        })
    '''
    The kind of qualification required to play an agent role.
    '''

    skillLevel: Optional[SkillLevelKind] = field(
        default=None,
        metadata={
        'type': 'enumeration deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A defined level of skill required to qualify for an agent role.
            '''

        })
    '''
    A defined level of skill required to qualify for an agent role.
    '''

    AgentRole: Optional[AgentRole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AgentRole.AgentRoleQualification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectiveDatePeriod: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time period when the status of a qualification is in effect.
            '''

        })
    '''
    The time period when the status of a qualification is in effect.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BranchEndFlow(Identity):
    '''
    Dynamic flows and ratings associated with a branch end.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MktPowerTransformerEndAFlow: list[MktPowerTransformer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktPowerTransformer.EndAFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktPowerTransformerEndBFlow: list[MktPowerTransformer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktPowerTransformer.EndBFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class BranchGroupTerminal(Identity):
    '''
    A specific directed terminal flow for a branch group.
    '''

    positiveFlowIn: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The flow into the terminal is summed if set true. The flow out of the terminal
            is summed if set false.
            '''

        })
    '''
    The flow into the terminal is summed if set true. The flow out of the
    terminal is summed if set false.
    '''

    BranchGroup: Optional[BranchGroup] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchGroup.BranchGroupTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The branch group to which the directed branch group terminals belong.
            '''

        })
    '''
    The branch group to which the directed branch group terminals belong.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.BranchGroupTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal to be summed.
            '''

        })
    '''
    The terminal to be summed.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusinessHours(Identity):
    '''
    The designated days and times during which a business or organisation is
    officially open and available to conduct its operations, provide services,
    or interact with customers and clients.
    The business is open if the opens attribute is specified, and closed otherwise.
    If the value for the closes attribute is less than the value for the opens
    attribute then the hour range is assumed to span over the next day.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in IETF RFC 4122, for the mRID. The use of UUID is
            strongly recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in IETF RFC 4122, for the mRID. The use
    of UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    closes: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Closing hour of the place or service on the given day(s) of the week.
            '''

        })
    '''
    Closing hour of the place or service on the given day(s) of the week.
    '''

    opens: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Opening hour of the place or service on the given day(s) of the week.
            '''

        })
    '''
    Opening hour of the place or service on the given day(s) of the week.
    '''

    validFrom: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The date when the item becomes valid.
            '''

        })
    '''
    The date when the item becomes valid.
    '''

    validThrough: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date after when the item is not valid. For example the end of an offer,
            salary period, or a period of opening hours.
            '''

        })
    '''
    Date after when the item is not valid. For example the end of an offer,
    salary period, or a period of opening hours.
    '''

    dayOfWeek: Optional[DayOfWeek] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The day of the week for which these opening hours are valid.
            '''

        })
    '''
    The day of the week for which these opening hours are valid.
    '''

    ContactPoint: Optional[ContactPoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContactPoint.BusinessHours',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ComModuleInfo(Identity):
    '''
    Communication module asset informtion
    '''

    direction: Optional[ComDirectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Communication direction.
            '''

        })
    '''
    Communication direction.
    '''

    technology: Optional[ComTechnologyKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Communication technology.
            '''

        })
    '''
    Communication technology.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContactPoint(Identity):
    '''
    Contact Point represents a snapshot of summary contact information about
    an Agent in relation to a particular Agent Role being played.
    '''

    agentIdentifier: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A unique identifier for the Agent
            '''

        })
    '''
    A unique identifier for the Agent
    '''

    availableLanguage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Language someone may use with or at the item, service or place. Please
            use one of the language codes from the IETF BCP 47 standard.
            IETF language tags combine subtags from other standards such as ISO 639,
            ISO 15924, ISO 3166-1, and UN M.49. The tag structure has been standardized
            by the IETF in Best Current Practice (BCP) 47; the subtags are maintained
            by the IANA Language Subtag Registry.
            '''

        })
    '''
    Language someone may use with or at the item, service or place. Please
    use one of the language codes from the IETF BCP 47 standard.
    IETF language tags combine subtags from other standards such as ISO
    639, ISO 15924, ISO 3166-1, and UN M.49. The tag structure has been
    standardized by the IETF in Best Current Practice (BCP) 47; the subtags
    are maintained by the IANA Language Subtag Registry.
    '''

    chatAddress: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Address to a chat service. Example Skype, WhatsApp etc
            '''

        })
    '''
    Address to a chat service. Example Skype, WhatsApp etc
    '''

    emailAddress: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The email address to be used to contact the Agent in the context of the
            Agent Role being played.
            '''

        })
    '''
    The email address to be used to contact the Agent in the context of
    the Agent Role being played.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The name to be used for the Agent in the context of the Agent Role being
            played.
            '''

        })
    '''
    The name to be used for the Agent in the context of the Agent Role
    being played.
    '''

    roleIdentifier: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A unique identifier for the Agent Role.
            '''

        })
    '''
    A unique identifier for the Agent Role.
    '''

    webAddress: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Address to a web service.
            '''

        })
    '''
    Address to a web service.
    '''

    preferredMethodOfContact: Optional[ContactMethodKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The communication method by which the Agent prefers to be contacted.
            '''

        })
    '''
    The communication method by which the Agent prefers to be contacted.
    '''

    address: Optional[PostalAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The mailing address to be used for the Agent in the context of the Agent
            Role being played.
            '''

        })
    '''
    The mailing address to be used for the Agent in the context of the
    Agent Role being played.
    '''

    Agent: Optional[Agent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Agent.ContactPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    faxNumber: Optional[TelephoneNumber] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fax number. A number assigned to a particular fax machine and used in making
            connections to it.
            '''

        })
    '''
    Fax number. A number assigned to a particular fax machine and used
    in making connections to it.
    '''

    telephoneNumber: Optional[TelephoneNumber] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The telephone number to be used to contact the Agent in the context of
            the Agent Role being played.
            '''

        })
    '''
    The telephone number to be used to contact the Agent in the context
    of the Agent Role being played.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    BusinessHours: list[BusinessHours] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BusinessHours.ContactPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class CrewMembership(Identity):
    '''
    Identifies the time period for which an individual crew member was assigned
    to a specific crew.
    '''

    effectiveDateTimeInterval: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The date and time interval a crew member was assigned to a specific crew.
            '''

        })
    '''
    The date and time interval a crew member was assigned to a specific
    crew.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentDroopOverride(Identity):
    '''
    Current droop override uses the following logic:
    - When the current exceeds a threshold the device executes the following
    transitions: 1) When injecting an inductive voltage or in monitoring mode
    the device tends to inject a voltage proportional to the difference between
    the line current and the aforementioned threshold. 2) When injecting a
    capacitive voltage the device transitions to monitoring mode.
    - If the aforementioned proportional voltage is lower than the initial
    one, the voltage injection remains unchanged.
    Current droop override is not applied when the device operates in currentDroop
    mode.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    droopCapacitive: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Droop in capacitive region. The unit is V/A.
            '''

        })
    '''
    Droop in capacitive region. The unit is V/A.
    '''

    droopInductive: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Droop in inductive region. The unit is V/A.
            '''

        })
    '''
    Droop in inductive region. The unit is V/A.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True, if the current droop override is enabled (active). Otherwise false.
            '''

        })
    '''
    True, if the current droop override is enabled (active). Otherwise
    false.
    '''

    offsetCapacitiveI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Offset in capacitive region.
            '''

        })
    '''
    Offset in capacitive region.
    '''

    offsetInductiveI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Offset in capacitive region.
            '''

        })
    '''
    Offset in capacitive region.
    '''

    targetValueCapacitiveI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Setpoint when control is active in capacitive region.
            '''

        })
    '''
    Setpoint when control is active in capacitive region.
    '''

    targetValueInductiveI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Setpoint when control is active in inductive region.
            '''

        })
    '''
    Setpoint when control is active in inductive region.
    '''

    SSSCController: Optional[SSSCController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SSSCController.CurrentDroopOverride',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SSSC controller to which this CurrentDroopOverride applies to.
            '''

        })
    '''
    The SSSC controller to which this CurrentDroopOverride applies to.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SSSCController: Optional[SSSCController] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SSSCController.CurrentDroopOverride',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The SSSC controller to which this CurrentDroopOverride applies to.
            '''

        })
    '''
    The SSSC controller to which this CurrentDroopOverride applies to.
    '''

@dataclass(repr=False)
class CurveData(Identity):
    '''
    Multi-purpose data points for defining a curve. The use of this generic
    class is discouraged if a more specific class can be used to specify the
    X and Y axis values along with their specific data types.
    '''

    xvalue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The data value of the X-axis variable, depending on the X-axis units.
            '''

        })
    '''
    The data value of the X-axis variable, depending on the X-axis units.
    '''

    y1value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The data value of the first Y-axis variable, depending on the Y-axis units.
            '''

        })
    '''
    The data value of the first Y-axis variable, depending on the Y-axis
    units.
    '''

    y2value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The data value of the second Y-axis variable (if present), depending on
            the Y-axis units.
            '''

        })
    '''
    The data value of the second Y-axis variable (if present), depending
    on the Y-axis units.
    '''

    y3value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The data value of the third Y-axis variable (if present), depending on
            the Y-axis units.
            '''

        })
    '''
    The data value of the third Y-axis variable (if present), depending
    on the Y-axis units.
    '''

    Curve: Optional[Curve] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Curve.CurveDatas',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The curve of this curve data point.
            '''

        })
    '''
    The curve of this curve data point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramObjectGluePoint(Identity):
    '''
    This is used for grouping diagram object points from different diagram
    objects that are considered to be glued together in a diagram even if they
    are not at the exact same coordinates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayoutEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    DiagramObjectPoints: list[DiagramObjectPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObjectPoint.DiagramObjectGluePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A diagram object glue point is associated with 2 or more object points
            that are considered to be 'glued' together.
            '''

        })
    '''
    A diagram object glue point is associated with 2 or more object points
    that are considered to be 'glued' together.
    '''

    DiagramObjectPoints: list[DiagramObjectPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObjectPoint.DiagramObjectGluePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A diagram object glue point is associated with 2 or more object points
            that are considered to be 'glued' together.
            '''

        })
    '''
    A diagram object glue point is associated with 2 or more object points
    that are considered to be 'glued' together.
    '''

@dataclass(repr=False)
class DiagramObjectGluePoint1(Identity):
    '''
    This is used for grouping diagram object points from different diagram
    objects that are considered to be glued together in a diagram even if they
    are not at the exact same coordinates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayoutEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramObjectPoint(Identity):
    '''
    A point in a given space defined by 3 coordinates and associated to a diagram
    object. The coordinates may be positive or negative as the origin does
    not have to be in the corner of a diagram.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The sequence position of the point, used for defining the order of points
            for diagram objects acting as a polyline or polygon with more than one
            point. The attribute shall be a positive value.
            '''

        })
    '''
    The sequence position of the point, used for defining the order of
    points for diagram objects acting as a polyline or polygon with more
    than one point. The attribute shall be a positive value.
    '''

    xPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The X coordinate of this point.
            '''

        })
    '''
    The X coordinate of this point.
    '''

    yPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Y coordinate of this point.
            '''

        })
    '''
    The Y coordinate of this point.
    '''

    zPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Z coordinate of this point.
            '''

        })
    '''
    The Z coordinate of this point.
    '''

    DiagramObject: Optional[DiagramObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramObject.DiagramObjectPoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The diagram object with which the points are associated.
            '''

        })
    '''
    The diagram object with which the points are associated.
    '''

    DiagramObjectGluePoint: Optional[DiagramObjectGluePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramObjectGluePoint.DiagramObjectPoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The 'glue' point to which this point is associated.
            '''

        })
    '''
    The 'glue' point to which this point is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramObjectPoint1(Identity):
    '''
    A point in a given space defined by 3 coordinates and associated to a diagram
    object. The coordinates may be positive or negative as the origin does
    not have to be in the corner of a diagram.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The sequence position of the point, used for defining the order of points
            for diagram objects acting as a polyline or polygon with more than one
            point. The attribute shall be a positive value.
            '''

        })
    '''
    The sequence position of the point, used for defining the order of
    points for diagram objects acting as a polyline or polygon with more
    than one point. The attribute shall be a positive value.
    '''

    xPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The X coordinate of this point.
            '''

        })
    '''
    The X coordinate of this point.
    '''

    yPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Y coordinate of this point.
            '''

        })
    '''
    The Y coordinate of this point.
    '''

    zPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Z coordinate of this point.
            '''

        })
    '''
    The Z coordinate of this point.
    '''

    DiagramObject: Optional[DiagramObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramObject.DiagramObjectPoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The diagram object with which the points are associated.
            '''

        })
    '''
    The diagram object with which the points are associated.
    '''

    DiagramObjectGluePoint: Optional[DiagramObjectGluePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramObjectGluePoint.DiagramObjectPoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The 'glue' point to which this point is associated.
            '''

        })
    '''
    The 'glue' point to which this point is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DocumentRole(Identity):
    '''
    An Organisation or Person role with respect to documents.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class Approver(DocumentRole):
    '''
    Person who accepted/signed or rejected the document.
    '''

    Documents: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Approver',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All documents for this approver.
            '''

        })
    '''
    All documents for this approver.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class Author(DocumentRole):
    '''
    Person who created document or activity record.
    '''

    ActivityRecords: list[ActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ActivityRecord.Author',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All activity records with this author.
            '''

        })
    '''
    All activity records with this author.
    '''

    Documents: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Author',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All documents of this this author.
            '''

        })
    '''
    All documents of this this author.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class Editor(DocumentRole):
    '''
    Person who modified the document.
    '''

    Documents: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Editor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All documents for this editor.
            '''

        })
    '''
    All documents for this editor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class Issuer(DocumentRole):
    '''
    Person who issued the document and is responsible for its content.
    '''

    Documents: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Issuer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All documents for this issuer.
            '''

        })
    '''
    All documents for this issuer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FieldDispatchStep(Identity):
    '''
    Details of the step in the field dispatch history.
    '''

    occurredDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The date and time at which the dispatch status occurred.
            '''

        })
    '''
    The date and time at which the dispatch status occurred.
    '''

    remarks: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            freeform comments related to the dispatch to perform field work.
            '''

        })
    '''
    freeform comments related to the dispatch to perform field work.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The sequence number of the field dispatch step within the field dispatch
            history. Begins with 1 and increments up.
            '''

        })
    '''
    The sequence number of the field dispatch step within the field dispatch
    history. Begins with 1 and increments up.
    '''

    dispatchStatus: Optional[CrewStatusKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The status of one or more crews dispatched to perform field work at one
            or more work sites
            '''

        })
    '''
    The status of one or more crews dispatched to perform field work at
    one or more work sites
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.FieldDispatchStep',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Fuel(Identity):
    '''
    A class indicating the origin of the fuel used at the related object.
    '''

    fuel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An indication of the fuel used for the energy production, or part of the
            energy production, that is potentially fed into the grid at the related
            object.
            '''

        })
    '''
    An indication of the fuel used for the energy production, or part of
    the energy production, that is potentially fed into the grid at the
    related object.
    '''

    fuelSource: Optional[FuelSource] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An indication of the fuel used for the energy production, or part of the
            energy production, that is potentially fed into the grid at the related
            object.
            '''

        })
    '''
    An indication of the fuel used for the energy production, or part of
    the energy production, that is potentially fed into the grid at the
    related object.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenDistributionFactor(Identity):
    '''
    This class models the generation distribution factors. This class needs
    to be used along with the AggregatedPnode and the IndividualPnode to show
    the distribution of each individual party.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.GenDistributionFactor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class GeometricElement(Identity):
    '''
    Exists solely as the parent of the separate geometry types (Point, Line,
    Circle, Polygon) in order to create an xsd Choice between the types.
    '''

    Geometry: Optional[Geometry] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Geometry.GeometricElement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Circle(GeometricElement):
    '''
    A circular area in space, described by a center point and radius. Any circle
    object must have a center and an outer radius and may have an inner radius.
    If an inner radius is specified, the area within the inner radius is to
    be excluded from the area within the outer radius, forming a ring shape.
    '''

    innerRadius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A circle may have an inner radius. If specified the area described by the
            inner radius is to be excluded from the area within the outer radius, forming
            a ring shape.
            '''

        })
    '''
    A circle may have an inner radius. If specified the area described
    by the inner radius is to be excluded from the area within the outer
    radius, forming a ring shape.
    '''

    outerRadius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Every circle must have an outer radius which describes the outer limit
            of the circular area.
            '''

        })
    '''
    Every circle must have an outer radius which describes the outer limit
    of the circular area.
    '''

    CircleCenterPositionPoint: Optional[PositionPoint] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PositionPoint.Circle',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A point representing the center of a circular area. Any circle object must
            have one CircleCenter.
            '''

        })
    '''
    A point representing the center of a circular area. Any circle object
    must have one CircleCenter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class LineElement(GeometricElement):
    '''
    A geometric line segment, described by 2 or more coordinate tuples with
    linear interpolation between them. A line must contain at least 2 linear
    coordinates.
    '''

    Polygon: Optional[Polygon] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Polygon.OuterBoundaryLineElement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A polygon for which an inner boundary is defined.
            '''

        })
    '''
    A polygon for which an inner boundary is defined.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Polygon(GeometricElement):
    '''
    One or more self-closing line segments representing a polygonal area. In
    order to be self-closing, the first and last linear coordinates of each
    line segment must be identical. A polygon must have one outer boundary
    and may have one or more inner boundaries. If an inner boundary is specified,
    the area within the inner boundary is to be excluded from the area within
    the outer boundary. Each line description within a polygon (both outer
    and inner boundaries) must contain at least 4 linear coordinates.
    '''

    OuterBoundaryLineElement: list[LineElement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LineElement.Polygon',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            One or more self-closing line segments representing a polygonal area. In
            order to be self-closing, the first and last linear coordinates of each
            line segment must be identical. A polygon must have one outer boundary
            and may have one or more inner boundaries. If an inner boundary is specified,
            the area within the inner boundary is to be excluded from the area within
            the outer boundary. Each line description within a polygon (both outer
            and inner boundaries) must contain at least 4 linear coordinates.
            '''

        })
    '''
    One or more self-closing line segments representing a polygonal area.
    In order to be self-closing, the first and last linear coordinates
    of each line segment must be identical. A polygon must have one outer
    boundary and may have one or more inner boundaries. If an inner boundary
    is specified, the area within the inner boundary is to be excluded
    from the area within the outer boundary. Each line description within
    a polygon (both outer and inner boundaries) must contain at least 4
    linear coordinates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeometricElement1(Identity):
    '''
    Exists solely as the parent of the separate geometry types (Point, Line,
    Circle, Polygon) in order to create an xsd Choice between the types.
    '''

    Geometry: Optional[Geometry] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Geometry.GeometricElement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IdentifiedObject(Identity):
    '''
    This is a class that provides common identification for all classes needing
    identification and naming attributes.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in IETF RFC 4122, for the mRID. The use of UUID is
            strongly recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in IETF RFC 4122, for the mRID. The use
    of UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The description is a free human readable text describing or naming the
            object. It may be non unique and may not correlate to a naming hierarchy.
            '''

        })
    '''
    The description is a free human readable text describing or naming
    the object. It may be non unique and may not correlate to a naming
    hierarchy.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The name is any free human readable and possibly non unique text naming
            the object.
            '''

        })
    '''
    The name is any free human readable and possibly non unique text naming
    the object.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    DiagramObjects: list[DiagramObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObject.IdentifiedObject',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The diagram objects that are associated with the domain object.
            '''

        })
    '''
    The diagram objects that are associated with the domain object.
    '''

@dataclass(repr=False)
class ACDCTerminal(IdentifiedObject):
    '''
    An electrical connection point (AC or DC) to a piece of conducting equipment.
    Terminals are connected at physical connection points called connectivity
    nodes.
    '''

    connected: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The connected status is related to a bus-branch model and the topological
            node to terminal relation. True implies the terminal is connected to the
            related topological node and false implies it is not.
            In a bus-branch model, the connected status is used to tell if equipment
            is disconnected without having to change the connectivity described by
            the topological node to terminal relation. A valid case is that conducting
            equipment can be connected in one end and open in the other. In particular
            for an AC line segment, where the reactive line charging can be significant,
            this is a relevant case.
            '''

        })
    '''
    The connected status is related to a bus-branch model and the topological
    node to terminal relation. True implies the terminal is connected to
    the related topological node and false implies it is not.
    In a bus-branch model, the connected status is used to tell if equipment
    is disconnected without having to change the connectivity described
    by the topological node to terminal relation. A valid case is that
    conducting equipment can be connected in one end and open in the other.
    In particular for an AC line segment, where the reactive line charging
    can be significant, this is a relevant case.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The orientation of the terminal connections for a multiple terminal conducting
            equipment. The sequence numbering starts with 1 and additional terminals
            should follow in increasing order. The first terminal is the "starting
            point" for a two terminal branch.
            '''

        })
    '''
    The orientation of the terminal connections for a multiple terminal
    conducting equipment. The sequence numbering starts with 1 and additional
    terminals should follow in increasing order. The first terminal is
    the "starting point" for a two terminal branch.
    '''

    BusNameMarker: Optional[BusNameMarker] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BusNameMarker.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The bus name marker used to name the bus (topological node).
            '''

        })
    '''
    The bus name marker used to name the bus (topological node).
    '''

    Measurements: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Measurements associated with this terminal defining where the measurement
            is placed in the network topology. It may be used, for instance, to capture
            the sensor position, such as a voltage transformer (PT) at a busbar or
            a current transformer (CT) at the bar between a breaker and an isolator.
            '''

        })
    '''
    Measurements associated with this terminal defining where the measurement
    is placed in the network topology. It may be used, for instance, to
    capture the sensor position, such as a voltage transformer (PT) at
    a busbar or a current transformer (CT) at the bar between a breaker
    and an isolator.
    '''

    OperationalLimitSet: list[OperationalLimitSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitSet.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit sets at the terminal.
            '''

        })
    '''
    The operational limit sets at the terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCBaseTerminal(ACDCTerminal):
    '''
    An electrical connection point at a piece of DC conducting equipment. DC
    terminals are connected at one physical DC node that may have multiple
    DC terminals connected. A DC node is similar to an AC connectivity node.
    The model requires that DC connections are distinct from AC connections.
    '''

    DCNode: Optional[DCNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCNode.DCTerminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC connectivity node to which this DC base terminal connects with zero
            impedance.
            '''

        })
    '''
    The DC connectivity node to which this DC base terminal connects with
    zero impedance.
    '''

    DCTopologicalNode: Optional[DCTopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTopologicalNode.DCTerminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            See association end Terminal.TopologicalNode.
            '''

        })
    '''
    See association end Terminal.TopologicalNode.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACDCConverterDCTerminal(DCBaseTerminal):
    '''
    A DC electrical connection point at the AC/DC converter. The AC/DC converter
    is electrically connected also to the AC side. The AC connection is inherited
    from the AC conducting equipment in the same way as any other AC equipment.
    The AC/DC converter DC terminal is separate from generic DC terminal to
    restrict the connection with the AC side to AC/DC converter and so that
    no other DC conducting equipment can be connected to the AC side.
    '''

    polarity: Optional[DCPolarityKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Represents the normal network polarity condition. Depending on the converter
            configuration the value shall be set as follows:
            - For a monopole with two converter terminals use DCPolarityKind "positive"
            and "negative".
            - For a bi-pole or symmetric monopole with three converter terminals use
            DCPolarityKind "positive", "middle" and "negative".
            '''

        })
    '''
    Represents the normal network polarity condition. Depending on the
    converter configuration the value shall be set as follows:
    - For a monopole with two converter terminals use DCPolarityKind "positive"
    and "negative".
    - For a bi-pole or symmetric monopole with three converter terminals
    use DCPolarityKind "positive", "middle" and "negative".
    '''

    DCConductingEquipment: Optional[ACDCConverter] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACDCConverter.DCTerminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A DC converter terminal belong to an DC converter.
            '''

        })
    '''
    A DC converter terminal belong to an DC converter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCTerminal(DCBaseTerminal):
    '''
    An electrical connection point to generic DC conducting equipment.
    '''

    polarity: Optional[DCTerminalPolarityKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Represents the normal network polarity condition. Used in DC system configurations
            that have explicit polarity of the terminals, e.g., voltage source converter
            (VSC) technology.
            '''

        })
    '''
    Represents the normal network polarity condition. Used in DC system
    configurations that have explicit polarity of the terminals, e.g.,
    voltage source converter (VSC) technology.
    '''

    DCConductingEquipment: Optional[DCConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCConductingEquipment.DCTerminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An DC terminal belong to a DC conducting equipment.
            '''

        })
    '''
    An DC terminal belong to a DC conducting equipment.
    '''

    SvDCPowerFlow: list[SvDCPowerFlow] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvDCPowerFlow.DCTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC power flow state variable associated with the DC terminal.
            '''

        })
    '''
    The DC power flow state variable associated with the DC terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Terminal(ACDCTerminal):
    '''
    An AC electrical connection point to a piece of conducting equipment. Terminals
    are connected at physical connection points called connectivity nodes.
    '''

    phases: Optional[PhaseCode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Represents the normal network phasing condition. If the attribute is missing,
            three phases (ABC) shall be assumed, except for terminals of grounding
            classes (specializations of EarthFaultCompensator, GroundDisconnector,
            and Ground) which will be assumed to be N. Therefore, phase code ABCN is
            explicitly declared when needed, e.g. for star point grounding equipment.
            The phase code on terminals connecting the same ConnectivityNode or TopologicalNode
            as well as for equipment between two terminals shall be consistent.
            '''

        })
    '''
    Represents the normal network phasing condition. If the attribute is
    missing, three phases (ABC) shall be assumed, except for terminals
    of grounding classes (specializations of EarthFaultCompensator, GroundDisconnector,
    and Ground) which will be assumed to be N. Therefore, phase code ABCN
    is explicitly declared when needed, e.g. for star point grounding equipment.
    The phase code on terminals connecting the same ConnectivityNode or
    TopologicalNode as well as for equipment between two terminals shall
    be consistent.
    '''

    Bushing: Optional[Bushing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bushing.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConductingEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.Terminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The conducting equipment of the terminal. Conducting equipment have terminals
            that may be connected to other conducting equipment terminals via connectivity
            nodes or topological nodes.
            '''

        })
    '''
    The conducting equipment of the terminal. Conducting equipment have
    terminals that may be connected to other conducting equipment terminals
    via connectivity nodes or topological nodes.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.Terminals',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The connectivity node to which this terminal connects with zero impedance.
            '''

        })
    '''
    The connectivity node to which this terminal connects with zero impedance.
    '''

    HasFromTerminalSVSMO4: Optional[SVSMO4] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SVSMO4.FromTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SVSMO4 model that has this FromTerminal.
            '''

        })
    '''
    The SVSMO4 model that has this FromTerminal.
    '''

    HasToTerminalSVSMO4: Optional[SVSMO4] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SVSMO4.ToTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SVSMO4 model that has this ToTerminal.
            '''

        })
    '''
    The SVSMO4 model that has this ToTerminal.
    '''

    NormalHeadFeeder: Optional[Feeder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Feeder.NormalHeadTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The feeder that this terminal normally feeds. Only specified for the terminals
            at head of feeders.
            '''

        })
    '''
    The feeder that this terminal normally feeds. Only specified for the
    terminals at head of feeders.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The topological node associated with the terminal. This can be used as
            an alternative to the connectivity node path to topological node, thus
            making it unnecessary to model connectivity nodes in some cases. Note that
            the if connectivity nodes are in the model, this association would probably
            not be used as an input specification.
            '''

        })
    '''
    The topological node associated with the terminal. This can be used
    as an alternative to the connectivity node path to topological node,
    thus making it unnecessary to model connectivity nodes in some cases.
    Note that the if connectivity nodes are in the model, this association
    would probably not be used as an input specification.
    '''

    WeccREPCC: Optional[WeccREPCC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WeccREPCC.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The WECC REPCC model that has frequency measured at this Terminal.
            '''

        })
    '''
    The WECC REPCC model that has frequency measured at this Terminal.
    '''

    WeccWTGIBFFRA: Optional[WeccWTGIBFFRA] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WeccWTGIBFFRA.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The WECC WTGIBFFRA model that has frequency measured at this Terminal.
            '''

        })
    '''
    The WECC WTGIBFFRA model that has frequency measured at this Terminal.
    '''

    WindPlantDynamics: Optional[WindPlantDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantDynamics.PointOfConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The wind plant that has point of connection.
            '''

        })
    '''
    The wind plant that has point of connection.
    '''

    ConverterDCSides: list[ACDCConverter] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACDCConverter.PccTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All converters' DC sides linked to this point of common coupling terminal.
            '''

        })
    '''
    All converters' DC sides linked to this point of common coupling terminal.
    '''

    AuxiliaryEquipment: list[AuxiliaryEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryEquipment.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The auxiliary equipment connected to the terminal.
            '''

        })
    '''
    The auxiliary equipment connected to the terminal.
    '''

    BranchGroupTerminal: list[BranchGroupTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BranchGroupTerminal.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The directed branch group terminals for which this terminal is monitored.
            '''

        })
    '''
    The directed branch group terminals for which this terminal is monitored.
    '''

    HasFirstMutualCoupling: list[MutualCoupling] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MutualCoupling.First_Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Mutual couplings associated with the branch as the first branch.
            '''

        })
    '''
    Mutual couplings associated with the branch as the first branch.
    '''

    HasSecondMutualCoupling: list[MutualCoupling] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MutualCoupling.Second_Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Mutual couplings with the branch associated as the first branch.
            '''

        })
    '''
    Mutual couplings with the branch associated as the first branch.
    '''

    RegulatingControl: list[RegulatingControl] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulatingControl.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The controls regulating this terminal.
            '''

        })
    '''
    The controls regulating this terminal.
    '''

    SvPowerFlow: list[SvPowerFlow] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvPowerFlow.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The power flow state variable associated with the terminal.
            '''

        })
    '''
    The power flow state variable associated with the terminal.
    '''

    TieFlow: list[TieFlow] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieFlow.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The control area tie flows to which this terminal associates.
            '''

        })
    '''
    The control area tie flows to which this terminal associates.
    '''

    TransformerEnd: list[TransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEnd.Terminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All transformer ends connected at this terminal.
            '''

        })
    '''
    All transformer ends connected at this terminal.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.Terminal',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VoltageAngleLimit: list[VoltageAngleLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VoltageAngleLimit.AngleReferenceTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The voltage angle limit which has this reference angle terminal.
            '''

        })
    '''
    The voltage angle limit which has this reference angle terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class MktTerminal(Terminal):
    '''
    Subclass of IEC61970:Core:Terminal.
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.MktTerminal',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ActivityRecord(IdentifiedObject):
    '''
    Records activity for an entity at a point in time; activity may be for
    an event that has already occurred or for a planned activity.
    '''

    createdDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time this activity record has been created (different from the
            'status.dateTime', which is the time of a status change of the associated
            object, if applicable).
            '''

        })
    '''
    Date and time this activity record has been created (different from
    the 'status.dateTime', which is the time of a status change of the
    associated object, if applicable).
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reason for event resulting in this activity record, typically supplied
            when user initiated.
            '''

        })
    '''
    Reason for event resulting in this activity record, typically supplied
    when user initiated.
    '''

    severity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Severity level of event resulting in this activity record.
            '''

        })
    '''
    Severity level of event resulting in this activity record.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of event resulting in this activity record.
            '''

        })
    '''
    Type of event resulting in this activity record.
    '''

    Author: Optional[Author] = field(
        default=None,
        metadata={
        'type': 'deprecated',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Author.ActivityRecords',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Author of this activity record.
            '''

        })
    '''
    Author of this activity record.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Information on consequence of event resulting in this activity record.
            '''

        })
    '''
    Information on consequence of event resulting in this activity record.
    '''

    WorkRequest: Optional[WorkRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkRequest.ActivityRecord',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Work request for which activity has been recorded.
            '''

        })
    '''
    Work request for which activity has been recorded.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConfigurationEvent(ActivityRecord):
    '''
    Used to report details on creation, change or deletion of an entity or
    its configuration.
    '''

    effectiveDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time this event has or will become effective.
            '''

        })
    '''
    Date and time this event has or will become effective.
    '''

    modifiedBy: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Source/initiator of modification.
            '''

        })
    '''
    Source/initiator of modification.
    '''

    remark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Free text remarks.
            '''

        })
    '''
    Free text remarks.
    '''

    ChangedAgentRole: Optional[AgentRole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AgentRole.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Agent role whose change resulted in this configuration event.
            '''

        })
    '''
    Agent role whose change resulted in this configuration event.
    '''

    ChangedAsset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asset whose change resulted in this configuration event.
            '''

        })
    '''
    Asset whose change resulted in this configuration event.
    '''

    ChangedDocument: Optional[Document] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Document.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Document whose change resulted in this configuration event.
            '''

        })
    '''
    Document whose change resulted in this configuration event.
    '''

    ChangedLocation: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Location whose change resulted in this configuration event.
            '''

        })
    '''
    Location whose change resulted in this configuration event.
    '''

    ChangedServiceCategory: Optional[ServiceCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceCategory.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Service category whose change resulted in this configuration event.
            '''

        })
    '''
    Service category whose change resulted in this configuration event.
    '''

    ChangedUsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.ConfigurationEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Usage point whose change resulted in this configuration event.
            '''

        })
    '''
    Usage point whose change resulted in this configuration event.
    '''

    FaultCauseType: Optional[FaultCauseType] = field(
        default=None,
        metadata={
        'type': 'Part 3 Ext',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FaultCauseType.ConfigurationEvent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Part 3 Ext',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.ConfigurationEvent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktActivityRecord(ActivityRecord):
    '''
    Subclass of IEC61968: Common:ActivityRecord.
    '''

    SelfMktActivityRecord: Optional[MktActivityRecord] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktActivityRecord.MktActivityRecord',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketParticipant: list[MarketParticipant] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketParticipant.MktActivityRecord',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktActivityRecord: list[MktActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktActivityRecord.SelfMktActivityRecord',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Address(IdentifiedObject):
    '''
    Fundamental street address information.
    '''

    cityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            City code.
            '''

        })
    '''
    City code.
    '''

    cityName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the city.
            '''

        })
    '''
    Name of the city.
    '''

    country: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the country in which the address is located. It is recommended
            to use either the 3-letter ISO 3166-1 alpha 3 code such as "SGP," or the
            full country name such as "Singapore."
            '''

        })
    '''
    Name of the country in which the address is located. It is recommended
    to use either the 3-letter ISO 3166-1 alpha 3 code such as "SGP," or
    the full country name such as "Singapore."
    '''

    county: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the second-level Administrative division of a country in which
            the address is located. The term used for the second-level Administrative
            division in a county varies from country to country and between first-level
            Administrative divisions within a country. For example, California has
            counties, Louisiana has parishes, British Columbia, Canada has regional
            districts, and Queensland Australia has shires and regions. Counties are
            usually made up of cities, towns, and rural populations.
            '''

        })
    '''
    Name of the second-level Administrative division of a country in which
    the address is located. The term used for the second-level Administrative
    division in a county varies from country to country and between first-level
    Administrative divisions within a country. For example, California
    has counties, Louisiana has parishes, British Columbia, Canada has
    regional districts, and Queensland Australia has shires and regions.
    Counties are usually made up of cities, towns, and rural populations.
    '''

    fullAddress: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A concatenated string specifying the complete address in a single string
            which may include delimiters.
            '''

        })
    '''
    A concatenated string specifying the complete address in a single string
    which may include delimiters.
    '''

    postalCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Postal code for the address.
            '''

        })
    '''
    Postal code for the address.
    '''

    region: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the first-level Administrative division of a country in which the
            address is located. For example, California, Quebec, and Queensland are
            states and provinces of the United States of America, Canada, and Australia,
            respectively.
            '''

        })
    '''
    Name of the first-level Administrative division of a country in which
    the address is located. For example, California, Quebec, and Queensland
    are states and provinces of the United States of America, Canada, and
    Australia, respectively.
    '''

    streetCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Utilities often make use of external reference systems,
            such as those of the town-planner's department or surveyor general's mapping
            system, that allocate global reference codes to streets.
            '''

        })
    '''
    (if applicable) Utilities often make use of external reference systems,
    such as those of the town-planner's department or surveyor general's
    mapping system, that allocate global reference codes to streets.
    '''

    streetName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the street.
            '''

        })
    '''
    Name of the street.
    '''

    streetNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Designator of the specific location on the street.
            '''

        })
    '''
    Designator of the specific location on the street.
    '''

    streetPrefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Prefix to the street name. For example: North, South, East, West.
            '''

        })
    '''
    Prefix to the street name. For example: North, South, East, West.
    '''

    streetSuffix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Suffix to the street name. For example: North, South, East, West.
            '''

        })
    '''
    Suffix to the street name. For example: North, South, East, West.
    '''

    suiteNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of the apartment or suite.
            '''

        })
    '''
    Number of the apartment or suite.
    '''

    Cadastre: Optional[Cadastre] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cadastre.Address',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cadastre encompassing one or more physical addresses.
            '''

        })
    '''
    Cadastre encompassing one or more physical addresses.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Current status of the address e.g. pending, approved
            '''

        })
    '''
    Current status of the address e.g. pending, approved
    '''

    AdditionalAddressInformation: list[AdditionalAddressInformation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AdditionalAddressInformation.Address',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Additional information for a given address.
            '''

        })
    '''
    Additional information for a given address.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhysicalAddress(Address):
    '''
    The structured geographic and administrative context of a physical place
    where an organisation, person, or activity is located.
    PhysicalAddress is used for precisely identifying, classifying, and locating
    entities for regulatory, logistical, or informational purposes.
    '''

    community: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Community in which the locality is, and which is in the municipality, city
            or town.. For example, Anderston, Glasgow City, Scotland or another appropriate
            fourth-level administrative division
            '''

        })
    '''
    Community in which the locality is, and which is in the municipality,
    city or town.. For example, Anderston, Glasgow City, Scotland or another
    appropriate fourth-level administrative division
    '''

    globalLocationNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Global Location Number (GLN, sometimes also referred to as International
            Location Number or ILN) of the respective organization, person, or place.
            The GLN is a 13-digit number used to identify parties and physical locations.
            '''

        })
    '''
    Global Location Number (GLN, sometimes also referred to as International
    Location Number or ILN) of the respective organization, person, or
    place. The GLN is a 13-digit number used to identify parties and physical
    locations.
    '''

    isicV4: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            International Standard of Industrial Classification of All Economic Activities
            (ISIC), Revision 4 code for a particular organization, business person,
            or place.
            '''

        })
    '''
    International Standard of Industrial Classification of All Economic
    Activities (ISIC), Revision 4 code for a particular organization, business
    person, or place.
    '''

    isWithinTownLimits: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If TRUE, this street is within the legal geographical boundaries of the
            specified town (default).
            '''

        })
    '''
    If TRUE, this street is within the legal geographical boundaries of
    the specified town (default).
    '''

    municipality: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the municipality within which the address is located. A municipality
            refers to a village, town, or city that has corporate status and powers
            of self-government or jurisdiction as granted by national and regional
            laws to which it is subordinate.
            '''

        })
    '''
    Name of the municipality within which the address is located. A municipality
    refers to a village, town, or city that has corporate status and powers
    of self-government or jurisdiction as granted by national and regional
    laws to which it is subordinate.
    '''

    nearestIntersection: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The names of streets at the nearest intersection to work area.
            '''

        })
    '''
    The names of streets at the nearest intersection to work area.
    '''

    Building: Optional[Building] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Building.PhysicalAddress',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.PhysicalAddress',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Building: Optional[Building] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Building.PhysicalAddress',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.PhysicalAddress',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class PostalAddress(Address):
    '''
    A reliable, private, and secure mailing address housed within a postal
    facility.
    '''

    postOfficeBoxNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Post office box identifier. Typically a numeric or alphanumeric string
            with or without separators (dashes, spaces, or slashes) between numeric
            or alphanumeric characters.
            '''

        })
    '''
    Post office box identifier. Typically a numeric or alphanumeric string
    with or without separators (dashes, spaces, or slashes) between numeric
    or alphanumeric characters.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AdjacentCASet(IdentifiedObject):
    '''
    Groups Adjacent Control Areas.
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.AdjacentCASet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Agent(IdentifiedObject):
    '''
    An agent is an entity that bears some form of responsibility for an activity
    taking place, for the existence of an entity, or for another agent's activity.
    '''

    url: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            URL of the agent. Uniform Resource Locator (URL), colloquially termed a
            web address, is a reference to a web resource that specifies its location
            on a computer network and a mechanism for retrieving it. A URL is a specific
            type of Uniform Resource Identifier (URI).
            '''

        })
    '''
    URL of the agent. Uniform Resource Locator (URL), colloquially termed
    a web address, is a reference to a web resource that specifies its
    location on a computer network and a mechanism for retrieving it. A
    URL is a specific type of Uniform Resource Identifier (URI).
    '''

    AgentCapability: list[AgentCapability] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AgentCapability.Agent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AgentRole: list[AgentRole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AgentRole.Agent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContactPoint: list[ContactPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContactPoint.Agent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AutonomousAgent(Agent):
    '''
    An inanimate intelligent Thing that acts on behalf of a Person or Organization.
    An Autonomous Agent is a type of Agent.
    Note:An Agent is not a role.
    '''

    machineIdentity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Unique descriptors of an organisations device or workload used to authenticate
            communication and system access. Devices can be phone, mobile device, server,
            desktop computer, Internet of Things (IoT) or Operational Technology (OT).
            Workloads can be containers, virtual machine (VM), application, service,
            Robotic Process Automation (RPA) or script.
            '''

        })
    '''
    Unique descriptors of an organisations device or workload used to authenticate
    communication and system access. Devices can be phone, mobile device,
    server, desktop computer, Internet of Things (IoT) or Operational Technology
    (OT).
    Workloads can be containers, virtual machine (VM), application, service,
    Robotic Process Automation (RPA) or script.
    '''

    otherAutonomousAgentKind: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the kind of autonomous agent when
            the value for the attribute AutonomousAgent.kind is "other."
            '''

        })
    '''
    This attribute should be used to specify the kind of autonomous agent
    when the value for the attribute AutonomousAgent.kind is "other."
    '''

    kind: Optional[AutonomousAgentKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The kind of autonomous agent.
            '''

        })
    '''
    The kind of autonomous agent.
    '''

    AutonomousFunction: list[AutonomousFunction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AutonomousFunction.AutonomousAgent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Organisation(Agent):
    '''
    A collection of one or more people organised together into some type of
    structure for a specific purpose.
    An Organisation is a type of Agent.
    '''

    isLegalEntity: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If TRUE, the organisation is a legal entity.
            '''

        })
    '''
    If TRUE, the organisation is a legal entity.
    '''

    iso6523Code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Organisation identifier as defined in ISO 6523(-1). Note that many existing
            organization identifiers such as leiCode, duns and vatID can be expressed
            as an ISO 6523 identifier by setting the ICD part of the ISO 6523 identifier
            accordingly.
            '''

        })
    '''
    Organisation identifier as defined in ISO 6523(-1). Note that many
    existing organization identifiers such as leiCode, duns and vatID can
    be expressed as an ISO 6523 identifier by setting the ICD part of the
    ISO 6523 identifier accordingly.
    '''

    vatID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Value-added Tax ID of the organisation.
            '''

        })
    '''
    The Value-added Tax ID of the organisation.
    '''

    category: Optional[OrganisationCategoryKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The list of the kinds of organisations regarded as having particular shared
            characteristics.
            '''

        })
    '''
    The list of the kinds of organisations regarded as having particular
    shared characteristics.
    '''

    legalEntity: Optional[LegalEntityKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The kind of legal entity the organisation is as defined by its articles
            of incorporation.
            '''

        })
    '''
    The kind of legal entity the organisation is as defined by its articles
    of incorporation.
    '''

    AgentCapability: Optional[AgentCapability] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AgentCapability.CertificationOrganisation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ParentOrganisation: Optional[ParentOrganization] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Organisation.SubordinateOrganisation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Parent organisation of this organisation.
            '''

        })
    '''
    Parent organisation of this organisation.
    '''

    AgentCapability: Optional[AgentCapability] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AgentCapability.CertificationOrganisation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Crew(Organisation):
    '''
    Group of people with specific skills, tools, and vehicles.
    '''

    CrewType: Optional[CrewType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CrewType.Crews',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of this crew.
            '''

        })
    '''
    Type of this crew.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of this crew.
            '''

        })
    '''
    Status of this crew.
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCapability: Optional[WorkCapability] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCapability.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkManager: Optional[WorkManager] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkManager.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The work organisation to which crews are assigned.
            '''

        })
    '''
    The work organisation to which crews are assigned.
    '''

    WorkOrganisation: Optional[WorkOrganisation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkOrganisation.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The work organisation to which crews are assigned.
            '''

        })
    '''
    The work organisation to which crews are assigned.
    '''

    CrewMembers: list[CrewMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CrewMember.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All members of this crew.
            '''

        })
    '''
    All members of this crew.
    '''

    FieldDispatchHistory: list[FieldDispatchHistory] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FieldDispatchHistory.Crew',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketParticipant(Organisation):
    '''
    An identification of a party acting in a electricity market business process.
    This class is used to identify organisations that can participate in market
    management and/or market operations.
    '''

    MktActivityRecord: Optional[MktActivityRecord] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktActivityRecord.MarketParticipant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.MarketParticipant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RTO(MarketParticipant):
    '''
    Regional transmission operator.
    '''

    AggregateNode: list[AggregateNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AggregateNode.RTO',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnergyMarkets: list[EnergyMarket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyMarket.RTO',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: list[MktConnectivityNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktConnectivityNode.RTO',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ParentOrganization(Organisation):
    '''
    '''

    SubordinateOrganisation: list[Organisation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Organisation.ParentOrganisation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkOrganisation(Organisation):
    '''
    Identifies an organisation that will be responsible for planning, scheduling
    and performing the work.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.WorkOrganisation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Crews assigned to a given work organisation.
            '''

        })
    '''
    Crews assigned to a given work organisation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Person(Agent):
    '''
    General purpose information for name and other information to contact people.
    The inherited attribute Person.name shall be the concatenation of prefix,
    firstName, middleName, lastName, generationIdentifier, and suffix with
    the space character as the delimiter between each element of the person's
    name.
    '''

    firstName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Person's first name.
            '''

        })
    '''
    Person's first name.
    '''

    lastName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Person's last (family, sir) name.
            '''

        })
    '''
    Person's last (family, sir) name.
    '''

    middleName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Middle name(s) or initial(s).
            '''

        })
    '''
    Middle name(s) or initial(s).
    '''

    preferredName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The name the person prefers to be used in communications and when spoken
            to.
            '''

        })
    '''
    The name the person prefers to be used in communications and when spoken
    to.
    '''

    prefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A prefix or title for the person's name, such as Miss, Mister, Doctor,
            etc.
            '''

        })
    '''
    A prefix or title for the person's name, such as Miss, Mister, Doctor,
    etc.
    '''

    suffix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A suffix for the person's name
            '''

        })
    '''
    A suffix for the person's name
    '''

    generationalSuffix: Optional[GenerationalSuffixKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A suffix used to distinguish persons who share the same name within a family,
            such as II, III, etc..
            '''

        })
    '''
    A suffix used to distinguish persons who share the same name within
    a family, such as II, III, etc..
    '''

    PersonRole: list[PersonRole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PersonRole.Person',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All roles of this person.
            '''

        })
    '''
    All roles of this person.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class OldPerson(Person):
    '''
    General purpose information for name and other information to contact people.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Utility-specific classification for this person, according to the utility's
            corporate standards and practices. Examples include employee, contractor,
            agent, not affiliated, etc.
            Note that this field is not used to indicate whether this person is a customer
            of the utility. Often an employee or contractor is also a customer. Customer
            information is gained with relationship to Organisation and CustomerData.
            In similar fashion, this field does not indicate the various roles this
            person may fill as part of utility operations.
            '''

        })
    '''
    Utility-specific classification for this person, according to the utility's
    corporate standards and practices. Examples include employee, contractor,
    agent, not affiliated, etc.
    Note that this field is not used to indicate whether this person is
    a customer of the utility. Often an employee or contractor is also
    a customer. Customer information is gained with relationship to Organisation
    and CustomerData. In similar fashion, this field does not indicate
    the various roles this person may fill as part of utility operations.
    '''

    CustomerData: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.ErpPersons',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpCompetency: Optional[ErpCompetency] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpCompetency.ErpPersons',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPersonnel: Optional[ErpPersonnel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPersonnel.ErpPersons',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeasurementValues: list[MeasurementValue] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeasurementValue.ErpPerson',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Skills: list[Skill] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Skill.ErpPerson',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AgentRole(IdentifiedObject):
    '''
    The agent role captures the semantics of the role played by an agent in
    a particular agent relationship. The semantics are captured in the IdentifiedObject.description
    attribute.
    '''

    globalLocationNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Global Location Number (GLN, sometimes also referred to as International
            Location Number or ILN) of the respective organization, person, or place.
            The GLN is a 13-digit number used to identify parties and physical locations.
            '''

        })
    '''
    Global Location Number (GLN, sometimes also referred to as International
    Location Number or ILN) of the respective organization, person, or
    place. The GLN is a 13-digit number used to identify parties and physical
    locations.
    '''

    isicV4: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            International Standard of Industrial Classification of All Economic Activities
            (ISIC), Revision 4 code for a particular organization, business person,
            or place.
            '''

        })
    '''
    International Standard of Industrial Classification of All Economic
    Activities (ISIC), Revision 4 code for a particular organization, business
    person, or place.
    '''

    kind: Optional[AgentRoleKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute when used applies a restriction on the type of Agent that
            can play the role. For example, only a Person can play the role of Employee.
            If this attribute is not used then the role can be played by any type of
            Agent.
            '''

        })
    '''
    This attribute when used applies a restriction on the type of Agent
    that can play the role. For example, only a Person can play the role
    of Employee. If this attribute is not used then the role can be played
    by any type of Agent.
    '''

    Agent: Optional[Agent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Agent.AgentRole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AgentRoleQualification: list[AgentRoleQualification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AgentRoleQualification.AgentRole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedAgentRole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this agent role.
            '''

        })
    '''
    All configuration events created for this agent role.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Customer(AgentRole):
    '''
    An Organisation or Person receiving services from service supplier.
    '''

    ErpPersons: list[OldPerson] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldPerson.CustomerData',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OrganisationRole(AgentRole):
    '''
    Identifies a way in which an organisation may participate in the utility
    enterprise (e.g., contractor, manufacturer, etc).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetOwner(OrganisationRole):
    '''
    Owner of the asset.
    '''

    Ownerships: list[Ownership] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Ownership.AssetOwner',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All ownerships of this owner.
            '''

        })
    '''
    All ownerships of this owner.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketRole(OrganisationRole):
    '''
    The external intended behavior played by a party within the electricity
    market.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The kind of market roles that can be played by parties for given domains
            within the electricity market. Types are flexible using dataType of string
            for free-entry of role types.
            '''

        })
    '''
    The kind of market roles that can be played by parties for given domains
    within the electricity market. Types are flexible using dataType of
    string for free-entry of role types.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PersonRole(AgentRole):
    '''
    Identifies a way in which a person may participate in the utility enterprise
    (e.g., contractor, crew member, etc).
    '''

    Person: Optional[Person] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Person.PersonRole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Person having this role.
            '''

        })
    '''
    Person having this role.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CrewMember(PersonRole):
    '''
    Member of a crew.
    '''

    Crew: Optional[Crew] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Crew.CrewMembers',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Crew to which this crew member belongs.
            '''

        })
    '''
    Crew to which this crew member belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkManager(AgentRole):
    '''
    Identifies an organization or person that will be responsible for planning,
    scheduling and performing the work.
    '''

    workOrganisationType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of work organisation e.g. electrical contractor, maintenance department,
            engineering department, etc.
            '''

        })
    '''
    The type of work organisation e.g. electrical contractor, maintenance
    department, engineering department, etc.
    '''

    WorkRequest: Optional[WorkRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkRequest.WorkManager',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Work requests assigned to a work organization.
            '''

        })
    '''
    Work requests assigned to a work organization.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.WorkManager',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Crews assigned to a given work organisation.
            '''

        })
    '''
    Crews assigned to a given work organisation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AggregateNode(IdentifiedObject):
    '''
    An aggregated node can define a typed grouping further defined by the AnodeType
    enumeration. Types range from System Zone/Regions to Market Energy Regions
    to Aggregated Loads and Aggregated Generators.
    '''

    qualifASOrder: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Processing Order for AS self-provisions for this region. The priority of
            this attribute directs the awards of any resource that resides in overlapping
            regions. The regions are processed in priority manner.
            '''

        })
    '''
    Processing Order for AS self-provisions for this region. The priority
    of this attribute directs the awards of any resource that resides in
    overlapping regions. The regions are processed in priority manner.
    '''

    anodeType: Optional[AnodeType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of aggregated node
            '''

        })
    '''
    Type of aggregated node
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.AggregateNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.AggregateNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.AggregateNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A RegisteredResource can be associated to only one AggregateNode if not
            connected to a Pnode or MktConnectivityNode.
            '''

        })
    '''
    A RegisteredResource can be associated to only one AggregateNode if
    not connected to a Pnode or MktConnectivityNode.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AltGeneratingUnitMeas(IdentifiedObject):
    '''
    A prioritized measurement to be used for the generating unit in the control
    area specification.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority of a measurement usage. Lower numbers have first priority.
            '''

        })
    '''
    Priority of a measurement usage. Lower numbers have first priority.
    '''

    AnalogValue: Optional[AnalogValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AltGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The specific analog value used as a source.
            '''

        })
    '''
    The specific analog value used as a source.
    '''

    ControlAreaGeneratingUnit: Optional[ControlAreaGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlAreaGeneratingUnit.AltGeneratingUnitMeas',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The control area generating unit to which the prioritized measurement assignment
            is applied.
            '''

        })
    '''
    The control area generating unit to which the prioritized measurement
    assignment is applied.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AltTieMeas(IdentifiedObject):
    '''
    A prioritized measurement to be used for the tie flow as part of the control
    area specification.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority of a measurement usage. Lower numbers have first priority.
            '''

        })
    '''
    Priority of a measurement usage. Lower numbers have first priority.
    '''

    AnalogValue: Optional[AnalogValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AltTieMeas',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The specific analog value used as a source.
            '''

        })
    '''
    The specific analog value used as a source.
    '''

    TieFlow: Optional[TieFlow] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TieFlow.AltTieMeas',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tie flow of the alternate measurements.
            '''

        })
    '''
    The tie flow of the alternate measurements.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Appointment(IdentifiedObject):
    '''
    Meeting time and location.
    '''

    callAhead: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if requested to call customer when someone is about to arrive at their
            premises.
            '''

        })
    '''
    True if requested to call customer when someone is about to arrive
    at their premises.
    '''

    meetingInterval: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time reserved for appointment.
            '''

        })
    '''
    Date and time reserved for appointment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Asset(IdentifiedObject):
    '''
    Tangible resource of the utility, including power system equipment, various
    end devices, cabinets, buildings, etc. For electrical network equipment,
    the role of the asset is defined through PowerSystemResource and its subclasses,
    defined mainly in the Wires model (refer to IEC61970-301 and model package
    IEC61970::Wires). Asset description places emphasis on the physical characteristics
    of the equipment fulfilling that role.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedAsset',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this asset.
            '''

        })
    '''
    All configuration events created for this asset.
    '''

    Measurements: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.Asset',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Measurement related to this asset.
            '''

        })
    '''
    Measurement related to this asset.
    '''

    Ownerships: list[Ownership] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Ownership.Asset',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All ownerships of this asset.
            '''

        })
    '''
    All ownerships of this asset.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Bushing(Asset):
    '''
    Bushing asset.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.Bushing',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Terminal to which this bushing is attached.
            '''

        })
    '''
    Terminal to which this bushing is attached.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class DuctBank(Asset):
    '''
    A duct contains individual wires in the layout as specified with associated
    wire spacing instances; number of them gives the number of conductors in
    this duct.
    '''

    WireSpacingInfos: list[WireSpacingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IntraphaseSpacing.DuctBank',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WireSpacingInfos: list[WireSpacingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WireSpacingInfo.DuctBank',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetInfo(IdentifiedObject):
    '''
    Set of attributes of an asset, representing typical datasheet information
    of a physical device that can be instantiated and shared in different data
    exchange contexts:
    - as attributes of an asset instance (installed or in stock)
    - as attributes of an asset model (product by a manufacturer)
    - as attributes of a type asset (generic type of an asset as used in designs/extension
    planning).
    '''

    AssetRequirement: Optional[AssetRequirement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetRequirement.AssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CatalogAssetType: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.AssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asset information (nameplate) for this catalog asset type.
            '''

        })
    '''
    Asset information (nameplate) for this catalog asset type.
    '''

    ChildAssetInfoComponent: Optional[AssetInfoComponent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfoComponent.ParentAssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ParentAssetInfoComponent: Optional[AssetInfoComponent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfoComponent.ChildAssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductAssetModel: Optional[ProductAssetModel] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProductAssetModel.AssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Product asset model which conforms to this catalog asset type.
            '''

        })
    '''
    Product asset model which conforms to this catalog asset type.
    '''

    ParentAssetInfoComponent: Optional[AssetInfoComponent] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfoComponent.ChildAssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChildAssetInfoComponent: Optional[AssetInfoComponent] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfoComponent.ParentAssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PowerSystemResources: list[PowerSystemResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerSystemResource.AssetDatasheet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All power system resources with this datasheet information.
            '''

        })
    '''
    All power system resources with this datasheet information.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CapacitorBankInfo(AssetInfo):
    '''
    Capacitor bank asset information
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConductingAssetInfo(AssetInfo):
    '''
    Generic information for conducting asset
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedFrequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated frequency such as 50Hz or 60Hz
            '''

        })
    '''
    Rated frequency such as 50Hz or 60Hz
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    phaseCount: Optional[PhaseCountKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of phases
            '''

        })
    '''
    Number of phases
    '''

    ShortCircuitRespone: list[ShortCircuitResponse] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShortCircuitResponse.ConductingAssetInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BundledCableInfo(ConductingAssetInfo):
    '''
    Bundling two or more conductors, at most one bare wire.
    '''

    additionalConductorCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Additional conductor count
            '''

        })
    '''
    Additional conductor count
    '''

    hasNeutral: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if neutral
            '''

        })
    '''
    True if neutral
    '''

    insulatedNeutral: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if neutral wire is insulated
            '''

        })
    '''
    True if neutral wire is insulated
    '''

    neutralSizeDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral wire size description
            '''

        })
    '''
    Neutral wire size description
    '''

    neutralStrandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral wire strand count
            '''

        })
    '''
    Neutral wire strand count
    '''

    neutralStrandRDC20: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral strand DC resistance per unit length of the conductor at 20 &#176;C
            '''

        })
    '''
    Neutral strand DC resistance per unit length of the conductor at 20
    &#176;C
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusbarSectionInfo(ConductingAssetInfo):
    '''
    Busbar section data.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BushingInfo(ConductingAssetInfo):
    '''
    Bushing datasheet information.
    '''

    c1Capacitance: Optional[ float | Capacitance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Factory measured capacitance, measured between the power factor tap and
            the bushing conductor.
            '''

        })
    '''
    Factory measured capacitance, measured between the power factor tap
    and the bushing conductor.
    '''

    c1PowerFactor: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Factory measured insulation power factor, measured between the power factor
            tap and the bushing conductor.
            '''

        })
    '''
    Factory measured insulation power factor, measured between the power
    factor tap and the bushing conductor.
    '''

    c2Capacitance: Optional[ float | Capacitance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Factory measured capacitance measured between the power factor tap and
            ground.
            '''

        })
    '''
    Factory measured capacitance measured between the power factor tap
    and ground.
    '''

    c2PowerFactor: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Factory measured insulation power factor, measured between the power factor
            tap and ground.
            '''

        })
    '''
    Factory measured insulation power factor, measured between the power
    factor tap and ground.
    '''

    ratedImpulseWithstandVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated impulse withstand voltage, also known as BIL (Basic Impulse Level).
            '''

        })
    '''
    Rated impulse withstand voltage, also known as BIL (Basic Impulse Level).
    '''

    ratedLineToGroundVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated line-to-ground voltage. Also referred to as Uy on bushing nameplate.
            '''

        })
    '''
    Rated line-to-ground voltage. Also referred to as Uy on bushing nameplate.
    '''

    insulationKind: Optional[BushingInsulationKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of insulation.
            '''

        })
    '''
    Kind of insulation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CapacitorCanInfo(ConductingAssetInfo):
    '''
    A CapacitorCan info class is used to store asset info data for the small
    2.4 - 25 KV capacitor units which make up a capacitor bank. These cans
    are connected in series to equal the energized voltage and connected in
    parallel groups to create the desired Mvar ratings.
    '''

    dielectricFluidType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of dielectric fluid used for the capacitors (ex. WEMCOL, DPO, AROCLOR,
            etc.).
            '''

        })
    '''
    Type of dielectric fluid used for the capacitors (ex. WEMCOL, DPO,
    AROCLOR, etc.).
    '''

    dielectricFluidVolume: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Volume of dielectric fluid (oil) in litres.
            '''

        })
    '''
    Volume of dielectric fluid (oil) in litres.
    '''

    ratedCapacitance: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The factory rating of the capacitor cans in uF (Farads). All the capacitors
            in a capacitor bank have more or less equal capacitance coming out of factory.
            '''

        })
    '''
    The factory rating of the capacitor cans in uF (Farads). All the capacitors
    in a capacitor bank have more or less equal capacitance coming out
    of factory.
    '''

    ratedReactiveRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactive power rating of the capacitor cans in KVAR at the can rated
            voltage.
            '''

        })
    '''
    The reactive power rating of the capacitor cans in KVAR at the can
    rated voltage.
    '''

    weight: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total weight of one capacitor can (i.e., 20kG).
            '''

        })
    '''
    Total weight of one capacitor can (i.e., 20kG).
    '''

    dischargeResistorType: Optional[DischargeResistorKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            discharge resister installed, what type is it? (i.e. internal, external
            or not installed)
            '''

        })
    '''
    discharge resister installed, what type is it? (i.e. internal, external
    or not installed)
    '''

    fusingType: Optional[CapacitorCanFusingKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of fusing used (i.e. internal or external). Fuses may be included
            inside the can or attached to the external terminal of the can.
            '''

        })
    '''
    The type of fusing used (i.e. internal or external). Fuses may be included
    inside the can or attached to the external terminal of the can.
    '''

    terminalConnectionType: Optional[TerminalConnectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal connection of the capacitor cans (i.e. single bushing double
            bushing or triple bushing).
            '''

        })
    '''
    The terminal connection of the capacitor cans (i.e. single bushing
    double bushing or triple bushing).
    '''

    rated10PctVoltTime: Optional[TimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time it takes to discharge to one tenth of the capacitor cans voltage
            rating.
            '''

        })
    '''
    The time it takes to discharge to one tenth of the capacitor cans voltage
    rating.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CompensatorInfo(ConductingAssetInfo):
    '''
    Data sheet for compensation devices which can be used in a shunt or series
    application.
    Compensator can be specialized to Capacitor or Reactor.
    '''

    maxPowerLoss: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed apparent power loss.
            '''

        })
    '''
    Maximum allowed apparent power loss.
    '''

    ratedReactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive Power produced by the bank at rated voltage
            '''

        })
    '''
    Reactive Power produced by the bank at rated voltage
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CapacitorInfo(CompensatorInfo):
    '''
    Common properties of capacitor asset which can be used in a shunt or series
    application.
    Also named as capacitor bank by IEC 60050
    '''

    maxAmbientTempRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum Operating ambient temperature (i.e., +85 DEG C).
            '''

        })
    '''
    Maximum Operating ambient temperature (i.e., +85 DEG C).
    '''

    minAmbientTempRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum Operating ambient temperature (i.e., -40 DEG C).
            '''

        })
    '''
    Minimum Operating ambient temperature (i.e., -40 DEG C).
    '''

    numberOfCansPerPhase: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total number of cans per phase in the capacitor bank
            '''

        })
    '''
    Total number of cans per phase in the capacitor bank
    '''

    parallelUnitsPerPhase: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Per phase how many elements are connected in parallel units per series
            group.
            '''

        })
    '''
    Per phase how many elements are connected in parallel units per series
    group.
    '''

    seriesGroupsPerPhase: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Per phase how many series groups (or sections) in the capacitor unit are
            connected.
            '''

        })
    '''
    Per phase how many series groups (or sections) in the capacitor unit
    are connected.
    '''

    ratedImpulseWithstandVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Basic Insulation Level voltage in kilovolts (lightening impulse withstand
            voltage).
            '''

        })
    '''
    Basic Insulation Level voltage in kilovolts (lightening impulse withstand
    voltage).
    '''

    capacitorRackType: Optional[CapacitorRackKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rack type used (ie. Enclosed Rack or Open Rack).
            '''

        })
    '''
    Rack type used (ie. Enclosed Rack or Open Rack).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SeriesCapacitorInfo(CapacitorInfo):
    '''
    Class for specializing CapacitorInfo when used as in a series application.
    This specialization does not require any attributes.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCapacitorInfo(CapacitorInfo):
    '''
    Class for specializing CapacitorInfo when used as in a shunt application
    and adding attributes for this specialization.
    '''

    connectionKind: Optional[CompensatorConnectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Connection type of the capacitor bank (i.e. wye, grounded wye or delta).
            '''

        })
    '''
    Connection type of the capacitor bank (i.e. wye, grounded wye or delta).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FACTSInfo(CompensatorInfo):
    '''
    Flexible alternating current transmission system
    High speed reactive compensation device
    '''

    appliedHarmonicFiltering: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description of the harmonic filtering applied in the FACTS (5th order,
            7th order, etc.) There may be multiple harmonics which are filtered
            '''

        })
    '''
    Description of the harmonic filtering applied in the FACTS (5th order,
    7th order, etc.) There may be multiple harmonics which are filtered
    '''

    coolingType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The cooling type of the FACTS Device Thyristors
            ex. Air Cooled, Water Cooled
            '''

        })
    '''
    The cooling type of the FACTS Device Thyristors
    ex. Air Cooled, Water Cooled
    '''

    capacitorHarmonicFilterRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total Capacitor Harmonic Filter Rating in Reactance (imaginary part of
            impedance), at rated frequency provided in the applied harmonic filtering
            '''

        })
    '''
    Total Capacitor Harmonic Filter Rating in Reactance (imaginary part
    of impedance), at rated frequency provided in the applied harmonic
    filtering
    '''

    maxCapacitiveReactance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitive Reactance - Maximum Capacitive reactive impedance the FACTS
            can supply
            '''

        })
    '''
    Capacitive Reactance - Maximum Capacitive reactive impedance the FACTS
    can supply
    '''

    maxInductiveReactance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive Reactance - Maximum inductive reactive impedance the FACTS can
            supply
            '''

        })
    '''
    Reactive Reactance - Maximum inductive reactive impedance the FACTS
    can supply
    '''

    maxMechanicalSwitchedCapacitance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total capacitor's reactive impedance of mechanically switched Capacitors
            under the control of the FACTS. Capacitors may be switched by breakers
            or circuit switchers.
            '''

        })
    '''
    Total capacitor's reactive impedance of mechanically switched Capacitors
    under the control of the FACTS. Capacitors may be switched by breakers
    or circuit switchers.
    '''

    maxMechanicalSwitchedReactance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total inductor's reactive impedance of mechanically switched Reactors under
            the control of the FACTS. Reactors may be switched by breakers or circuit
            switchers.
            '''

        })
    '''
    Total inductor's reactive impedance of mechanically switched Reactors
    under the control of the FACTS. Reactors may be switched by breakers
    or circuit switchers.
    '''

    nomU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated Voltage for the shunt capacitors and reactors in the FACTS device.
            '''

        })
    '''
    Rated Voltage for the shunt capacitors and reactors in the FACTS device.
    '''

    reactorHarmonicFilterRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total Reactor Harmonic Filter Rating in Reactance (imaginary part of impedance),
            at rated frequency provided in the applied harmonic filtering.
            '''

        })
    '''
    Total Reactor Harmonic Filter Rating in Reactance (imaginary part of
    impedance), at rated frequency provided in the applied harmonic filtering.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SVCInfo(FACTSInfo):
    '''
    Static Var Compensator - High speed switched reactor and capacitor.
    '''

    tcrRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rating in reactance if the Static Var Compensator has a Thyristor Switched
            Reactor
            '''

        })
    '''
    Rating in reactance if the Static Var Compensator has a Thyristor Switched
    Reactor
    '''

    tscRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rating in reactance if the Static Var Compensator has a Thyristor Switched
            Capacitor
            '''

        })
    '''
    Rating in reactance if the Static Var Compensator has a Thyristor Switched
    Capacitor
    '''

    svcReactiveControlType: Optional[SVCReactiveControlKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An SVC can either be set to control the voltage of a bus or provide contant
            Mvar to the bus.
            '''

        })
    '''
    An SVC can either be set to control the voltage of a bus or provide
    contant Mvar to the bus.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SelfSaturatedReactorInfo(SVCInfo):
    '''
    Inductor made up of a transformer like core. The secondary winding is driven
    by a DC source to saturate the AC winding.
    Shunt Capacitor in addition to saturated inductor provide Mvars to increase
    and decrease voltage.
    This is pretty old technology.
    '''

    fixedSeriesCapacitance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Slope correcting capacitor rating in reactance which is connected in series
            with the self saturated reactor.
            '''

        })
    '''
    Slope correcting capacitor rating in reactance which is connected in
    series with the self saturated reactor.
    '''

    fixedShuntCapacitance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shunt connected capacitors rating in reactance which are used to provide
            negative reactance for voltage support.
            '''

        })
    '''
    Shunt connected capacitors rating in reactance which are used to provide
    negative reactance for voltage support.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StatComInfo(FACTSInfo):
    '''
    StatCom - Static Synchronous Compensator High speed continuous reactor
    and capacitor.
    '''

    maxNegativeMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If an active power source is available in the STATCOM, the Maximum MW that
            the STATCOM can absorb from the grid
            '''

        })
    '''
    If an active power source is available in the STATCOM, the Maximum
    MW that the STATCOM can absorb from the grid
    '''

    maxPositiveMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If an active power source is available in the STATCOM, the Maximum MW that
            the STATCOM can provide to the grid
            '''

        })
    '''
    If an active power source is available in the STATCOM, the Maximum
    MW that the STATCOM can provide to the grid
    '''

    activePowerSourceType: Optional[ActivePowerSourceKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Enumeration used to designate the type of Active power source used by the
            STATCOM.
            '''

        })
    '''
    Enumeration used to designate the type of Active power source used
    by the STATCOM.
    '''

    dcConverterType: Optional[STATCOMKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type DC to AC converter unit providing the AC compensation
            '''

        })
    '''
    The type DC to AC converter unit providing the AC compensation
    '''

    powerElectronicsGateType: Optional[PowerElectronicsGateKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of electronics used for the series gates.
            '''

        })
    '''
    Type of electronics used for the series gates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReactorInfo(CompensatorInfo):
    '''
    Common properties of reactor asset which can be used in a shunt or series
    application. Reactors may be dry type or oil filled.
    '''

    coreCoilsWeight: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Weight of the core and coils of the device in kilograms.
            '''

        })
    '''
    Weight of the core and coils of the device in kilograms.
    '''

    oilType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type or designation of oil used for the dielectric medium (ex. VoltEsso,
            Nynas, Luminol, etc.).
            '''

        })
    '''
    Type or designation of oil used for the dielectric medium (ex. VoltEsso,
    Nynas, Luminol, etc.).
    '''

    oilWeight: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Weight of all the oil in the device in kilograms.
            '''

        })
    '''
    Weight of all the oil in the device in kilograms.
    '''

    ratedInductance: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductance of device in mH - Milli-Henry.
            '''

        })
    '''
    Inductance of device in mH - Milli-Henry.
    '''

    ratedMechanicalCurrent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The amount of current that creates the maximum allowable force in the conductor
            of a reactor.
            '''

        })
    '''
    The amount of current that creates the maximum allowable force in the
    conductor of a reactor.
    '''

    ratedThermalCurrent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'NeedsWork Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum current the device can withstand for a period of one second.
            '''

        })
    '''
    Maximum current the device can withstand for a period of one second.
    '''

    tankAndFittingsWeight: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Weight of the tanks and fittings of the device in kilograms.
            '''

        })
    '''
    Weight of the tanks and fittings of the device in kilograms.
    '''

    temperatureClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Insulation class based on temperature (ie: Y, A, E, B, F, N, H, C).
            '''

        })
    '''
    Insulation class based on temperature (ie: Y, A, E, B, F, N, H, C).
    '''

    temperatureRise: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Temperature rise of equipment over ambient in degrees Celsius.
            '''

        })
    '''
    Temperature rise of equipment over ambient in degrees Celsius.
    '''

    volumeOfOil: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Volume of oil in litres.
            '''

        })
    '''
    Volume of oil in litres.
    '''

    ratedImpulseWithstandVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Basic Insulation Level voltage in kilovolts (lightening impulse withstand
            voltage).
            '''

        })
    '''
    Basic Insulation Level voltage in kilovolts (lightening impulse withstand
    voltage).
    '''

    circulationAndCoolingType: Optional[CirculationAndCoolingKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The method used to cool the shunt reactor, O: oil; A: air; N: natural;
            F: forced (ie: ON, ONAN, ONAF or OFAF).
            '''

        })
    '''
    The method used to cool the shunt reactor, O: oil; A: air; N: natural;
    F: forced (ie: ON, ONAN, ONAF or OFAF).
    '''

    coreType: Optional[ReactorCoreKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of core of the reactor. Example Air, steel, concrete
            '''

        })
    '''
    The type of core of the reactor. Example Air, steel, concrete
    '''

    insulationMedium: Optional[ReactorInsulationMediumKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This property denotes whether the reactor is air or oil.
            '''

        })
    '''
    This property denotes whether the reactor is air or oil.
    '''

    oilPreservationType: Optional[OilPreservationKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of oil preservation.
            '''

        })
    '''
    Kind of oil preservation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SeriesReactorInfo(ReactorInfo):
    '''
    Class for specializing ReactorInfo when used as in a series application.
    This specialization does not require any attributes.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntReactorInfo(ReactorInfo):
    '''
    Class for specializing ReactorInfo when used as in a shunt application
    and adding attributes for this specialization.
    '''

    TapChangerInfo: Optional[TapChangerInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChangerInfo.ShuntReactorInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CompositeSwitchInfo(ConductingAssetInfo):
    '''
    Properties of a composite switch.
    '''

    ganged: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if multi-phase switch controls all phases concurrently.
            '''

        })
    '''
    True if multi-phase switch controls all phases concurrently.
    '''

    initOpMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Initial operating mode, with the following values: Automatic, Manual.
            '''

        })
    '''
    Initial operating mode, with the following values: Automatic, Manual.
    '''

    phaseCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Supported number of phases, typically 0, 1 or 3.
            '''

        })
    '''
    Supported number of phases, typically 0, 1 or 3.
    '''

    remote: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if device is capable of being operated by remote control.
            '''

        })
    '''
    True if device is capable of being operated by remote control.
    '''

    switchStateCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of switch states represented by the composite switch.
            '''

        })
    '''
    Number of switch states represented by the composite switch.
    '''

    interruptingRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Breaking capacity, or short circuit rating, is the maximum rated current
            which the device can safely interrupt at the rated voltage.
            '''

        })
    '''
    Breaking capacity, or short circuit rating, is the maximum rated current
    which the device can safely interrupt at the rated voltage.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    kind: Optional[CompositeSwitchKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of composite switch.
            '''

        })
    '''
    Kind of composite switch.
    '''

    phaseCode: Optional[PhaseCode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phases carried, if applicable.
            '''

        })
    '''
    Phases carried, if applicable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConductorInfo(ConductingAssetInfo):
    '''
    Common class for rigid and flexible conductors.
    [IEC 826-14-06]: Conductive part intended to carry a specified electric
    current
    '''

    purpose: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase, neutral, lighting, or something else
            '''

        })
    '''
    Phase, neutral, lighting, or something else
    '''

    crossSection: Optional[ float | Area ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Area of conducting material cross section
            '''

        })
    '''
    Area of conducting material cross section
    '''

    massPerLength: Optional[ float | MassPerLength ] = field(
        default=None,
        metadata={
        'type': 'NeedsWork Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Area of conducting material cross section
            '''

        })
    '''
    Area of conducting material cross section
    '''

    rAC25: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            AC resistance per unit length of the conductor at 25 �C.
            '''

        })
    '''
    AC resistance per unit length of the conductor at 25 �C.
    '''

    rAC50: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            AC resistance per unit length of the conductor at 50 �C.
            '''

        })
    '''
    AC resistance per unit length of the conductor at 50 �C.
    '''

    rAC75: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            AC resistance per unit length of the conductor at 75 �C.
            '''

        })
    '''
    AC resistance per unit length of the conductor at 75 �C.
    '''

    rDC20: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC resistance per unit length of the conductor at 20 �C.
            '''

        })
    '''
    DC resistance per unit length of the conductor at 20 �C.
    '''

    material: Optional[WireMaterialKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductor material.
            '''

        })
    '''
    Conductor material.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RigidBusbarInfo(ConductorInfo):
    '''
    Rigid busbar information.
    <u>Definition</u>
    [IEC 605-02-21]: A substation busbar which is made up with metallic tubes
    or bars and which is supported by insulator posts
    https://www.electropedia.org/iev/iev.nsf/display?openform&amp;ievref=605-02-21
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AngleBusbarInfo(RigidBusbarInfo):
    '''
    L-shape bar with both legs of uniform thickness and same width
    '''

    crossSectionWidth: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cross section width of the conductor
            '''

        })
    '''
    Cross section width of the conductor
    '''

    thickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Thickness of the angle bus bar
            '''

        })
    '''
    Thickness of the angle bus bar
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BarBusbarInfo(RigidBusbarInfo):
    '''
    One rectangular slab with uniform thickness and width
    '''

    crossSectionWidth: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cross section width of the conductor
            '''

        })
    '''
    Cross section width of the conductor
    '''

    thickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Thickness of bar busbar
            '''

        })
    '''
    Thickness of bar busbar
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntegralWebBusbarInfo(RigidBusbarInfo):
    '''
    I-beam type of conductor with the outer edges, turned into each other.
    '''

    crossSectionHeight: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cross section width of the conductor
            '''

        })
    '''
    Cross section width of the conductor
    '''

    crossSectionWidth: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cross section width of the conductor
            '''

        })
    '''
    Cross section width of the conductor
    '''

    thickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Thickness
            '''

        })
    '''
    Thickness
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TubeBusbarInfo(RigidBusbarInfo):
    '''
    Tube busbar information
    '''

    outerDiameter: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Outer diameter
            '''

        })
    '''
    Outer diameter
    '''

    wallThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Wall thickness
            '''

        })
    '''
    Wall thickness
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PipeBusbarInfo(TubeBusbarInfo):
    '''
    Pipe busbar information
    '''

    pipeType: Optional[PipeBusbarKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For cylindrical hollow rigid conductor only. Rigid cylindrical conductor
            comes in two types. Pipe Type cylindrical bus is based around schedule
            types such as Schedule 40 and schedule 80. The wall thickness is determined
            by the schedule number. Currently schedule 40 and schedule 80 are commonly
            used.
            '''

        })
    '''
    For cylindrical hollow rigid conductor only. Rigid cylindrical conductor
    comes in two types. Pipe Type cylindrical bus is based around schedule
    types such as Schedule 40 and schedule 80. The wall thickness is determined
    by the schedule number. Currently schedule 40 and schedule 80 are commonly
    used.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WireInfo(ConductorInfo):
    '''
    Wire data that can be specified per line segment phase, or for the line
    segment as a whole in case its phases all have the same wire characteristics.
    '''

    coreStrandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if used) Number of strands in the steel core.
            '''

        })
    '''
    (if used) Number of strands in the steel core.
    '''

    sizeDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Describes the wire gauge or cross section (e.g., 4/0, #2, 336.5).
            '''

        })
    '''
    Describes the wire gauge or cross section (e.g., 4/0, #2, 336.5).
    '''

    strandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of strands in the conductor.
            '''

        })
    '''
    Number of strands in the conductor.
    '''

    coreRadius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if there is a different core material) Radius of the central core.
            '''

        })
    '''
    (if there is a different core material) Radius of the central core.
    '''

    gmr: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Geometric mean radius. If we replace the conductor by a thin walled tube
            of radius GMR, then its reactance is identical to the reactance of the
            actual conductor.
            '''

        })
    '''
    Geometric mean radius. If we replace the conductor by a thin walled
    tube of radius GMR, then its reactance is identical to the reactance
    of the actual conductor.
    '''

    radius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Outside radius of the wire.
            '''

        })
    '''
    Outside radius of the wire.
    '''

    ACLineSegmentPhase: list[ACLineSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegmentPhase.WireInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WirePhaseInfo: list[WirePhaseInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePhaseInfo.WireInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Wire phase information associated with this wire information.
            '''

        })
    '''
    Wire phase information associated with this wire information.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class BareWireInfo(WireInfo):
    '''
    Bare wire data.
    '''

    wireConstructionKind: Optional[WireConstructionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of wire construction
            '''

        })
    '''
    Kind of wire construction
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class CableInfo(WireInfo):
    '''
    Cable data.
    '''

    isStrandFill: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if wire strands are extruded in a way to fill the voids in the cable.
            '''

        })
    '''
    True if wire strands are extruded in a way to fill the voids in the
    cable.
    '''

    sheathAsNeutral: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if sheath / shield is used as a neutral (i.e., bonded).
            '''

        })
    '''
    True if sheath / shield is used as a neutral (i.e., bonded).
    '''

    diameterOverCore: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Diameter over the core, including any semi-con screen; should be the insulating
            layer's inside diameter.
            '''

        })
    '''
    Diameter over the core, including any semi-con screen; should be the
    insulating layer's inside diameter.
    '''

    diameterOverInsulation: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Diameter over the insulating layer, excluding outer screen.
            '''

        })
    '''
    Diameter over the insulating layer, excluding outer screen.
    '''

    diameterOverJacket: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Diameter over the outermost jacketing layer.
            '''

        })
    '''
    Diameter over the outermost jacketing layer.
    '''

    diameterOverScreen: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Diameter over the outer screen; should be the shield's inside diameter.
            '''

        })
    '''
    Diameter over the outer screen; should be the shield's inside diameter.
    '''

    nominalTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum nominal design operating temperature.
            '''

        })
    '''
    Maximum nominal design operating temperature.
    '''

    constructionKind: Optional[CableConstructionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of construction of this cable.
            '''

        })
    '''
    Kind of construction of this cable.
    '''

    outerJacketKind: Optional[CableOuterJacketKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of outer jacket of this cable.
            '''

        })
    '''
    Kind of outer jacket of this cable.
    '''

    shieldMaterial: Optional[CableShieldMaterialKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Material of the shield.
            '''

        })
    '''
    Material of the shield.
    '''

    InsulationInfo: Optional[InsulationInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InsulationInfo.CableInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InsulationInfo: Optional[InsulationInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InsulationInfo.CableInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConcentricNeutralCableInfo(CableInfo):
    '''
    Concentric neutral cable data.
    '''

    neutralStrandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of concentric neutral strands.
            '''

        })
    '''
    Number of concentric neutral strands.
    '''

    diameterOverNeutral: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Diameter over the concentric neutral strands.
            '''

        })
    '''
    Diameter over the concentric neutral strands.
    '''

    neutralStrandGmr: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Geometric mean radius of the neutral strand.
            '''

        })
    '''
    Geometric mean radius of the neutral strand.
    '''

    neutralStrandRadius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Outside radius of the neutral strand.
            '''

        })
    '''
    Outside radius of the neutral strand.
    '''

    neutralStrandRDC20: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC resistance per unit length of the neutral strand at 20 �C.
            '''

        })
    '''
    DC resistance per unit length of the neutral strand at 20 �C.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MultiCoreCableInfo(CableInfo):
    '''
    Multi core cable information
    '''

    hasNeutral: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if neutral is included
            '''

        })
    '''
    True if neutral is included
    '''

    neutralSizeDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral wire size description
            '''

        })
    '''
    Neutral wire size description
    '''

    neutralStrandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral wire strand count
            '''

        })
    '''
    Neutral wire strand count
    '''

    phaseCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase count
            '''

        })
    '''
    Phase count
    '''

    neutralStrandRDC20: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Neutral strand DC resistance per unit length of the conductor at 20 &#176;C
            '''

        })
    '''
    Neutral strand DC resistance per unit length of the conductor at 20
    &#176;C
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapeShieldCableInfo(CableInfo):
    '''
    Tape shield cable data.
    '''

    tapeLap: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Percentage of the tape shield width that overlaps in each wrap, typically
            10% to 25%.
            '''

        })
    '''
    Percentage of the tape shield width that overlaps in each wrap, typically
    10% to 25%.
    '''

    tapeThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Thickness of the tape shield, before wrapping.
            '''

        })
    '''
    Thickness of the tape shield, before wrapping.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class OverheadWireInfo(WireInfo):
    '''
    Overhead wire data.
    '''

    wireConstructionKind: Optional[WireConstructionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute add',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GridEdgeDeviceInfo(ConductingAssetInfo):
    '''
    A Grid Edge Device is any device that is connected to the power grid with
    the ability to produce, store, and/or variably consume electricity. This
    include devices like local generation (solar photovoltaic and wind), storage
    (chemical or electrical batteries), flexible loads (heading, cooling, lighting
    systems), and electric vehicles (essentially a combination of storage and
    flexible load)
    '''

    apparentPowerMaximum: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Apparent power maximum rating</i>
            <i>
            </i>Maximum apparent power rating in voltamperes
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Apparent power maximum rating</i>
    <i>
    </i>Maximum apparent power rating in voltamperes
    '''

    ratedVoltageMax: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>AC voltage maximum rating</i>
            Maximum AC voltage rating in RMS volts
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>AC voltage maximum rating</i>
    Maximum AC voltage rating in RMS volts
    '''

    ratedVoltageMin: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>AC voltage minimum rating</i>
            Minimum AC voltage rating in RMS volts
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>AC voltage minimum rating</i>
    Minimum AC voltage rating in RMS volts
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InverterInfo(GridEdgeDeviceInfo):
    '''
    Inverter-based devices are a type of Grid Edge Device which convert DC
    sources (and/or sinks) into AC sources (and/or sinks) allowing for the
    power to be synchronized to the grid.
    '''

    operatingCategoryAbnormal: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Abnormal operating performance category</i>
            Indication of voltage and frequency ride-through capability
            Values = Category I, Category II, Category III
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Abnormal operating performance category</i>
    Indication of voltage and frequency ride-through capability
    Values = Category I, Category II, Category III
    '''

    operatingCategoryNormal: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Normal operating performance category</i>
            Indication of reactive power and voltage/power control capability.
            Values = Category A, Category B
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Normal operating performance category</i>
    Indication of reactive power and voltage/power control capability.
    Values = Category A, Category B
    '''

    powerFactorOverExcited: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Specified over-excited power factor</i>
            Over-excited power factor
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Specified over-excited power factor</i>
    Over-excited power factor
    '''

    powerFactorUnderExcited: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Specified under-excited power factor</i>
            Under-excited power factor
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Specified under-excited power factor</i>
    Under-excited power factor
    '''

    activePowerRatingOverExcited: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Active power rating at specified over-excited power factor</i>
            Active power rating in watts at specified over-excited power factor
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Active power rating at specified over-excited power factor</i>
    Active power rating in watts at specified over-excited power factor
    '''

    activePowerRatingUnderExcited: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Active power rating at specified under-excited power factor</i>
            Active power rating in watts at specified under-excited power factor
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Active power rating at specified under-excited power factor</i>
    Active power rating in watts at specified under-excited power factor
    '''

    activePowerRatingUnityPowerFactor: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Active power rating at unity power factor (nameplate active power rating)</i>
            Active power rating in watts at unity power factor
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Active power rating at unity power factor (nameplate active power
    rating)</i>
    Active power rating in watts at unity power factor
    '''

    reactivePowerAbsorbedMax: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Reactive power absorbed maximum rating</i>
            Maximum absorbed reactive power rating in vars
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Reactive power absorbed maximum rating</i>
    Maximum absorbed reactive power rating in vars
    '''

    reactivePowerInjectedMax: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Reactive power injected maximum rating</i>
            Maximum injected reactive power rating in vars
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Reactive power injected maximum rating</i>
    Maximum injected reactive power rating in vars
    '''

    susceptanceOffline: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Reactive susceptance that remains connected to the Area EPS in the cease
            to energize and trip state</i>
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Reactive susceptance that remains connected to the Area EPS in the
    cease to energize and trip state</i>
    '''

    InverterCapabilites: Optional[InverterCapabilities] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InverterCapabilities.IntervalInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenerationInverterInfo(InverterInfo):
    '''
    A Generation Inverter is an inverter backed by a source that is capable
    of generating electricity from an external source such as solar radiation,
    wind, or other fuels.
    '''

    generationCategory: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of Distribution Generation.
            Examples include:
            <ul>
            <li>Photovoltaic (PV)</li>
            <li>Combined Heat Power (CHP)</li>
            <li>Fuel Cells</li>
            <li>Small Wind Power</li>
            </ul>
            '''

        })
    '''
    Type of Distribution Generation.
    Examples include:
    <ul>
    <li>Photovoltaic (PV)</li>
    <li>Combined Heat Power (CHP)</li>
    <li>Fuel Cells</li>
    <li>Small Wind Power</li>
    </ul>
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StorageInverterInfo(InverterInfo):
    '''
    A Storage Inverter is an inverter backed by a device that is capable of
    storing and later discharging electric energy.
    '''

    storageCategory: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of Distribution Storage.
            Examples include:
            <ul>
            <li>Lead�Acid Battery</li>
            <li>Nickel�Cadmium (NiCd) Battery</li>
            <li>Nickel�Metal Hydride (NiMH) Battery</li>
            <li>Lithium-Ion Battery</li>
            <li>Lithium-Ion Polymer (LiPo) Battery</li>
            <li>Aluminum-Sulfur Battery</li>
            <li>Flow Battery</li>
            <li>Mechanical Flywheel</li>
            <li>Mechanical Gravitational</li>
            </ul>
            '''

        })
    '''
    Type of Distribution Storage.
    Examples include:
    <ul>
    <li>Lead�Acid Battery</li>
    <li>Nickel�Cadmium (NiCd) Battery</li>
    <li>Nickel�Metal Hydride (NiMH) Battery</li>
    <li>Lithium-Ion Battery</li>
    <li>Lithium-Ion Polymer (LiPo) Battery</li>
    <li>Aluminum-Sulfur Battery</li>
    <li>Flow Battery</li>
    <li>Mechanical Flywheel</li>
    <li>Mechanical Gravitational</li>
    </ul>
    '''

    chargeRateActiveMax: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Active power charge maximum rating</i>
            Maximum active power charge rating in watts
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Active power charge maximum rating</i>
    Maximum active power charge rating in watts
    '''

    chargeRateReactiveMax: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Based on IEEE 1547-2018 Table 28:
            <i>Apparent power charge maximum rating</i>
            Maximum apparent power charge rating in voltamperes. May differ from the
            apparent power maximum rating
            '''

        })
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Apparent power charge maximum rating</i>
    Maximum apparent power charge rating in voltamperes. May differ from
    the apparent power maximum rating
    '''

    storageCapacity: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchInfo(ConductingAssetInfo):
    '''
    Switch datasheet information.
    '''

    isSinglePhase: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, it is a single phase switch.
            '''

        })
    '''
    If true, it is a single phase switch.
    '''

    isUnganged: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, the switch is not ganged (i.e., a switch phase may be operated
            separately from other phases).
            '''

        })
    '''
    If true, the switch is not ganged (i.e., a switch phase may be operated
    separately from other phases).
    '''

    breakingCapacity: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum fault current a breaking device can break safely under prescribed
            conditions of use.
            '''

        })
    '''
    The maximum fault current a breaking device can break safely under
    prescribed conditions of use.
    '''

    gasWeightPerTank: Optional[ float | Mass ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Weight of gas in each tank of SF6 dead tank breaker.
            '''

        })
    '''
    Weight of gas in each tank of SF6 dead tank breaker.
    '''

    lowPressureAlarm: Optional[ float | Pressure ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Gas or air pressure at or below which a low pressure alarm is generated.
            '''

        })
    '''
    Gas or air pressure at or below which a low pressure alarm is generated.
    '''

    lowPressureLockOut: Optional[ float | Pressure ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Gas or air pressure below which the breaker will not open.
            '''

        })
    '''
    Gas or air pressure below which the breaker will not open.
    '''

    oilVolumePerTank: Optional[ float | Volume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Volume of oil in each tank of bulk oil breaker.
            '''

        })
    '''
    Volume of oil in each tank of bulk oil breaker.
    '''

    ratedFrequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Frequency for which switch is rated.
            '''

        })
    '''
    Frequency for which switch is rated.
    '''

    ratedImpulseWithstandVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated impulse withstand voltage, also known as BIL (Basic Impulse Level).
            '''

        })
    '''
    Rated impulse withstand voltage, also known as BIL (Basic Impulse Level).
    '''

    ratedInterruptingTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Switch rated interrupting time in seconds.
            '''

        })
    '''
    Switch rated interrupting time in seconds.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerInfo(ConductingAssetInfo):
    '''
    Tap changer data.
    '''

    ctRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Built-in current transducer ratio.
            '''

        })
    '''
    Built-in current transducer ratio.
    '''

    highStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Highest possible tap step position, advance from neutral.
            '''

        })
    '''
    Highest possible tap step position, advance from neutral.
    '''

    isTcul: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Whether this tap changer has under load tap changing capabilities.
            '''

        })
    '''
    Whether this tap changer has under load tap changing capabilities.
    '''

    lowStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Lowest possible tap step position, retard from neutral.
            '''

        })
    '''
    Lowest possible tap step position, retard from neutral.
    '''

    neutralStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The neutral tap step position for the winding.
            '''

        })
    '''
    The neutral tap step position for the winding.
    '''

    ptRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Built-in voltage transducer ratio.
            '''

        })
    '''
    Built-in voltage transducer ratio.
    '''

    bil: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Basic Insulation Level (BIL) expressed as the impulse crest voltage of
            a nominal wave, typically 1.2 X 50 microsecond. This is a measure of the
            ability of the insulation to withstand very high voltage surges.
            '''

        })
    '''
    Basic Insulation Level (BIL) expressed as the impulse crest voltage
    of a nominal wave, typically 1.2 X 50 microsecond. This is a measure
    of the ability of the insulation to withstand very high voltage surges.
    '''

    ctRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Built-in current transformer primary rating.
            '''

        })
    '''
    Built-in current transformer primary rating.
    '''

    frequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Frequency at which the ratings apply.
            '''

        })
    '''
    Frequency at which the ratings apply.
    '''

    neutralU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage at which the winding operates at the neutral tap setting.
            '''

        })
    '''
    Voltage at which the winding operates at the neutral tap setting.
    '''

    ratedApparentPower: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated apparent power.
            '''

        })
    '''
    Rated apparent power.
    '''

    stepPhaseIncrement: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase shift per step position.
            '''

        })
    '''
    Phase shift per step position.
    '''

    stepReactiveIncrement: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step increment, in per cent of rated Mvar, per step position.
            '''

        })
    '''
    Tap step increment, in per cent of rated Mvar, per step position.
    '''

    stepVoltageIncrement: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step increment, in per cent of rated voltage, per step position.
            '''

        })
    '''
    Tap step increment, in per cent of rated voltage, per step position.
    '''

    ShuntReactorInfo: list[ShuntReactorInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShuntReactorInfo.TapChangerInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerEndInfo(ConductingAssetInfo):
    '''
    Transformer end data.
    '''

    endNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number for this transformer end, corresponding to the end's order in the
            PowerTransformer.vectorGroup attribute. Highest voltage winding should
            be 1.
            '''

        })
    '''
    Number for this transformer end, corresponding to the end's order in
    the PowerTransformer.vectorGroup attribute. Highest voltage winding
    should be 1.
    '''

    phaseAngleClock: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Winding phase angle where 360 degrees are represented with clock hours,
            so the valid values are {0, ..., 11}. For example, to express the second
            winding in code 'Dyn11', set attributes as follows: 'endNumber'=2, 'connectionKind'
            = Yn and 'phaseAngleClock' = 11.
            '''

        })
    '''
    Winding phase angle where 360 degrees are represented with clock hours,
    so the valid values are {0, ..., 11}. For example, to express the second
    winding in code 'Dyn11', set attributes as follows: 'endNumber'=2,
    'connectionKind' = Yn and 'phaseAngleClock' = 11.
    '''

    emergencyS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Apparent power that the winding can carry under emergency conditions (also
            called long-term emergency power).
            '''

        })
    '''
    Apparent power that the winding can carry under emergency conditions
    (also called long-term emergency power).
    '''

    insulationU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Basic insulation level voltage rating.
            '''

        })
    '''
    Basic insulation level voltage rating.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC resistance.
            '''

        })
    '''
    DC resistance.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal apparent power rating.
            '''

        })
    '''
    Normal apparent power rating.
    '''

    shortTermS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Apparent power that this winding can carry for a short period of time (in
            emergency).
            '''

        })
    '''
    Apparent power that this winding can carry for a short period of time
    (in emergency).
    '''

    connectionKind: Optional[WindingConnection] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of connection.
            '''

        })
    '''
    Kind of connection.
    '''

    CoreAdmittance: Optional[TransformerCoreAdmittance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerCoreAdmittance.TransformerEndInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Core admittance calculated from this transformer end datasheet, representing
            magnetising current and core losses. The full values of the transformer
            should be supplied for one transformer end info only.
            '''

        })
    '''
    Core admittance calculated from this transformer end datasheet, representing
    magnetising current and core losses. The full values of the transformer
    should be supplied for one transformer end info only.
    '''

    TransformerStarImpedance: Optional[TransformerStarImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerStarImpedance.TransformerEndInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer star impedance calculated from this transformer end datasheet.
            '''

        })
    '''
    Transformer star impedance calculated from this transformer end datasheet.
    '''

    TransformerTankInfo: Optional[TransformerTankInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerTankInfo.TransformerEndInfos',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer tank data that this end description is part of.
            '''

        })
    '''
    Transformer tank data that this end description is part of.
    '''

    EnergisedEndNoLoadTests: list[NoLoadTest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NoLoadTest.EnergisedEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All no-load test measurements in which this transformer end was energised.
            '''

        })
    '''
    All no-load test measurements in which this transformer end was energised.
    '''

    EnergisedEndOpenCircuitTests: list[OpenCircuitTest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OpenCircuitTest.EnergisedEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All open-circuit test measurements in which this transformer end was excited.
            '''

        })
    '''
    All open-circuit test measurements in which this transformer end was
    excited.
    '''

    OpenEndOpenCircuitTests: list[OpenCircuitTest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OpenCircuitTest.OpenEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All open-circuit test measurements in which this transformer end was not
            excited.
            '''

        })
    '''
    All open-circuit test measurements in which this transformer end was
    not excited.
    '''

    EnergisedEndShortCircuitTests: list[ShortCircuitTest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShortCircuitTest.EnergisedEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All short-circuit test measurements in which this transformer end was energised.
            '''

        })
    '''
    All short-circuit test measurements in which this transformer end was
    energised.
    '''

    GroundedEndShortCircuitTests: list[ShortCircuitTest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShortCircuitTest.GroundedEnds',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All short-circuit test measurements in which this transformer end was short-circuited.
            '''

        })
    '''
    All short-circuit test measurements in which this transformer end was
    short-circuited.
    '''

    CoreAdmittance: Optional[TransformerCoreAdmittance] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerCoreAdmittance.TransformerEndInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Core admittance calculated from this transformer end datasheet, representing
            magnetising current and core losses. The full values of the transformer
            should be supplied for one transformer end info only.
            '''

        })
    '''
    Core admittance calculated from this transformer end datasheet, representing
    magnetising current and core losses. The full values of the transformer
    should be supplied for one transformer end info only.
    '''

    FromMeshImpedances: list[TransformerMeshImpedance] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerMeshImpedance.FromTransformerEndInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All mesh impedances between this 'to' and other 'from' transformer ends.
            '''

        })
    '''
    All mesh impedances between this 'to' and other 'from' transformer
    ends.
    '''

    TransformerStarImpedance: Optional[TransformerStarImpedance] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerStarImpedance.TransformerEndInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Transformer star impedance calculated from this transformer end datasheet.
            '''

        })
    '''
    Transformer star impedance calculated from this transformer end datasheet.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CoolingInfo(AssetInfo):
    '''
    Cooling information
    '''

    typeOfCooling: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of cooling.
            '''

        })
    '''
    Type of cooling.
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.CoolingInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CrossarmInfo(AssetInfo):
    '''
    Cross arm information
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DamperInfo(AssetInfo):
    '''
    Damper asset information
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InsulationInfo(AssetInfo):
    '''
    Wire data that can be specified per line segment phase, or for the line
    segment as a whole in case its phases all have the same wire characteristics.
    '''

    insulated: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if conductor is insulated.
            '''

        })
    '''
    True if conductor is insulated.
    '''

    insulationThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if insulated conductor) Thickness of the insulation.
            '''

        })
    '''
    (if insulated conductor) Thickness of the insulation.
    '''

    insulationMaterial: Optional[WireInsulationKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if insulated conductor) Material used for insulation.
            '''

        })
    '''
    (if insulated conductor) Material used for insulation.
    '''

    CableInfo: Optional[CableInfo] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CableInfo.InsulationInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CableInfo: Optional[CableInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CableInfo.InsulationInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InsulatorInfo(AssetInfo):
    '''
    Insulator information
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterrupterUnitInfo(AssetInfo):
    '''
    Interrupter datasheet information.
    '''

    interruptingMedium: Optional[InterruptingMediumKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Interrupting medium.
            '''

        })
    '''
    Interrupting medium.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperatingMechanismInfo(AssetInfo):
    '''
    Breaker operating mechanism datasheet information.
    '''

    closeAmps: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Close current (nominal).
            '''

        })
    '''
    Close current (nominal).
    '''

    closeVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Close voltage in volts DC.
            '''

        })
    '''
    Close voltage in volts DC.
    '''

    motorRunCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated motor run current in amps.
            '''

        })
    '''
    Rated motor run current in amps.
    '''

    motorStartCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated motor start current in amps.
            '''

        })
    '''
    Rated motor start current in amps.
    '''

    motorVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nominal motor voltage in volts DC.
            '''

        })
    '''
    Nominal motor voltage in volts DC.
    '''

    tripAmps: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Trip current (nominal).
            '''

        })
    '''
    Trip current (nominal).
    '''

    tripVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Trip voltage in volts DC.
            '''

        })
    '''
    Trip voltage in volts DC.
    '''

    mechanismKind: Optional[OperatingMechanismKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of breaker operating mechanism.
            '''

        })
    '''
    Kind of breaker operating mechanism.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PoleAssetInfo(AssetInfo):
    '''
    Pole asset data sheet.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerTransformerInfo(AssetInfo):
    '''
    Set of power transformer data, from an equipment library.
    '''

    TransformerTankInfos: list[TransformerTankInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerTankInfo.PowerTransformerInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Data for all the tanks described by this power transformer data.
            '''

        })
    '''
    Data for all the tanks described by this power transformer data.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorInfo(AssetInfo):
    '''
    Properties of shunt capacitor, shunt reactor or switchable bank of shunt
    capacitor or reactor assets.
    '''

    maxPowerLoss: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed apparent power loss.
            '''

        })
    '''
    Maximum allowed apparent power loss.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedReactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated reactive power.
            '''

        })
    '''
    Rated reactive power.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    ShuntCompensatorControl: Optional[ShuntCompensatorControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorControl.ShuntCompensatorInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SoundInfo(AssetInfo):
    '''
    Sound information
    '''

    minSoundPressureLevel: Optional[ float | Pressure ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum sound pressure level.
            '''

        })
    '''
    Minimum sound pressure level.
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.SoundInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StructureInfo(AssetInfo):
    '''
    Structure information
    '''

    hasTemperatureMeasurement: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if structure includes a temperature measurement.
            '''

        })
    '''
    True if structure includes a temperature measurement.
    '''

    hasVentilation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if vault is ventilating.
            '''

        })
    '''
    True if vault is ventilating.
    '''

    material: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Material this structure is made of.
            '''

        })
    '''
    Material this structure is made of.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum rated voltage of the equipment that can be mounted on/contained
            within the structure.
            '''

        })
    '''
    Maximum rated voltage of the equipment that can be mounted on/contained
    within the structure.
    '''

    materialKind: Optional[StructureMaterialKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Material this structure is made of.
            '''

        })
    '''
    Material this structure is made of.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarineStructureInfo(StructureInfo):
    '''
    Marine structure information.
    '''

    kind: Optional[MarineStructureKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of submarine structure.
            '''

        })
    '''
    Type of submarine structure.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverheadStructureInfo(StructureInfo):
    '''
    Overhead structure information
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UndergroundStructureInfo(StructureInfo):
    '''
    Underground structure information
    '''

    kind: Optional[UndergroundStructureKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of underground structure
            '''

        })
    '''
    Kind of underground structure
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SurfaceTreatmentInfo(AssetInfo):
    '''
    Surface treatment information
    '''

    galvanizationThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Galvanization thickness.
            '''

        })
    '''
    Galvanization thickness.
    '''

    paintThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Paint thickness.
            '''

        })
    '''
    Paint thickness.
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.SurfaceTreatmentInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ToolInfo(AssetInfo):
    '''
    Type of tool needed to perform a certain type of work.
    '''

    toolType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of the tool
            '''

        })
    '''
    Type of the tool
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerTankInfo(AssetInfo):
    '''
    Set of transformer tank data, from an equipment library.
    '''

    PowerTransformerInfo: Optional[PowerTransformerInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerTransformerInfo.TransformerTankInfos',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power transformer data that this tank description is part of.
            '''

        })
    '''
    Power transformer data that this tank description is part of.
    '''

    TransformerEndInfos: list[TransformerEndInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEndInfo.TransformerTankInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Data for all the ends described by this transformer tank data.
            '''

        })
    '''
    Data for all the ends described by this transformer tank data.
    '''

    TransformerTanks: list[TransformerTank] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerTank.TransformerTankInfo',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VehicleInfo(AssetInfo):
    '''
    Type of vehicle needed to perform certain type of work.
    '''

    vehicleType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of vehicle.
            '''

        })
    '''
    Type of vehicle.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WireAssemblyInfo(AssetInfo):
    '''
    Describes the construction of a multi-conductor wire.<-NOTE: period missing.
    '''

    PerLengthLineParameter: list[PerLengthLineParameter] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PerLengthLineParameter.WireAssemblyInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Per length line parameter associated with this wire assembly.
            '''

        })
    '''
    Per length line parameter associated with this wire assembly.
    '''

    WirePhaseInfo: list[WirePhaseInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePhaseInfo.WireAssemblyInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Wire phase information associated with this wire assembly.
            '''

        })
    '''
    Wire phase information associated with this wire assembly.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class WireSpacingInfo(AssetInfo):
    '''
    Wire spacing data that associates multiple wire positions with the line
    segment, and allows to calculate line segment impedances. Number of phases
    can be derived from the number of associated wire positions whose phase
    is not neutral.
    '''

    isCable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, this spacing data describes a cable.
            '''

        })
    '''
    If true, this spacing data describes a cable.
    '''

    phaseWireCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'modify Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of wire sub-conductors in the symmetrical bundle (typically between
            1 and 4).
            '''

        })
    '''
    Number of wire sub-conductors in the symmetrical bundle (typically
    between 1 and 4).
    '''

    phaseWireSpacing: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'modify Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance between wire sub-conductors in a symmetrical bundle.
            '''

        })
    '''
    Distance between wire sub-conductors in a symmetrical bundle.
    '''

    usage: Optional[WireUsageKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Usage of the associated wires.
            '''

        })
    '''
    Usage of the associated wires.
    '''

    DuctBank: Optional[DuctBank] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DuctBank.WireSpacingInfos',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ACLineSegment: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.WireSpacingInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WirePositions: list[WirePosition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePosition.WireSpacingInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All positions of single wires (phase or neutral) making the conductor.
            '''

        })
    '''
    All positions of single wires (phase or neutral) making the conductor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetInfoComponent(IdentifiedObject):
    '''
    Components of an asset info
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of component
            '''

        })
    '''
    Type of component
    '''

    ChildAssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ParentAssetInfoComponent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ParentAssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ChildAssetInfoComponent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ParentAssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ChildAssetInfoComponent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChildAssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ParentAssetInfoComponent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetRequirement(IdentifiedObject):
    '''
    This is an asset requirement information defined by designed (product procurer).
    It is related to AssetInfo.
    '''

    AssetInfo: list[AssetInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetInfo.AssetRequirement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AsynchronousMachineDynamics(IdentifiedObject):
    '''
    Asynchronous machine whose behaviour is described by reference to a standard
    model expressed in either time constant reactance form or equivalent circuit
    form <font color="#0f0f0f">or by definition of a user-defined model.</font>
    Parameter details:
    <ol>
    <li>Asynchronous machine parameters such as <i>Xl, Xs,</i> etc. are actually
    used as inductances in the model, but are commonly referred to as reactances
    since, at nominal frequency, the PU values are the same. However, some
    references use the symbol <i>L</i> instead of <i>X</i>.</li>
    </ol>
    '''

    AsynchronousMachine: Optional[AsynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachine.AsynchronousMachineDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine to which this asynchronous machine dynamics model
            applies.
            '''

        })
    '''
    Asynchronous machine to which this asynchronous machine dynamics model
    applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AsynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AutonomousFunction(IdentifiedObject):
    '''
    Autonomous function performed by an autonomous agent or other devices that
    can before decision making in an autonomous way. Example are robot or a
    bot program.
    '''

    AutonomousAgent: Optional[AutonomousAgent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AutonomousAgent.AutonomousFunction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BaseFrequency(IdentifiedObject):
    '''
    The BaseFrequency class describes a base frequency for a power system network.
    In case of multiple power networks with different frequencies, e.g. 50
    Hz or 60 Hz each network will have its own base frequency class. Hence
    it is assumed that power system objects having different base frequencies
    appear in separate documents where each document has a single base frequency
    instance.
    '''

    frequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The base frequency.
            '''

        })
    '''
    The base frequency.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BasePower(IdentifiedObject):
    '''
    The BasePower class defines the base power used in the per unit calculations.
    '''

    basePower: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value used as base power.
            '''

        })
    '''
    Value used as base power.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BaseVoltage(IdentifiedObject):
    '''
    Defines a system base voltage which is referenced. This may be different
    than the rated voltage.
    '''

    nominalVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power system resource's base voltage, expressed on a phase-to-phase
            (line-to-line) basis. Shall be a positive value and not zero.
            '''

        })
    '''
    The power system resource's base voltage, expressed on a phase-to-phase
    (line-to-line) basis. Shall be a positive value and not zero.
    '''

    ConductingEquipment: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.BaseVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All conducting equipment with this base voltage. Use only when there is
            no voltage level container used and only one base voltage applies. For
            example, not used for transformers.
            '''

        })
    '''
    All conducting equipment with this base voltage. Use only when there
    is no voltage level container used and only one base voltage applies.
    For example, not used for transformers.
    '''

    TopologicalNode: list[TopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TopologicalNode.BaseVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The topological nodes at the base voltage.
            '''

        })
    '''
    The topological nodes at the base voltage.
    '''

    TransformerEnds: list[TransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEnd.BaseVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Transformer ends at the base voltage. This is essential for PU calculation.
            '''

        })
    '''
    Transformer ends at the base voltage. This is essential for PU calculation.
    '''

    VoltageLevel: list[VoltageLevel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VoltageLevel.BaseVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The voltage levels having this base voltage.
            '''

        })
    '''
    The voltage levels having this base voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BasicIntervalSchedule(IdentifiedObject):
    '''
    Schedule of values at points in time.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time for the first time point. The value can be a time of day, not
            a specific date.
            '''

        })
    '''
    The time for the first time point. The value can be a time of day,
    not a specific date.
    '''

    value1Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description for value1.
            '''

        })
    '''
    Description for value1.
    '''

    value2Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description for value2.
            '''

        })
    '''
    Description for value2.
    '''

    value3Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description for value3.
            '''

        })
    '''
    Description for value3.
    '''

    value1Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for value1.
            '''

        })
    '''
    Multiplier for value1.
    '''

    value1Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value1 units of measure.
            '''

        })
    '''
    Value1 units of measure.
    '''

    value2Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for value2.
            '''

        })
    '''
    Multiplier for value2.
    '''

    value2Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value2 units of measure.
            '''

        })
    '''
    Value2 units of measure.
    '''

    value3Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for value3.
            '''

        })
    '''
    Multiplier for value3.
    '''

    value3Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value3 units of measure.
            '''

        })
    '''
    Value3 units of measure.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class IrregularIntervalSchedule(BasicIntervalSchedule):
    '''
    The schedule has time points where the time between them varies.
    '''

    TimePoints: list[IrregularTimePoint] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IrregularTimePoint.IntervalSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The point data values that define a curve.
            '''

        })
    '''
    The point data values that define a curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class RegularIntervalSchedule(BasicIntervalSchedule):
    '''
    The schedule has time points where the time between them is constant.
    '''

    endTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time for the last time point. The value can be a time of day, not a
            specific date.
            '''

        })
    '''
    The time for the last time point. The value can be a time of day, not
    a specific date.
    '''

    timeStep: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time between each pair of subsequent regular time points in sequence
            order.
            '''

        })
    '''
    The time between each pair of subsequent regular time points in sequence
    order.
    '''

    TimePoints: list[RegularTimePoint] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegularTimePoint.IntervalSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The regular interval time point data values that define this schedule.
            '''

        })
    '''
    The regular interval time point data values that define this schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class GenUnitOpSchedule(RegularIntervalSchedule):
    '''
    The generating unit's Operator-approved current operating schedule (or
    plan), typically produced with the aid of unit commitment type analyses.
    The X-axis represents absolute time. The Y1-axis represents the status
    (0=off-line and unavailable: 1=available: 2=must run: 3=must run at fixed
    power value: etc.). The Y2-axis represents the must run fixed power value
    where required.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GenUnitOpSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A generating unit may have an operating schedule, indicating the planned
            operation of the unit.
            '''

        })
    '''
    A generating unit may have an operating schedule, indicating the planned
    operation of the unit.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GenUnitOpSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A generating unit may have an operating schedule, indicating the planned
            operation of the unit.
            '''

        })
    '''
    A generating unit may have an operating schedule, indicating the planned
    operation of the unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class HydroPumpOpSchedule(RegularIntervalSchedule):
    '''
    The hydro pump's Operator-approved current operating schedule (or plan),
    typically produced with the aid of unit commitment type analyses. The unit's
    operating schedule status is typically given as: (0=unavailable) (1=available
    to startup or shutdown) (2=must pump).
    '''

    HydroPump: Optional[HydroPump] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPump.HydroPumpOpSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro pump has a pumping schedule over time, indicating when pumping
            is to occur.
            '''

        })
    '''
    The hydro pump has a pumping schedule over time, indicating when pumping
    is to occur.
    '''

    HydroPump: Optional[HydroPump] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPump.HydroPumpOpSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The hydro pump has a pumping schedule over time, indicating when pumping
            is to occur.
            '''

        })
    '''
    The hydro pump has a pumping schedule over time, indicating when pumping
    is to occur.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InflowForecast(RegularIntervalSchedule):
    '''
    Natural water inflow to a reservoir, usually forecasted from predicted
    rain and snowmelt. Typically in one hour increments for up to 10 days.
    The forecast is given in average cubic meters per second over the time
    increment.
    '''

    Reservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.InflowForecasts',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reservoir may have a "natural" inflow forecast.
            '''

        })
    '''
    A reservoir may have a "natural" inflow forecast.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SeasonDayTypeSchedule(RegularIntervalSchedule):
    '''
    A time schedule covering a 24 hour period, with curve data for a specific
    type of season and day.
    '''

    DayType: Optional[DayType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DayType.SeasonDayTypeSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DayType for the Schedule.
            '''

        })
    '''
    DayType for the Schedule.
    '''

    Season: Optional[Season] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Season.SeasonDayTypeSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Season for the Schedule.
            '''

        })
    '''
    Season for the Schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConformLoadSchedule(SeasonDayTypeSchedule):
    '''
    A curve of load versus time (X-axis) showing the active power values (Y1-axis)
    and reactive power (Y2-axis) for each unit of the period covered. This
    curve represents a typical pattern of load over the time period for a given
    day type and season.
    '''

    ConformLoadGroup: Optional[ConformLoadGroup] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConformLoadGroup.ConformLoadSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The ConformLoadGroup where the ConformLoadSchedule belongs.
            '''

        })
    '''
    The ConformLoadGroup where the ConformLoadSchedule belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NonConformLoadSchedule(SeasonDayTypeSchedule):
    '''
    An active power (Y1-axis) and reactive power (Y2-axis) schedule (curves)
    versus time (X-axis) for non-conforming loads, e.g., large industrial load
    or power station service (where modelled).
    '''

    NonConformLoadGroup: Optional[NonConformLoadGroup] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NonConformLoadGroup.NonConformLoadSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The NonConformLoadGroup where the NonConformLoadSchedule belongs.
            '''

        })
    '''
    The NonConformLoadGroup where the NonConformLoadSchedule belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegulationSchedule(SeasonDayTypeSchedule):
    '''
    A pre-established pattern over time for a controlled variable, e.g., busbar
    voltage.
    '''

    RegulatingControl: Optional[RegulatingControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulatingControl.RegulationSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Regulating controls that have this schedule.
            '''

        })
    '''
    Regulating controls that have this schedule.
    '''

    VoltageControlZones: list[VoltageControlZone] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VoltageControlZone.RegulationSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A VoltageControlZone may have a voltage regulation schedule.
            '''

        })
    '''
    A VoltageControlZone may have a voltage regulation schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchSchedule(SeasonDayTypeSchedule):
    '''
    A schedule of switch positions. If RegularTimePoint.value1 is 0, the switch
    is open. If 1, the switch is closed.
    '''

    Switch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A SwitchSchedule is associated with a Switch.
            '''

        })
    '''
    A SwitchSchedule is associated with a Switch.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapSchedule(SeasonDayTypeSchedule):
    '''
    A pre-established pattern over time for a tap step.
    '''

    TapChanger: Optional[TapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChanger.TapSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A TapSchedule is associated with a TapChanger.
            '''

        })
    '''
    A TapSchedule is associated with a TapChanger.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class SteamSendoutSchedule(RegularIntervalSchedule):
    '''
    The cogeneration plant's steam sendout schedule in volume per time unit.
    '''

    CogenerationPlant: Optional[CogenerationPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CogenerationPlant.SteamSendoutSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A cogeneration plant has a steam sendout schedule.
            '''

        })
    '''
    A cogeneration plant has a steam sendout schedule.
    '''

    CogenerationPlant: Optional[CogenerationPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CogenerationPlant.SteamSendoutSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A cogeneration plant has a steam sendout schedule.
            '''

        })
    '''
    A cogeneration plant has a steam sendout schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class BranchGroup(IdentifiedObject):
    '''
    A group of branch terminals whose directed flow summation is to be monitored.
    A branch group need not form a cutset of the network.
    '''

    monitorActivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Monitor the active power flow.
            '''

        })
    '''
    Monitor the active power flow.
    '''

    monitorReactivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Monitor the reactive power flow.
            '''

        })
    '''
    Monitor the reactive power flow.
    '''

    maximumActivePower: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum active power flow.
            '''

        })
    '''
    The maximum active power flow.
    '''

    maximumReactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum reactive power flow.
            '''

        })
    '''
    The maximum reactive power flow.
    '''

    minimumActivePower: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum active power flow.
            '''

        })
    '''
    The minimum active power flow.
    '''

    minimumReactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum reactive power flow.
            '''

        })
    '''
    The minimum reactive power flow.
    '''

    BranchGroupTerminal: list[BranchGroupTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BranchGroupTerminal.BranchGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The directed branch group terminals to be summed.
            '''

        })
    '''
    The directed branch group terminals to be summed.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class Building(IdentifiedObject):
    '''
    A representation of the spatial structural characteristics of any built
    or constructed asset, including buildings, infrastructure, and other engineered
    structures (e.g., roads, fences, bridges).
    '''

    buildingNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Building number refers to a unique numeric or alphanumeric identifier assigned
            to a building within a property or site, primarily for administrative,
            legal, or logistical purposes, which may differ from the building�s commonly
            known name or descriptive label.
            '''

        })
    '''
    Building number refers to a unique numeric or alphanumeric identifier
    assigned to a building within a property or site, primarily for administrative,
    legal, or logistical purposes, which may differ from the building�s
    commonly known name or descriptive label.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Building',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PhysicalAddress: Optional[PhysicalAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhysicalAddress.Building',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.Building',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BuildingSpace: list[BuildingSpace] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BuildingSpace.Building',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PhysicalAddress: Optional[PhysicalAddress] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhysicalAddress.Building',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BuildingSpace(IdentifiedObject):
    '''
    A defined, delimited area or volume within or around any built or constructed
    asset, including enclosed spaces such as: 1) rooms in a building, 2) open
    linear spaces such as areas along a fence, or segments of a road, or 3)
    zones within infrastructure structures.
    '''

    floor: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Floor is referring to the vertical position or designation of the space
            within a building, indicating its relationship to other levels, typically
            represented by a numeric or descriptive value (e.g., "Ground Floor," "1st
            Floor," "Basement")
            '''

        })
    '''
    Floor is referring to the vertical position or designation of the space
    within a building, indicating its relationship to other levels, typically
    represented by a numeric or descriptive value (e.g., "Ground Floor,"
    "1st Floor," "Basement")
    '''

    spaceNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Space Number refers to the floor or building numerical identifier assigned
            to a specific space within a building, typically represented by a alphanumeric
            code, used to distinguish the space from others on the same or different
            floors, e.g Room 101, Office A12 or 2-203 (Floor 2, Space 203).
            '''

        })
    '''
    Space Number refers to the floor or building numerical identifier assigned
    to a specific space within a building, typically represented by a alphanumeric
    code, used to distinguish the space from others on the same or different
    floors, e.g Room 101, Office A12 or 2-203 (Floor 2, Space 203).
    '''

    spaceType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Space type is the classification of the space, e.g. Residential, Commercial,
            Industrial, Storage etc.
            '''

        })
    '''
    Space type is the classification of the space, e.g. Residential, Commercial,
    Industrial, Storage etc.
    '''

    Building: Optional[Building] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Building.BuildingSpace',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocationAccess: Optional[LocationAccess] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LocationAccess.BuildingSpace',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocationAccess: Optional[LocationAccess] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LocationAccess.BuildingSpace',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusNameMarker(IdentifiedObject):
    '''
    Used to apply user standard names to TopologicalNodes. Associated with
    one or more terminals that are normally connected with the bus name. The
    associated terminals are normally connected by non-retained switches. For
    a ring bus station configuration, all BusbarSection terminals in the ring
    are typically associated. For a breaker and a half scheme, both BusbarSections
    would normally be associated. For a ring bus, all BusbarSections would
    normally be associated. For a "straight" busbar configuration, normally
    only the main terminal at the BusbarSection would be associated.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority of bus name marker for use as topology bus name. Use 0 for do
            not care. Use 1 for highest priority. Use 2 as priority is less than 1
            and so on.
            '''

        })
    '''
    Priority of bus name marker for use as topology bus name. Use 0 for
    do not care. Use 1 for highest priority. Use 2 as priority is less
    than 1 and so on.
    '''

    ReportingGroup: Optional[ReportingGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReportingGroup.BusNameMarker',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reporting group to which this bus name marker belongs.
            '''

        })
    '''
    The reporting group to which this bus name marker belongs.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.BusNameMarker',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A user defined topological node that was originally defined in a planning
            model not yet having topology described by ConnectivityNodes. Once ConnectivityNodes
            have been created they may be linked to user defined ToplogicalNodes using
            BusNameMarkers.
            '''

        })
    '''
    A user defined topological node that was originally defined in a planning
    model not yet having topology described by ConnectivityNodes. Once
    ConnectivityNodes have been created they may be linked to user defined
    ToplogicalNodes using BusNameMarkers.
    '''

    Terminal: list[ACDCTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACDCTerminal.BusNameMarker',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The terminals associated with this bus name marker.
            '''

        })
    '''
    The terminals associated with this bus name marker.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Topology'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CSCDynamics(IdentifiedObject):
    '''
    CSC function block whose behaviour is described by reference to a standard
    model <font color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    CSConverter: Optional[CsConverter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CsConverter.CSCDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Current source converter to which current source converter dynamics model
            applies.
            '''

        })
    '''
    Current source converter to which current source converter dynamics
    model applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cadastre(IdentifiedObject):
    '''
    A singular complete record of all land parcels within some hierarchical
    level of administrative jurisdiction. The cadastre provides the ability
    to find the results of land parcel surveys typically used for land management
    and planning.
    '''

    administrationLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Administrative level is referring to the organisation that is administrative
            authority for managing the a hierarchical division of a geographic area
            into land, property groups. This typically established by government that
            has the responsibility of managing governance, services, taxation, and
            legal jurisdiction, such as municipalities, townships, counties, or regions.
            '''

        })
    '''
    Administrative level is referring to the organisation that is administrative
    authority for managing the a hierarchical division of a geographic
    area into land, property groups. This typically established by government
    that has the responsibility of managing governance, services, taxation,
    and legal jurisdiction, such as municipalities, townships, counties,
    or regions.
    '''

    cadastralReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Local or national unique identification reference for the cadastral for
            land parcel, ensuring effective land management, ownership tracking, and
            legal compliance.
            '''

        })
    '''
    Local or national unique identification reference for the cadastral
    for land parcel, ensuring effective land management, ownership tracking,
    and legal compliance.
    '''

    levelFourDivision: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Level Four Division refers to a further subdivision of a Level Three Division
            within a cadastral hierarchy, typically used to represent specific units
            or sections within a shared property or structure, such as apartments,
            condominiums, or co-owned facilities.
            '''

        })
    '''
    Level Four Division refers to a further subdivision of a Level Three
    Division within a cadastral hierarchy, typically used to represent
    specific units or sections within a shared property or structure, such
    as apartments, condominiums, or co-owned facilities.
    '''

    levelOneDivision: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Level One Division refers to the highest organizational or reference unit
            within a cadastral hierarchy, typically representing a primary division
            of land, such as a farm or property group, which can be further subdivided
            into smaller parcels.
            '''

        })
    '''
    Level One Division refers to the highest organizational or reference
    unit within a cadastral hierarchy, typically representing a primary
    division of land, such as a farm or property group, which can be further
    subdivided into smaller parcels.
    '''

    levelThreeDivision: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Level Three Division refers to a further subdivision of a Level Two Division
            within a cadastral hierarchy, typically used to represent specialized land
            units such as leased parcels, easements, or other secondary divisions associated
            with distinct legal or usage rights.
            '''

        })
    '''
    Level Three Division refers to a further subdivision of a Level Two
    Division within a cadastral hierarchy, typically used to represent
    specialized land units such as leased parcels, easements, or other
    secondary divisions associated with distinct legal or usage rights.
    '''

    levelTwoDivision: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Level Two Division refers to a subdivision of a Level One Parcel within
            a cadastral hierarchy, representing smaller, distinct land units typically
            used for individual ownership, usage, or development, such as specific
            plots or lots within a farm or property group.
            '''

        })
    '''
    Level Two Division refers to a subdivision of a Level One Parcel within
    a cadastral hierarchy, representing smaller, distinct land units typically
    used for individual ownership, usage, or development, such as specific
    plots or lots within a farm or property group.
    '''

    CadastreType: Optional[CadastreType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CadastreType.Cadastre',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.Cadastre',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Address: list[Address] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Address.Cadastre',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Physical addresses encompassed within a given cadastre.
            '''

        })
    '''
    Physical addresses encompassed within a given cadastre.
    '''

    Location: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.Cadastre',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Location within a cadastre.
            '''

        })
    '''
    Location within a cadastre.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CadastreType(IdentifiedObject):
    '''
    Cadastre type specifies the labels associated with each administrative
    level within the administrative system used by the land management governing
    authority.
    '''

    administrationLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Label for the administrative level of a property cadastral, e.g. municipalities,
            townships, counties, or regions.
            '''

        })
    '''
    Label for the administrative level of a property cadastral, e.g. municipalities,
    townships, counties, or regions.
    '''

    levelFourLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Label for level four of a property cadastral, e.g. [need example(s)].
            '''

        })
    '''
    Label for level four of a property cadastral, e.g. [need example(s)].
    '''

    levelOneLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Label for level one of a property cadastral, e.g. [need example(s)].
            '''

        })
    '''
    Label for level one of a property cadastral, e.g. [need example(s)].
    '''

    levelThreeLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Label for level three of a property cadastral, e.g. [need example(s)].
            '''

        })
    '''
    Label for level three of a property cadastral, e.g. [need example(s)].
    '''

    levelTwoLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Label for level two of a property cadastral, e.g. [need example(s)].
            '''

        })
    '''
    Label for level two of a property cadastral, e.g. [need example(s)].
    '''

    Cadastre: list[Cadastre] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Cadastre.CadastreType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.harmonization)
@dataclass(repr=False)
class CalculationMethodHierarchy(IdentifiedObject):
    '''
    The hierarchy of calculation methods used to derive this measurement.
    '''

    Measurement: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.CalculationMethodHierarchy',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Measurement to which this calculation method hierarchy applies.
            '''

        })
    '''
    Measurement to which this calculation method hierarchy applies.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'harmonization',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.CalculationMethodHierarchy',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Measurement value to which this calculation method hierarchy applies.
            '''

        })
    '''
    Measurement value to which this calculation method hierarchy applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CatalogAssetType(IdentifiedObject):
    '''
    a Assets that may be used for planning, work or design purposes.
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.CatalogAssetType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Generic nameplate information associated with this catalog asset type.
            '''

        })
    '''
    Generic nameplate information associated with this catalog asset type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.European)
@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class ConnectivityNode(IdentifiedObject):
    '''
    Connectivity nodes are points where terminals of AC conducting equipment
    are connected together with zero impedance.
    '''

    ACPointOfCommonCoupling: Optional[ACPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACPointOfCommonCoupling.ConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Identifies this ConnectivityNode as a point of common coupling AC.
            '''

        })
    '''
    Identifies this ConnectivityNode as a point of common coupling AC.
    '''

    BoundaryPoint: Optional[BoundaryPoint] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BoundaryPoint.ConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            The boundary point associated with the connectivity node.
            '''

        })
    '''
    The boundary point associated with the connectivity node.
    '''

    ConnectivityNodeContainer: Optional[ConnectivityNodeContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNodeContainer.ConnectivityNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Container of this connectivity node.
            '''

        })
    '''
    Container of this connectivity node.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.ConnectivityNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The topological node to which this connectivity node is assigned. May depend
            on the current state of switches in the network.
            '''

        })
    '''
    The topological node to which this connectivity node is assigned. May
    depend on the current state of switches in the network.
    '''

    ACPointOfCommonCoupling: Optional[ACPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACPointOfCommonCoupling.ConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Identifies this ConnectivityNode as a point of common coupling AC.
            '''

        })
    '''
    Identifies this ConnectivityNode as a point of common coupling AC.
    '''

    BoundaryPoint: Optional[BoundaryPoint] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BoundaryPoint.ConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': False,
        'docstring':
            '''
            The boundary point associated with the connectivity node.
            '''

        })
    '''
    The boundary point associated with the connectivity node.
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.ConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.ConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Terminals: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.ConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Terminals interconnected with zero impedance at a this connectivity node.
            '''

        })
    '''
    Terminals interconnected with zero impedance at a this connectivity
    node.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktConnectivityNode(ConnectivityNode):
    '''
    Subclass of IEC61970:Topology:ConnectivityNode.
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.MktConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SysLoadDistribuFactor: Optional[SysLoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SysLoadDistributionFactor.MktConnectivityNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ControlAreaGeneratingUnit(IdentifiedObject):
    '''
    A control area generating unit. This class is needed so that alternate
    control area definitions may include the same generating unit. It should
    be noted that only one instance within a control area should reference
    a specific generating unit.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.ControlAreaGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The parent control area for the generating unit specifications.
            '''

        })
    '''
    The parent control area for the generating unit specifications.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.ControlAreaGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The generating unit specified for this control area. Note that a control
            area should include a GeneratingUnit only once.
            '''

        })
    '''
    The generating unit specified for this control area. Note that a control
    area should include a GeneratingUnit only once.
    '''

    AltGeneratingUnitMeas: list[AltGeneratingUnitMeas] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AltGeneratingUnitMeas.ControlAreaGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The link to prioritized measurements for this GeneratingUnit.
            '''

        })
    '''
    The link to prioritized measurements for this GeneratingUnit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ControlAreaPowerElectronicsUnit(IdentifiedObject):
    '''
    A control area power electronics unit. This class is needed so that alternate
    control area definitions may include the same power electronics unit. It
    should be noted that only one instance within a control area should reference
    a specific power electronics unit.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.ControlAreaPowerElectronicsUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power electronics unit specifications for the control area.
            '''

        })
    '''
    The power electronics unit specifications for the control area.
    '''

    PowerElectronicsUnit: Optional[PowerElectronicsUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsUnit.ControlAreaPowerElectronicsUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power electronics unit specified for this control area. Note that a
            control area should include a PowerElectronicsUnit only once.
            '''

        })
    '''
    The power electronics unit specified for this control area. Note that
    a control area should include a PowerElectronicsUnit only once.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CoordinateSystem(IdentifiedObject):
    '''
    Coordinate reference system.
    '''

    crsUrn: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A Uniform Resource Name (URN) for the coordinate reference system (crs)
            used to define 'Location.PositionPoints'.
            An example would be the European Petroleum Survey Group (EPSG) code for
            a coordinate reference system, defined in URN under the Open Geospatial
            Consortium (OGC) namespace as: urn:ogc:def:crs:EPSG::XXXX, where XXXX is
            an EPSG code (a full list of codes can be found at the EPSG Registry web
            site http://www.epsg-registry.org/). To define the coordinate system as
            being WGS84 (latitude, longitude) using an EPSG OGC, this attribute would
            be urn:ogc:def:crs:EPSG::4236.
            A profile should limit this code to a set of allowed URNs agreed to by
            all sending and receiving parties.
            '''

        })
    '''
    A Uniform Resource Name (URN) for the coordinate reference system (crs)
    used to define 'Location.PositionPoints'.
    An example would be the European Petroleum Survey Group (EPSG) code
    for a coordinate reference system, defined in URN under the Open Geospatial
    Consortium (OGC) namespace as: urn:ogc:def:crs:EPSG::XXXX, where XXXX
    is an EPSG code (a full list of codes can be found at the EPSG Registry
    web site http://www.epsg-registry.org/). To define the coordinate system
    as being WGS84 (latitude, longitude) using an EPSG OGC, this attribute
    would be urn:ogc:def:crs:EPSG::4236.
    A profile should limit this code to a set of allowed URNs agreed to
    by all sending and receiving parties.
    '''

    Geometry: list[Geometry] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Geometry.CoordinateSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The geometry which uses a given coordinate system.
            '''

        })
    '''
    The geometry which uses a given coordinate system.
    '''

    Location: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.CoordinateSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All locations described with position points in this coordinate system.
            '''

        })
    '''
    All locations described with position points in this coordinate system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CoupledLineSegmentGroup(IdentifiedObject):
    '''
    Aggregates a set of line segments that are on the same tower, or in the
    same right-of-way, close enough that mutual coupling impedances between
    the lines need to be included in network analysis.
    '''

    LineSegmentCoupling: list[LineSegmentCoupling] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LineSegmentCoupling.CoupledLineSegmentGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A coupled line in this coupled group of lines.
            '''

        })
    '''
    A coupled line in this coupled group of lines.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CrewType(IdentifiedObject):
    '''
    Custom description of the type of crew. This may be used to determine the
    type of work the crew can be assigned to. Examples include repair, tree
    trimming, switching, etc.
    '''

    Crews: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.CrewType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All crews of this type.
            '''

        })
    '''
    All crews of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentDroopControlFunction(IdentifiedObject):
    '''
    Current droop control function is a function block that calculates the
    operating point of the controlled equipment to achieve the target current.
    '''

    droopCapacitive: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Droop in capacitive region. The unit is V/A.
            '''

        })
    '''
    Droop in capacitive region. The unit is V/A.
    '''

    droopInductive: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Droop in inductive region. The unit is V/A.
            '''

        })
    '''
    Droop in inductive region. The unit is V/A.
    '''

    offsetCapacitive: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Offset in capacitive region.
            '''

        })
    '''
    Offset in capacitive region.
    '''

    offsetInductive: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Offset in capacitive region.
            '''

        })
    '''
    Offset in capacitive region.
    '''

    targetValueCapacitive: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Setpoint when control is active in capacitive region.
            '''

        })
    '''
    Setpoint when control is active in capacitive region.
    '''

    targetValueInductive: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Setpoint when control is active in inductive region.
            '''

        })
    '''
    Setpoint when control is active in inductive region.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class Curve(IdentifiedObject):
    '''
    A multi-purpose curve or functional relationship between an independent
    variable (X-axis) and dependent (Y-axis) variables.
    '''

    curveStyle: Optional[CurveStyle] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The style or shape of the curve.
            '''

        })
    '''
    The style or shape of the curve.
    '''

    xMultiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for X-axis.
            '''

        })
    '''
    Multiplier for X-axis.
    '''

    xUnit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The X-axis units of measure.
            '''

        })
    '''
    The X-axis units of measure.
    '''

    y1Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for Y1-axis.
            '''

        })
    '''
    Multiplier for Y1-axis.
    '''

    y1Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Y1-axis units of measure.
            '''

        })
    '''
    The Y1-axis units of measure.
    '''

    y2Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for Y2-axis.
            '''

        })
    '''
    Multiplier for Y2-axis.
    '''

    y2Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Y2-axis units of measure.
            '''

        })
    '''
    The Y2-axis units of measure.
    '''

    y3Multiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for Y3-axis.
            '''

        })
    '''
    Multiplier for Y3-axis.
    '''

    y3Unit: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Y3-axis units of measure.
            '''

        })
    '''
    The Y3-axis units of measure.
    '''

    CurveDatas: list[CurveData] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CurveData.Curve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The point data values that define this curve.
            '''

        })
    '''
    The point data values that define this curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AmbientTemperatureDependencyCurve(Curve):
    '''
    A curve or functional relationship between the ambient temperature independent
    variable (X-axis) and relative temperature dependent (Y-axis) variables.
    '''

    OperationalLimitType: list[OperationalLimitType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitType.PermanentAmbientTemperatureDependencyCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit type that has this permanent ambient temperature
            dependency curve.
            '''

        })
    '''
    The operational limit type that has this permanent ambient temperature
    dependency curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SecurityLimit'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BaseOverloadLimitCurve(Curve):
    '''
    A curve or functional relationship between
    - the relative loading - current loading over permanent loading (PATL)
    independent variable (X-axis), and
    - temporary overloading (TATL) limiting dependent (Y-axis) variables.
    '''

    OperationalLimitType: list[OperationalLimitType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitType.TemporaryBaseOverloadLimitCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit type that has this temporary base overload limit
            curve.
            '''

        })
    '''
    The operational limit type that has this temporary base overload limit
    curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SecurityLimit'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConductorCharacteristicCurve(Curve):
    '''
    Class to associate damage curves to conductors or to their datasheets.
    '''

    Conductor: list[Conductor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Conductor.DamageCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A conductor can have a damage curve associated to it.
            '''

        })
    '''
    A conductor can have a damage curve associated to it.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DurationOverloadLimitCurve(Curve):
    '''
    A curve or functional relationship between
    - the overload duration independent variable (X-axis), and
    - temporary overloading (TATL) limiting dependent (Y-axis) variables.
    '''

    OperationalLimitType: list[OperationalLimitType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitType.TemporaryDurationOverloadLimitCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit type that has this temporary duration overload limit
            curve.
            '''

        })
    '''
    The operational limit type that has this temporary duration overload
    limit curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SecurityLimit'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EmissionAccount(Curve):
    '''
    Accounts for tracking emissions usage and credits for thermal generating
    units. A unit may have zero or more emission accounts, and will typically
    have one for tracking usage and one for tracking credits.
    '''

    emissionType: Optional[EmissionType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of emission, for example sulfur dioxide (SO2). The y1AxisUnits
            of the curve contains the unit of measure (e.g. kg) and the emissionType
            is the type of emission (e.g. sulfur dioxide).
            '''

        })
    '''
    The type of emission, for example sulfur dioxide (SO2). The y1AxisUnits
    of the curve contains the unit of measure (e.g. kg) and the emissionType
    is the type of emission (e.g. sulfur dioxide).
    '''

    emissionValueSource: Optional[EmissionValueSource] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The source of the emission value.
            '''

        })
    '''
    The source of the emission value.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.EmmissionAccounts',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have one or more emission allowance accounts.
            '''

        })
    '''
    A thermal generating unit may have one or more emission allowance accounts.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EmissionCurve(Curve):
    '''
    Relationship between the unit's emission rate in units of mass per hour
    (Y-axis) and output active power (X-axis) for a given type of emission.
    This curve applies when only one type of fuel is being burned.
    '''

    isNetGrossP: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag is set to true when output is expressed in net active power.
            '''

        })
    '''
    Flag is set to true when output is expressed in net active power.
    '''

    emissionContent: Optional[ float | Emission ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The emission content per quantity of fuel burned.
            '''

        })
    '''
    The emission content per quantity of fuel burned.
    '''

    emissionType: Optional[EmissionType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of emission, which also gives the production rate measurement
            unit. The y1AxisUnits of the curve contains the unit of measure (e.g. kg)
            and the emissionType is the type of emission (e.g. sulfur dioxide).
            '''

        })
    '''
    The type of emission, which also gives the production rate measurement
    unit. The y1AxisUnits of the curve contains the unit of measure (e.g.
    kg) and the emissionType is the type of emission (e.g. sulfur dioxide).
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.EmissionCurves',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have one or more emission curves.
            '''

        })
    '''
    A thermal generating unit may have one or more emission curves.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FuelAllocationSchedule(Curve):
    '''
    The amount of fuel of a given type which is allocated for consumption over
    a specified period of time.
    '''

    fuelAllocationEndDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The end time and date of the fuel allocation schedule.
            '''

        })
    '''
    The end time and date of the fuel allocation schedule.
    '''

    fuelAllocationStartDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The start time and date of the fuel allocation schedule.
            '''

        })
    '''
    The start time and date of the fuel allocation schedule.
    '''

    maxFuelAllocation: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum amount of fuel that is allocated for consumption for the scheduled
            time period.
            '''

        })
    '''
    The maximum amount of fuel that is allocated for consumption for the
    scheduled time period.
    '''

    minFuelAllocation: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum amount of fuel that is allocated for consumption for the scheduled
            time period, e.g., based on a "take-or-pay" contract.
            '''

        })
    '''
    The minimum amount of fuel that is allocated for consumption for the
    scheduled time period, e.g., based on a "take-or-pay" contract.
    '''

    fuelType: Optional[FuelType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of fuel, which also indicates the corresponding measurement unit.
            '''

        })
    '''
    The type of fuel, which also indicates the corresponding measurement
    unit.
    '''

    FossilFuel: Optional[FossilFuel] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FossilFuel.FuelAllocationSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A fuel allocation schedule shall have a fossil fuel.
            '''

        })
    '''
    A fuel allocation schedule shall have a fossil fuel.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.FuelAllocationSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have one or more fuel allocation schedules.
            '''

        })
    '''
    A thermal generating unit may have one or more fuel allocation schedules.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FuseCharacteristicCurve(Curve):
    '''
    This class represents the characteristic curve of fuse.
    '''

    FuseMinimumMelt: Optional[Fuse] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Fuse.MiinimumMeltCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Fuse this curve is associated to.
            '''

        })
    '''
    Fuse this curve is associated to.
    '''

    FuseTotalClearing: Optional[Fuse] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Fuse.TotalClearingTimeCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Fuse this curve is associated to.
            '''

        })
    '''
    Fuse this curve is associated to.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenUnitOpCostCurve(Curve):
    '''
    Relationship between unit operating cost (Y-axis) and unit output active
    power (X-axis). The operating cost curve for thermal units is derived from
    heat input and fuel costs. The operating cost curve for hydro units is
    derived from water flow rates and equivalent water costs.
    '''

    isNetGrossP: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag is set to true when output is expressed in net active power.
            '''

        })
    '''
    Flag is set to true when output is expressed in net active power.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GenUnitOpCostCurves',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A generating unit may have one or more cost curves, depending upon fuel
            mixture and fuel cost.
            '''

        })
    '''
    A generating unit may have one or more cost curves, depending upon
    fuel mixture and fuel cost.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GrossToNetActivePowerCurve(Curve):
    '''
    Relationship between the generating unit's gross active power output on
    the X-axis (measured at the terminals of the machine(s)) and the generating
    unit's net active power output on the Y-axis (based on utility-defined
    measurements at the power station). Station service loads, when modelled,
    should be treated as non-conforming bus loads. There may be more than one
    curve, depending on the auxiliary equipment that is in service.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GrossToNetActivePowerCurves',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A generating unit may have a gross active power to net active power curve,
            describing the losses and auxiliary power requirements of the unit.
            '''

        })
    '''
    A generating unit may have a gross active power to net active power
    curve, describing the losses and auxiliary power requirements of the
    unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class HeatInputCurve(Curve):
    '''
    Relationship between unit heat input in energy per time for main fuel (Y1-axis)
    and supplemental fuel (Y2-axis) versus unit output in active power (X-axis).
    The quantity of main fuel used to sustain generation at this output level
    is prorated for throttling between definition points. The quantity of supplemental
    fuel used at this output level is fixed and not prorated.
    '''

    isNetGrossP: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag is set to true when output is expressed in net active power.
            '''

        })
    '''
    Flag is set to true when output is expressed in net active power.
    '''

    auxPowerMult: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power output - auxiliary power multiplier adjustment factor.
            '''

        })
    '''
    Power output - auxiliary power multiplier adjustment factor.
    '''

    auxPowerOffset: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power output - auxiliary power offset adjustment factor.
            '''

        })
    '''
    Power output - auxiliary power offset adjustment factor.
    '''

    heatInputEff: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Heat input - efficiency multiplier adjustment factor.
            '''

        })
    '''
    Heat input - efficiency multiplier adjustment factor.
    '''

    heatInputOffset: Optional[ float | HeatRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Heat input - offset adjustment factor.
            '''

        })
    '''
    Heat input - offset adjustment factor.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatInputCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a heat input curve.
            '''

        })
    '''
    A thermal generating unit may have a heat input curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatInputCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a heat input curve.
            '''

        })
    '''
    A thermal generating unit may have a heat input curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class HeatRateCurve(Curve):
    '''
    Relationship between unit heat rate per active power (Y-axis) and unit
    output (X-axis). The heat input is from all fuels.
    '''

    isNetGrossP: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag is set to true when output is expressed in net active power.
            '''

        })
    '''
    Flag is set to true when output is expressed in net active power.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatRateCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have a heat rate curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatRateCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have a heat rate curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HydroGeneratingEfficiencyCurve(Curve):
    '''
    Relationship between unit efficiency as percentage and unit output active
    power for a given net head in meters. The relationship between efficiency,
    discharge, head, and power output is expressed as follows: E =KP/HQ
    where: E is the efficiency, as a percentage; P is the active power; H is
    the height; Q is the discharge, volume/time unit; K is a constant.
    For example, a curve instance for a given net head could show efficiency
    (Y-axis) versus active power output (X-axis) or versus discharge on the
    X-axis.
    '''

    HydroGeneratingUnit: Optional[HydroGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.HydroGeneratingEfficiencyCurves',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A hydro generating unit has an efficiency curve.
            '''

        })
    '''
    A hydro generating unit has an efficiency curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class IncrementalHeatRateCurve(Curve):
    '''
    Relationship between unit incremental heat rate in (delta energy/time)
    per (delta active power) and unit output in active power. The IHR curve
    represents the slope of the HeatInputCurve. Note that the "incremental
    heat rate" and the "heat rate" have the same engineering units.
    '''

    isNetGrossP: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag is set to true when output is expressed in net active power.
            '''

        })
    '''
    Flag is set to true when output is expressed in net active power.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.IncrementalHeatRateCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have an incremental heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have an incremental heat rate curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.IncrementalHeatRateCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have an incremental heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have an incremental heat rate curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LevelVsVolumeCurve(Curve):
    '''
    Relationship between reservoir volume and reservoir level. The volume is
    at the Y-axis and the reservoir level at the X-axis.
    '''

    Reservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.LevelVsVolumeCurves',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reservoir may have a level versus volume relationship.
            '''

        })
    '''
    A reservoir may have a level versus volume relationship.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LossCurve(Curve):
    '''
    Represents the losses in the equipment due to operation position.
    '''

    FACTSEquipment: Optional[FACTSEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FACTSEquipment.LossCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The FACTS equipment which has a loss curve.
            '''

        })
    '''
    The FACTS equipment which has a loss curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class PenstockLossCurve(Curve):
    '''
    Relationship between penstock head loss (in meters) and total discharge
    through the penstock (in cubic meters per second). One or more turbines
    may be connected to the same penstock.
    '''

    HydroGeneratingUnit: Optional[HydroGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.PenstockLossCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A hydro generating unit has a penstock loss curve.
            '''

        })
    '''
    A hydro generating unit has a penstock loss curve.
    '''

    HydroGeneratingUnit: Optional[HydroGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.PenstockLossCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A hydro generating unit has a penstock loss curve.
            '''

        })
    '''
    A hydro generating unit has a penstock loss curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReactiveCapabilityCurve(Curve):
    '''
    Reactive power rating envelope versus the synchronous machine's active
    power, in both the generating and motoring modes. For each active power
    value there is a corresponding high and low reactive power limit value.
    Typically there will be a separate curve for each coolant condition, such
    as hydrogen pressure. The Y1 axis values represent reactive minimum and
    the Y2 axis values represent reactive maximum.
    '''

    coolantTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The machine's coolant temperature (e.g., ambient air or stator circulating
            water).
            '''

        })
    '''
    The machine's coolant temperature (e.g., ambient air or stator circulating
    water).
    '''

    hydrogenPressure: Optional[ float | Pressure ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydrogen coolant pressure.
            '''

        })
    '''
    The hydrogen coolant pressure.
    '''

    referenceVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reference voltage for which the capability curve is valid.
            '''

        })
    '''
    The reference voltage for which the capability curve is valid.
    '''

    ExtendedWardEquivalent: Optional[ExtendedWardEquivalent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExtendedWardEquivalent.ReactiveCapabilityCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The extended ward equivalent using this reactive capability curve.
            '''

        })
    '''
    The extended ward equivalent using this reactive capability curve.
    '''

    SynchronousMachine: Optional[SynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachine.ReactiveCapabilityCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The synchronous machine using this curve.
            '''

        })
    '''
    The synchronous machine using this curve.
    '''

    InitiallyUsedBySynchronousMachine: list[SynchronousMachine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SynchronousMachine.InitialReactiveCapabilityCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machines using this curve as default.
            '''

        })
    '''
    Synchronous machines using this curve as default.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RecoveryOverloadLimitCurve(Curve):
    '''
    The relation between the recovery time and an overload limit.
    '''

    OperationalLimitType: list[OperationalLimitType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitType.RecoveryOverloadLimitCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit type which has recovery time characteristic.
            '''

        })
    '''
    The operational limit type which has recovery time characteristic.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SecurityLimit'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class ShutdownCurve(Curve):
    '''
    Relationship between the rate in gross active power/minute (Y-axis) at
    which a unit should be shutdown and its present gross MW output (X-axis).
    '''

    shutdownDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The date and time of the most recent generating unit shutdown.
            '''

        })
    '''
    The date and time of the most recent generating unit shutdown.
    '''

    shutdownCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed shutdown cost.
            '''

        })
    '''
    Fixed shutdown cost.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.ShutdownCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a shutdown curve.
            '''

        })
    '''
    A thermal generating unit may have a shutdown curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.ShutdownCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a shutdown curve.
            '''

        })
    '''
    A thermal generating unit may have a shutdown curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SolarRadiationDependencyCurve(Curve):
    '''
    A curve or functional relationship between
    - the solar radiation independent variable (X-axis), and
    - relative dependent (Y-axis) variables.
    '''

    OperationalLimitType: list[OperationalLimitType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitType.PermanentSolarRadiationCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit type that has this permanent solar radiation curve.
            '''

        })
    '''
    The operational limit type that has this permanent solar radiation
    curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SecurityLimit'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class StartIgnFuelCurve(Curve):
    '''
    The quantity of ignition fuel (Y-axis) used to restart and repay the auxiliary
    power consumed versus the number of hours (X-axis) the unit was off line.
    '''

    ignitionFuelType: Optional[FuelType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of ignition fuel.
            '''

        })
    '''
    Type of ignition fuel.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartIgnFuelCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup ignition fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup ignition fuel curve.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartIgnFuelCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup ignition fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup ignition fuel curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class StartMainFuelCurve(Curve):
    '''
    The quantity of main fuel (Y-axis) used to restart and repay the auxiliary
    power consumed versus the number of hours (X-axis) the unit was off line.
    '''

    mainFuelType: Optional[FuelType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of main fuel.
            '''

        })
    '''
    Type of main fuel.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartMainFuelCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup main fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup main fuel curve.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartMainFuelCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup main fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup main fuel curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class StartRampCurve(Curve):
    '''
    Rate in gross active power per minute (Y-axis) at which a unit can be loaded
    versus the number of hours (X-axis) the unit was off line.
    '''

    hotStandbyRamp: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The startup ramp rate in gross for a unit that is on hot standby.
            '''

        })
    '''
    The startup ramp rate in gross for a unit that is on hot standby.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartRampCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup ramp curve.
            '''

        })
    '''
    The unit's startup model may have a startup ramp curve.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartRampCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup ramp curve.
            '''

        })
    '''
    The unit's startup model may have a startup ramp curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TailbayLossCurve(Curve):
    '''
    Relationship between tailbay head loss height (Y-axis) and the total discharge
    into the power station's tailbay volume per time unit (X-axis) . There
    could be more than one curve depending on the level of the tailbay reservoir
    or river level.
    '''

    HydroGeneratingUnit: Optional[HydroGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.TailbayLossCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A hydro generating unit has a tailbay loss curve.
            '''

        })
    '''
    A hydro generating unit has a tailbay loss curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class TargetLevelSchedule(Curve):
    '''
    Reservoir water level targets from advanced studies or "rule curves". Typically
    in one hour increments for up to 10 days.
    '''

    highLevelLimit: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            High target level limit, above which the reservoir operation will be penalized.
            '''

        })
    '''
    High target level limit, above which the reservoir operation will be
    penalized.
    '''

    lowLevelLimit: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Low target level limit, below which the reservoir operation will be penalized.
            '''

        })
    '''
    Low target level limit, below which the reservoir operation will be
    penalized.
    '''

    Reservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.TargetLevelSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reservoir may have a water level target schedule.
            '''

        })
    '''
    A reservoir may have a water level target schedule.
    '''

    Reservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.TargetLevelSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A reservoir may have a water level target schedule.
            '''

        })
    '''
    A reservoir may have a water level target schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VsCapabilityCurve(Curve):
    '''
    The P-Q capability curve for a voltage source converter, with P on X-axis
    and Qmin and Qmax on Y1-axis and Y2-axis.
    '''

    referenceVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reference voltage for which the capability curve is valid.
            '''

        })
    '''
    The reference voltage for which the capability curve is valid.
    '''

    VsConverter: Optional[VsConverter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VsConverter.CapabilityCurve',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage source vonverters with this capability curve.
            '''

        })
    '''
    The voltage source vonverters with this capability curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCNode(IdentifiedObject):
    '''
    DC nodes are points where terminals of DC conducting equipment are connected
    together with zero impedance.
    '''

    DCEquipmentContainer: Optional[DCEquipmentContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCEquipmentContainer.DCNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC container for the DC nodes.
            '''

        })
    '''
    The DC container for the DC nodes.
    '''

    DCPointOfCommonCoupling: Optional[DCPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPointOfCommonCoupling.DCNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Identifies that this DC node is a point of common coupling DC.
            '''

        })
    '''
    Identifies that this DC node is a point of common coupling DC.
    '''

    DCTopologicalNode: Optional[DCTopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTopologicalNode.DCNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC topological node to which this DC connectivity node is assigned.
            May depend on the current state of switches in the network.
            '''

        })
    '''
    The DC topological node to which this DC connectivity node is assigned.
    May depend on the current state of switches in the network.
    '''

    DCTerminals: list[DCBaseTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCBaseTerminal.DCNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC base terminals interconnected with zero impedance at a this DC connectivity
            node.
            '''

        })
    '''
    DC base terminals interconnected with zero impedance at a this DC connectivity
    node.
    '''

    DCPointOfCommonCoupling: Optional[DCPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPointOfCommonCoupling.DCNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Identifies that this DC node is a point of common coupling DC.
            '''

        })
    '''
    Identifies that this DC node is a point of common coupling DC.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class DCTopologicalIsland(IdentifiedObject):
    '''
    An electrically connected subset of the network. DC topological islands
    can change as the current network state changes, e.g. due to:
    - disconnect switches or breakers changing state in a SCADA/EMS.
    - manual creation, change or deletion of topological nodes in a planning
    tool.
    Only energised TopologicalNode-s shall be part of the topological island.
    '''

    DCTopologicalNodes: list[DCTopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCTopologicalNode.DCTopologicalIsland',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC topological nodes in a DC topological island.
            '''

        })
    '''
    The DC topological nodes in a DC topological island.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCTopologicalNode(IdentifiedObject):
    '''
    DC bus.
    '''

    DCEquipmentContainer: Optional[DCEquipmentContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCEquipmentContainer.DCTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The connectivity node container to which the topological node belongs.
            '''

        })
    '''
    The connectivity node container to which the topological node belongs.
    '''

    DCTopologicalIsland: Optional[DCTopologicalIsland] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTopologicalIsland.DCTopologicalNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A DC topological node belongs to a DC topological island.
            '''

        })
    '''
    A DC topological node belongs to a DC topological island.
    '''

    DCTerminals: list[DCBaseTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCBaseTerminal.DCTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            See association end TopologicalNode.Terminal.
            '''

        })
    '''
    See association end TopologicalNode.Terminal.
    '''

    DCNodes: list[DCNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCNode.DCTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC connectivity nodes combined together to form this DC topological
            node. May depend on the current state of switches in the network.
            '''

        })
    '''
    The DC connectivity nodes combined together to form this DC topological
    node. May depend on the current state of switches in the network.
    '''

    SvDCVoltage: list[SvDCVoltage] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvDCVoltage.DCTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The state DC voltage associated with the DC topological node.
            '''

        })
    '''
    The state DC voltage associated with the DC topological node.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DERDynamics(IdentifiedObject):
    '''
    Parent class supporting relationships to DER dynamics models.
    '''

    AsynchronousMachine: list[AsynchronousMachine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AsynchronousMachine.DERDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine model with which this DER dynamics model is associated.
            '''

        })
    '''
    Asynchronous machine model with which this DER dynamics model is associated.
    '''

    PowerElectronicsConnection: list[PowerElectronicsConnection] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerElectronicsConnection.DERDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Power electronics connection with which this DER dynamics model is associated.
            '''

        })
    '''
    Power electronics connection with which this DER dynamics model is
    associated.
    '''

    SynchronousMachine: list[SynchronousMachine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SynchronousMachine.DERDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machine model with which this DER dynamics model is associated.
            '''

        })
    '''
    Synchronous machine model with which this DER dynamics model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'IEEE1547Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DayType(IdentifiedObject):
    '''
    Group of similar days. For example it could be used to represent weekdays,
    weekend, or holidays.
    '''

    SeasonDayTypeSchedules: list[SeasonDayTypeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SeasonDayTypeSchedule.DayType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Schedules that use this DayType.
            '''

        })
    '''
    Schedules that use this DayType.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DesignElement(IdentifiedObject):
    '''
    An element of a design that places a compatible unit or an asset at a specific
    design location
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.DesignElement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            An existing or future PSR affected by the conceptual design
            '''

        })
    '''
    An existing or future PSR affected by the conceptual design
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Design'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Diagram(IdentifiedObject):
    '''
    The diagram being exchanged. The coordinate system is a standard Cartesian
    coordinate system and the orientation attribute defines the orientation.
    The initial view related attributes can be used to specify an initial view
    with the x,y coordinates of the diagonal points.
    '''

    x1InitialView: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            X coordinate of the first corner of the initial view.
            '''

        })
    '''
    X coordinate of the first corner of the initial view.
    '''

    x2InitialView: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            X coordinate of the second corner of the initial view.
            '''

        })
    '''
    X coordinate of the second corner of the initial view.
    '''

    y1InitialView: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Y coordinate of the first corner of the initial view.
            '''

        })
    '''
    Y coordinate of the first corner of the initial view.
    '''

    y2InitialView: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Y coordinate of the second corner of the initial view.
            '''

        })
    '''
    Y coordinate of the second corner of the initial view.
    '''

    orientation: Optional[OrientationKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Coordinate system orientation of the diagram. A positive orientation gives
            standard "right-hand" orientation, with negative orientation indicating
            a "left-hand" orientation. For 2D diagrams, a positive orientation will
            result in X values increasing from left to right and Y values increasing
            from bottom to top. A negative orientation gives the "left-hand" orientation
            (favoured by computer graphics displays) with X values increasing from
            left to right and Y values increasing from top to bottom.
            '''

        })
    '''
    Coordinate system orientation of the diagram. A positive orientation
    gives standard "right-hand" orientation, with negative orientation
    indicating a "left-hand" orientation. For 2D diagrams, a positive orientation
    will result in X values increasing from left to right and Y values
    increasing from bottom to top. A negative orientation gives the "left-hand"
    orientation (favoured by computer graphics displays) with X values
    increasing from left to right and Y values increasing from top to bottom.
    '''

    DiagramStyle: Optional[DiagramStyle] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramStyle.Diagram',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A Diagram may have a DiagramStyle.
            '''

        })
    '''
    A Diagram may have a DiagramStyle.
    '''

    DiagramElements: list[DiagramObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObject.Diagram',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A diagram is made up of multiple diagram objects.
            '''

        })
    '''
    A diagram is made up of multiple diagram objects.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramObject(IdentifiedObject):
    '''
    An object that defines one or more points in a given space. This object
    can be associated with anything that specializes IdentifiedObject. For
    single line diagrams such objects typically include such items as analog
    values, breakers, disconnectors, power transformers, and transmission lines.
    '''

    drawingOrder: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The drawing order of this element. The higher the number, the later the
            element is drawn in sequence. This is used to ensure that elements that
            overlap are rendered in the correct order.
            '''

        })
    '''
    The drawing order of this element. The higher the number, the later
    the element is drawn in sequence. This is used to ensure that elements
    that overlap are rendered in the correct order.
    '''

    isPolygon: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Defines whether or not the diagram objects points define the boundaries
            of a polygon or the routing of a polyline. If this value is true then a
            receiving application should consider the first and last points to be connected.
            '''

        })
    '''
    Defines whether or not the diagram objects points define the boundaries
    of a polygon or the routing of a polyline. If this value is true then
    a receiving application should consider the first and last points to
    be connected.
    '''

    offsetX: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The offset in the X direction. This is used for defining the offset from
            centre for rendering an icon (the default is that a single point specifies
            the centre of the icon).
            The offset is in per-unit with 0 indicating there is no offset from the
            horizontal centre of the icon. -0.5 indicates it is offset by 50% to the
            left and 0.5 indicates an offset of 50% to the right.
            '''

        })
    '''
    The offset in the X direction. This is used for defining the offset
    from centre for rendering an icon (the default is that a single point
    specifies the centre of the icon).
    The offset is in per-unit with 0 indicating there is no offset from
    the horizontal centre of the icon. -0.5 indicates it is offset by 50%
    to the left and 0.5 indicates an offset of 50% to the right.
    '''

    offsetY: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The offset in the Y direction. This is used for defining the offset from
            centre for rendering an icon (the default is that a single point specifies
            the centre of the icon).
            The offset is in per-unit with 0 indicating there is no offset from the
            vertical centre of the icon. The offset direction is dependent on the orientation
            of the diagram, with -0.5 and 0.5 indicating an offset of +/- 50% on the
            vertical axis.
            '''

        })
    '''
    The offset in the Y direction. This is used for defining the offset
    from centre for rendering an icon (the default is that a single point
    specifies the centre of the icon).
    The offset is in per-unit with 0 indicating there is no offset from
    the vertical centre of the icon. The offset direction is dependent
    on the orientation of the diagram, with -0.5 and 0.5 indicating an
    offset of +/- 50% on the vertical axis.
    '''

    rotation: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sets the angle of rotation of the diagram object. Zero degrees is pointing
            to the top of the diagram. Rotation is clockwise. DiagramObject.rotation=0
            has the following meaning: The connection point of an element which has
            one terminal is pointing to the top side of the diagram. The connection
            point "From side" of an element which has more than one terminal is pointing
            to the top side of the diagram.
            DiagramObject.rotation=90 has the following meaning: The connection point
            of an element which has one terminal is pointing to the right hand side
            of the diagram. The connection point "From side" of an element which has
            more than one terminal is pointing to the right hand side of the diagram.
            '''

        })
    '''
    Sets the angle of rotation of the diagram object. Zero degrees is pointing
    to the top of the diagram. Rotation is clockwise. DiagramObject.rotation=0
    has the following meaning: The connection point of an element which
    has one terminal is pointing to the top side of the diagram. The connection
    point "From side" of an element which has more than one terminal is
    pointing to the top side of the diagram.
    DiagramObject.rotation=90 has the following meaning: The connection
    point of an element which has one terminal is pointing to the right
    hand side of the diagram. The connection point "From side" of an element
    which has more than one terminal is pointing to the right hand side
    of the diagram.
    '''

    Diagram: Optional[Diagram] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Diagram.DiagramElements',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A diagram object is part of a diagram.
            '''

        })
    '''
    A diagram object is part of a diagram.
    '''

    DiagramObjectStyle: Optional[DiagramObjectStyle] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiagramObjectStyle.StyledObjects',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A diagram object has a style associated that provides a reference for the
            style used in the originating system.
            '''

        })
    '''
    A diagram object has a style associated that provides a reference for
    the style used in the originating system.
    '''

    IdentifiedObject: Optional[IdentifiedObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IdentifiedObject.DiagramObjects',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The domain object to which this diagram object is associated.
            '''

        })
    '''
    The domain object to which this diagram object is associated.
    '''

    DiagramObjectPoints: list[DiagramObjectPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObjectPoint.DiagramObject',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A diagram object can have 0 or more points to reflect its layout position,
            routing (for polylines) or boundary (for polygons).
            '''

        })
    '''
    A diagram object can have 0 or more points to reflect its layout position,
    routing (for polylines) or boundary (for polygons).
    '''

    DiagramObjectPoints: list[DiagramObjectPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObjectPoint.DiagramObject',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A diagram object can have 0 or more points to reflect its layout position,
            routing (for polylines) or boundary (for polygons).
            '''

        })
    '''
    A diagram object can have 0 or more points to reflect its layout position,
    routing (for polylines) or boundary (for polygons).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TextDiagramObject(DiagramObject):
    '''
    A diagram object for placing free-text or text derived from an associated
    domain object.
    '''

    text: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The text that is displayed by this text diagram object.
            '''

        })
    '''
    The text that is displayed by this text diagram object.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramObjectStyle(IdentifiedObject):
    '''
    A reference to a style used by the originating system for a diagram object.
    A diagram object style describes information such as line thickness, shape
    such as circle or rectangle etc, and colour.
    '''

    StyledObjects: list[DiagramObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiagramObject.DiagramObjectStyle',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A style can be assigned to multiple diagram objects.
            '''

        })
    '''
    A style can be assigned to multiple diagram objects.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagramStyle(IdentifiedObject):
    '''
    The diagram style refers to a style used by the originating system for
    a diagram. A diagram style describes information such as schematic, geographic,
    etc.
    '''

    Diagram: list[Diagram] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Diagram.DiagramStyle',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A DiagramStyle can be used by many Diagrams.
            '''

        })
    '''
    A DiagramStyle can be used by many Diagrams.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DimensionsInfo(IdentifiedObject):
    '''
    As applicable, the basic linear, area, or volume dimensions of an asset,
    asset type (AssetModel) or other type of object (such as land area). Units
    and multipliers are specified per dimension.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Document(IdentifiedObject):
    '''
    Parent class for different groupings of information collected and managed
    as a part of a business process. It will frequently contain references
    to other objects, such as assets, people and power system resources.
    A Document will only have one valid version. A document gets updated by
    creating a new version that supersedes the old version.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Free text comment.
            '''

        })
    '''
    Free text comment.
    '''

    createdDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time that this document was created.
            '''

        })
    '''
    Date and time that this document was created.
    '''

    lastModifiedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time this document was last modified. Documents may potentially
            be modified many times during their lifetime.
            '''

        })
    '''
    Date and time this document was last modified. Documents may potentially
    be modified many times during their lifetime.
    '''

    revisionNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Revision number for this document.
            '''

        })
    '''
    Revision number for this document.
    '''

    subject: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Document subject.
            '''

        })
    '''
    Document subject.
    '''

    title: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Document title.
            '''

        })
    '''
    Document title.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Utility-specific classification of this document, according to its corporate
            standards, practices, and existing IT systems (e.g., for management of
            assets, maintenance, work, outage, customers, etc.).
            '''

        })
    '''
    Utility-specific classification of this document, according to its
    corporate standards, practices, and existing IT systems (e.g., for
    management of assets, maintenance, work, outage, customers, etc.).
    '''

    url: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Electronic address specifying where a document can be found.
            '''

        })
    '''
    Electronic address specifying where a document can be found.
    '''

    Approver: Optional[Approver] = field(
        default=None,
        metadata={
        'type': 'deprecated',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Approver.Documents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Approver of this document.
            '''

        })
    '''
    Approver of this document.
    '''

    Author: Optional[Author] = field(
        default=None,
        metadata={
        'type': 'deprecated',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Author.Documents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Author of this document.
            '''

        })
    '''
    Author of this document.
    '''

    docStatus: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of this document. For status of subject matter this document represents
            (e.g., Agreement, Work), use 'status' attribute.
            Example values for 'docStatus.status' are draft, approved, cancelled, etc.
            '''

        })
    '''
    Status of this document. For status of subject matter this document
    represents (e.g., Agreement, Work), use 'status' attribute.
    Example values for 'docStatus.status' are draft, approved, cancelled,
    etc.
    '''

    Document: Optional[Document] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Document.RelatedDocument',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Editor: Optional[Editor] = field(
        default=None,
        metadata={
        'type': 'deprecated',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Editor.Documents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Editor of this document.
            '''

        })
    '''
    Editor of this document.
    '''

    Issuer: Optional[Issuer] = field(
        default=None,
        metadata={
        'type': 'deprecated',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Issuer.Documents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Issuer of this document.
            '''

        })
    '''
    Issuer of this document.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of subject matter (e.g., Agreement, Work) this document represents.
            For status of the document itself, use 'docStatus' attribute.
            '''

        })
    '''
    Status of subject matter (e.g., Agreement, Work) this document represents.
    For status of the document itself, use 'docStatus' attribute.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedDocument',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this document.
            '''

        })
    '''
    All configuration events created for this document.
    '''

    RelatedDocument: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Document',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Agreement(Document):
    '''
    Formal agreement between two parties defining the terms and conditions
    for a set of services. The specifics of the services are, in turn, defined
    via one or more service agreements.
    '''

    pricingOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This attribute should be used to specify the kind of pricing when the value
            for the attribute Agreement.pricingKind is "other."
            '''

        })
    '''
    This attribute should be used to specify the kind of pricing when the
    value for the attribute Agreement.pricingKind is "other."
    '''

    signDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date this agreement was consummated among associated persons and/or organisations.
            '''

        })
    '''
    Date this agreement was consummated among associated persons and/or
    organisations.
    '''

    pricingKind: Optional[AgreementPricingKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of pricing for a contractual agreement where goods and services
            are exchanged for money.
            '''

        })
    '''
    The type of pricing for a contractual agreement where goods and services
    are exchanged for money.
    '''

    validityInterval: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time interval this agreement is valid (from going into effect
            to termination).
            '''

        })
    '''
    Date and time interval this agreement is valid (from going into effect
    to termination).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ChargeType(Document):
    '''
    Charge Type is the basic level configuration for settlement to process
    specific charges for invoicing purpose. Examples such as: Day Ahead Spinning
    Reserve Default Invoice Interest Charge, etc.
    '''

    chargeOrder: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sequence of calculation.
            '''

        })
    '''
    Sequence of calculation.
    '''

    chargeVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Charge version.
            '''

        })
    '''
    Charge version.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Charge type effective date.
            '''

        })
    '''
    Charge type effective date.
    '''

    factor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Adjustment factor.
            '''

        })
    '''
    Adjustment factor.
    '''

    frequencyType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Frequency of calculation.
            '''

        })
    '''
    Frequency of calculation.
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Charge type termination date.
            '''

        })
    '''
    Charge type termination date.
    '''

    totalInterval: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total number of intervals to indicate if charge is 5 minute (300), 10 minute
            (150) hourly (25) or daily or monthly (1).
            '''

        })
    '''
    Total number of intervals to indicate if charge is 5 minute (300),
    10 minute (150) hourly (25) or daily or monthly (1).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DefaultBid(Document):
    '''
    DefaultBid is a generic class to hold Default Energy Bid, Default Startup
    Bid, and Default Minimum Load Bid:
    Default Energy Bid
    A Default Energy Bid is a monotonically increasing staircase function consisting
    at maximum 10 economic bid segments, or 10 ($/MW, MW) pairs. There are
    three methods for determining the Default Energy Bid:
    <ul>
    <li>Cost Based: derived from the Heat Rate or Average Cost multiplied by
    the Gas Price Index plus 10%.</li>
    <li>LMP Based: a weighted average of LMPs in the preceding 90 days.</li>
    <li>Negotiated: an amount negotiated with the designated Independent Entity.</li>
    </ul>
    Default Startup Bid
    A Default Startup Bid (DSUB) shall be calculated for each RMR unit based
    on the Startup Cost stored in the Master File and the applicable GPI and
    EPI.
    Default Minimum Load Bid
    A Default Minimum Load Bid (DMLB) shall be calculated for each RMR unit
    based on the Minimum Load Cost stored in the Master File and the applicable
    GPI.
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DefaultBid',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Incident(Document):
    '''
    Description of a problem in the field that may be reported in a trouble
    ticket or come from another source. It may have to do with an outage.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Incident',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Location of this incident.
            '''

        })
    '''
    Location of this incident.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class InspectionDataSet(Document):
    '''
    Documents the result of one inspection, for a given attribute of an asset.
    '''

    AccordingToSchedules: list[ScheduledEventData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledEventData.InspectionDataSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Outage(Document):
    '''
    Document describing details of an active or planned outage in a part of
    the electrical network.
    A non-planned outage may be created upon:
    - a breaker trip,
    - a fault indicator status change,
    - a meter event indicating customer outage,
    - a reception of one or more customer trouble calls, or
    - an operator command, reflecting information obtained from the field crew.
    Outage restoration may be performed using a switching plan which complements
    the outage information with detailed switching activities, including the
    relationship to the crew and work.
    A planned outage may be created upon:
    - a request for service, maintenance or construction work in the field,
    or
    - an operator-defined outage for what-if/contingency network analysis.
    '''

    OutageIsolationEquipment: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.Outage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PlannedOutage(Outage):
    '''
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.PlannedOutage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnplannedOutage(Outage):
    '''
    Document describing the consequence of an unplanned outage in a part of
    the electrical network. For the purposes of this model, an unplanned outage
    refers to a state where energy is not delivered; such as, customers out
    of service, a street light is not served, etc.
    A unplanned outage may be created upon:
    - impacts the SAIDI calculation
    - a breaker trip,
    - a fault indicator status change,
    - a meter event indicating customer outage,
    - a reception of one or more customer trouble calls, or
    - an operator command, reflecting information obtained from the field crew.
    Outage restoration may be performed using a switching plan which complements
    the outage information with detailed switching activities, including the
    relationship to the crew and work.
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.UnplannedOutage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Skill(Document):
    '''
    Proficiency level of a craft, which is required to operate or maintain
    a particular type of asset and/or perform certain types of work.
    '''

    effectiveDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time the skill became effective.
            '''

        })
    '''
    Date and time the skill became effective.
    '''

    level: Optional[SkillLevelKind] = field(
        default=None,
        metadata={
        'type': 'enumeration deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Level of skill for a Craft.
            '''

        })
    '''
    Level of skill for a Craft.
    '''

    certificationPeriod: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Interval between the certification and its expiry.
            '''

        })
    '''
    Interval between the certification and its expiry.
    '''

    ErpPerson: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldPerson.Skills',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Specification(Document):
    '''
    Specification can be used for various purposes relative to an asset, a
    logical device (PowerSystemResource), location, etc. Examples include documents
    supplied by manufacturers such as asset installation instructions, asset
    maintenance instructions, etc.
    '''

    CoolingInfo: list[CoolingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CoolingInfo.Specification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SoundInfo: list[SoundInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SoundInfo.Specification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SurfaceTreatmentInfo: list[SurfaceTreatmentInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SurfaceTreatmentInfo.Specification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AssetProperites: list[UserAttribute] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UserAttribute.PropertySpecification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            UserAttributes used to specify further properties of the asset covered
            with this specification. Use 'name' to specify what kind of property it
            is, and 'value.value' attribute for the actual value.
            '''

        })
    '''
    UserAttributes used to specify further properties of the asset covered
    with this specification. Use 'name' to specify what kind of property
    it is, and 'value.value' attribute for the actual value.
    '''

    Ratings: list[UserAttribute] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UserAttribute.RatingSpecification',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            UserAttributes used to specify ratings of the asset covered by this specification.
            Ratings also can be used to set the initial value of operational measurement
            limits. Use 'name' to specify what kind of rating it is (e.g., voltage,
            current), and 'value' attribute for the actual value and unit information
            of the rating.
            '''

        })
    '''
    UserAttributes used to specify ratings of the asset covered by this
    specification. Ratings also can be used to set the initial value of
    operational measurement limits. Use 'name' to specify what kind of
    rating it is (e.g., voltage, current), and 'value' attribute for the
    actual value and unit information of the rating.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingOrder(Document):
    '''
    Transmits a switching plan to a crew in order for the plan to be executed.
    '''

    Location: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.SwitchingOrder',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TimeSchedule(Document):
    '''
    Description of anything that changes through time. Time schedule is used
    to perform a single-valued function of time. Use inherited 'type' attribute
    to give additional information on this schedule, such as: periodic (hourly,
    daily, weekly, monthly, etc.), day of the month, by date, calendar (specific
    times and dates).
    '''

    dayOfWeek: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The day of the week associated with a schedule.
            '''

        })
    '''
    The day of the week associated with a schedule.
    '''

    disabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if this schedule is deactivated (disabled).
            '''

        })
    '''
    True if this schedule is deactivated (disabled).
    '''

    recurrencePattern: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Interval at which the scheduled action repeats (e.g., first Monday of every
            month, last day of the month, etc.).
            '''

        })
    '''
    Interval at which the scheduled action repeats (e.g., first Monday
    of every month, last day of the month, etc.).
    '''

    scheduleDayOccurrence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    scheduleFrequency: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The defined interval or regularity at which a task, event, or process is
            planned to occur within a schedule.
            '''

        })
    '''
    The defined interval or regularity at which a task, event, or process
    is planned to occur within a schedule.
    '''

    scheduleMonth: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The month in which a schedule occurs.
            '''

        })
    '''
    The month in which a schedule occurs.
    '''

    scheduleMonthDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The day of the month associated with a schedule.
            '''

        })
    '''
    The day of the month associated with a schedule.
    '''

    scheduleWeekNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The week number associated with a schedule.
            '''

        })
    '''
    The week number associated with a schedule.
    '''

    scheduleYear: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The year associated with a schedule.
            '''

        })
    '''
    The year associated with a schedule.
    '''

    scheduleYearDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The day of the year associated with a schedule.
            '''

        })
    '''
    The day of the year associated with a schedule.
    '''

    offset: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The offset from midnight (i.e., 0 h, 0 min, 0 s) for the periodic time
            points to begin. For example, for an interval meter that is set up for
            five minute intervals ('recurrencePeriod'=300=5 min), setting 'offset'=120=2
            min would result in scheduled events to read the meter executing at 2 min,
            7 min, 12 min, 17 min, 22 min, 27 min, 32 min, 37 min, 42 min, 47 min,
            52 min, and 57 min past each hour.
            '''

        })
    '''
    The offset from midnight (i.e., 0 h, 0 min, 0 s) for the periodic time
    points to begin. For example, for an interval meter that is set up
    for five minute intervals ('recurrencePeriod'=300=5 min), setting 'offset'=120=2
    min would result in scheduled events to read the meter executing at
    2 min, 7 min, 12 min, 17 min, 22 min, 27 min, 32 min, 37 min, 42 min,
    47 min, 52 min, and 57 min past each hour.
    '''

    recurrencePeriod: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Duration between time points, from the beginning of one period to the beginning
            of the next period. Note that a device like a meter may have multiple interval
            periods (e.g., 1 min, 5 min, 15 min, 30 min, or 60 min).
            '''

        })
    '''
    Duration between time points, from the beginning of one period to the
    beginning of the next period. Note that a device like a meter may have
    multiple interval periods (e.g., 1 min, 5 min, 15 min, 30 min, or 60
    min).
    '''

    scheduleHour: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hour of the day associated with a schedule.
            '''

        })
    '''
    The hour of the day associated with a schedule.
    '''

    scheduleMinute: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minute(s) after the hour associated with a schedule.
            '''

        })
    '''
    The minute(s) after the hour associated with a schedule.
    '''

    scheduleInterval: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Schedule date and time interval.
            '''

        })
    '''
    Schedule date and time interval.
    '''

    TimePoints: list[TimePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TimePoint.TimeSchedule',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Sequence of time points belonging to this time schedule.
            '''

        })
    '''
    Sequence of time points belonging to this time schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TroubleOrder(Document):
    '''
    Trouble order sends an incident to a crew to initiate a response to an
    unplanned outage.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.TroubleOrder',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkRequest(Document):
    '''
    Document used to plan or initiate work
    '''

    ActivityRecord: list[ActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ActivityRecord.WorkRequest',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Record of activity on a work request.
            '''

        })
    '''
    Record of activity on a work request.
    '''

    WorkManager: list[WorkManager] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkManager.WorkRequest',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Work organization assigned to process the work request.
            '''

        })
    '''
    Work organization assigned to process the work request.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ElectronicAddress(IdentifiedObject):
    '''
    Electronic address information.
    '''

    email: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Primary email address.
            '''

        })
    '''
    Primary email address.
    '''

    email1: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Primary email address.
            '''

        })
    '''
    Primary email address.
    '''

    email2: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Alternate email address.
            '''

        })
    '''
    Alternate email address.
    '''

    ipv4: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Internet address using internet protocol version 4 format.
            '''

        })
    '''
    Internet address using internet protocol version 4 format.
    '''

    ipv6: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Internet address using internet protocol version 6 format.
            '''

        })
    '''
    Internet address using internet protocol version 6 format.
    '''

    lan: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Address on local area network.
            '''

        })
    '''
    Address on local area network.
    '''

    mac: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            MAC (Media Access Control) address.
            '''

        })
    '''
    MAC (Media Access Control) address.
    '''

    password: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Password needed to log in.
            '''

        })
    '''
    Password needed to log in.
    '''

    radio: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unique identifier assigned to a wireless communication device. For
            example, Bluetooth Address, RFID Tag Address, Zigbee Network Address.
            '''

        })
    '''
    The unique identifier assigned to a wireless communication device.
    For example, Bluetooth Address, RFID Tag Address, Zigbee Network Address.
    '''

    text: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unique identifier assigned to a device capable of sending SMS messages.
            '''

        })
    '''
    The unique identifier assigned to a device capable of sending SMS messages.
    '''

    userID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            User ID needed to log in, which can be for an individual person, an organisation,
            a location, etc.
            '''

        })
    '''
    User ID needed to log in, which can be for an individual person, an
    organisation, a location, etc.
    '''

    web: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            World wide web address.
            '''

        })
    '''
    World wide web address.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyArea(IdentifiedObject):
    '''
    Describes an area having energy production or consumption. Specializations
    are intended to support the load allocation function as typically required
    in energy management systems or planning studies to allocate hypothesized
    load levels to individual load points for power flow analysis. Often the
    energy area can be linked to both measured and forecast load levels.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.EnergyArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The control area specification that is used for the load forecast.
            '''

        })
    '''
    The control area specification that is used for the load forecast.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.EnergyArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The control area specification that is used for the load forecast.
            '''

        })
    '''
    The control area specification that is used for the load forecast.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class LoadArea(EnergyArea):
    '''
    The class is the root or first level in a hierarchical structure for grouping
    of loads for the purpose of load flow load scaling.
    '''

    SubLoadAreas: list[SubLoadArea] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubLoadArea.LoadArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The SubLoadAreas in the LoadArea.
            '''

        })
    '''
    The SubLoadAreas in the LoadArea.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class SubLoadArea(EnergyArea):
    '''
    The class is the second level in a hierarchical structure for grouping
    of loads for the purpose of load flow load scaling.
    '''

    LoadArea: Optional[LoadArea] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadArea.SubLoadAreas',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The LoadArea where the SubLoadArea belongs.
            '''

        })
    '''
    The LoadArea where the SubLoadArea belongs.
    '''

    LoadGroups: list[LoadGroup] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadGroup.SubLoadArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Loadgroups in the SubLoadArea.
            '''

        })
    '''
    The Loadgroups in the SubLoadArea.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergySchedulingType(IdentifiedObject):
    '''
    Used to define the type of generation for scheduling purposes.
    '''

    EnergySource: list[EnergySource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergySource.EnergySchedulingType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Energy Source of a particular Energy Scheduling Type.
            '''

        })
    '''
    Energy Source of a particular Energy Scheduling Type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalMonitoringStation(IdentifiedObject):
    '''
    An environmental monitoring station, examples of which could be a weather
    station or a seismic monitoring station.
    '''

    dstObserved: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Whether this station is currently reporting using daylight saving time.
            Intended to aid a utility Weather Service in interpreting information coming
            from a station and has no direct relationship to the manner in which time
            is expressed in EnvironmentalValueSet.
            '''

        })
    '''
    Whether this station is currently reporting using daylight saving time.
    Intended to aid a utility Weather Service in interpreting information
    coming from a station and has no direct relationship to the manner
    in which time is expressed in EnvironmentalValueSet.
    '''

    isNetworked: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that station is part of a network of stations used to monitor
            weather phenomena covering a large geographical area.
            '''

        })
    '''
    Indication that station is part of a network of stations used to monitor
    weather phenomena covering a large geographical area.
    '''

    timeZoneOffset: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time offset from UTC (a.k.a. GMT) configured in the station "clock",
            not (necessarily) the time zone in which the station is physically located.
            This attribute exists to support management of utility monitoring stations
            and has no direct relationship to the manner in which time is expressed
            in EnvironmentalValueSet.
            '''

        })
    '''
    The time offset from UTC (a.k.a. GMT) configured in the station "clock",
    not (necessarily) the time zone in which the station is physically
    located.
    This attribute exists to support management of utility monitoring stations
    and has no direct relationship to the manner in which time is expressed
    in EnvironmentalValueSet.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.EnvironmentalMonitoringStation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Location of this monitoring station.
            '''

        })
    '''
    Location of this monitoring station.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ErpCompetency(IdentifiedObject):
    '''
    Information that describes aptitudes of a utility employee. Unlike Skills
    that an ErpPerson must be certified to perform before undertaking certain
    type of assignments (to be able to perfrom a Craft), ErpCompetency has
    more to do with typical Human Resource (HR) matters such as schooling,
    training, etc.
    '''

    ErpPersons: list[OldPerson] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldPerson.ErpCompetency',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ErpPersonnel(IdentifiedObject):
    '''
    Information that applies to the basic data about a utility person, used
    by ERP applications to transfer Personnel data for a worker.
    '''

    ErpPersons: list[OldPerson] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldPerson.ErpPersonnel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Part3Ext)
@dataclass(repr=False)
class FaultCauseType(IdentifiedObject):
    '''
    Type of cause of the fault.
    '''

    ConfigurationEvent: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Part 3 Ext',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.FaultCauseType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Faults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FieldDispatchHistory(IdentifiedObject):
    '''
    The history of field dispatch statuses for this work.
    '''

    Crew: Optional[Crew] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Crew.FieldDispatchHistory',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.FieldDispatchHistory',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.FieldDispatchHistory',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FieldDispatchStep: list[FieldDispatchStep] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FieldDispatchStep.FieldDispatchHistory',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FossilFuel(IdentifiedObject):
    '''
    The fossil fuel consumed by the non-nuclear thermal generating unit. For
    example, coal, oil, gas, etc. These are the specific fuels that the generating
    unit can consume.
    '''

    fuelHeatContent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The amount of heat per weight (or volume) of the given type of fuel.
            '''

        })
    '''
    The amount of heat per weight (or volume) of the given type of fuel.
    '''

    fuelCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The cost in terms of heat value for the given type of fuel.
            '''

        })
    '''
    The cost in terms of heat value for the given type of fuel.
    '''

    fuelDispatchCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The cost of fuel used for economic dispatching which includes: fuel cost,
            transportation cost, and incremental maintenance cost.
            '''

        })
    '''
    The cost of fuel used for economic dispatching which includes: fuel
    cost, transportation cost, and incremental maintenance cost.
    '''

    fuelEffFactor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The efficiency factor for the fuel (per unit) in terms of the effective
            energy absorbed.
            '''

        })
    '''
    The efficiency factor for the fuel (per unit) in terms of the effective
    energy absorbed.
    '''

    fuelHandlingCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Handling and processing cost associated with this fuel.
            '''

        })
    '''
    Handling and processing cost associated with this fuel.
    '''

    fuelMixture: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Relative amount of the given type of fuel, when multiple fuels are being
            consumed.
            '''

        })
    '''
    Relative amount of the given type of fuel, when multiple fuels are
    being consumed.
    '''

    fuelSulfur: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The fuel's fraction of pollution credit per unit of heat content.
            '''

        })
    '''
    The fuel's fraction of pollution credit per unit of heat content.
    '''

    highBreakpointP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power output level of the unit at which the given type of fuel
            is switched on. This fuel (e.g., oil) is sometimes used to supplement the
            base fuel (e.g., coal) at high active power output levels.
            '''

        })
    '''
    The active power output level of the unit at which the given type of
    fuel is switched on. This fuel (e.g., oil) is sometimes used to supplement
    the base fuel (e.g., coal) at high active power output levels.
    '''

    lowBreakpointP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power output level of the unit at which the given type of fuel
            is switched off. This fuel (e.g., oil) is sometimes used to stabilize the
            base fuel (e.g., coal) at low active power output levels.
            '''

        })
    '''
    The active power output level of the unit at which the given type of
    fuel is switched off. This fuel (e.g., oil) is sometimes used to stabilize
    the base fuel (e.g., coal) at low active power output levels.
    '''

    fossilFuelType: Optional[FuelType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of fossil fuel, such as coal, oil, or gas.
            '''

        })
    '''
    The type of fossil fuel, such as coal, oil, or gas.
    '''

    FuelStorage: Optional[FuelStorage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelStorage.FossilFuel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fuel storage that store fossil fuels.
            '''

        })
    '''
    Fuel storage that store fossil fuels.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.FossilFuels',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have one or more fossil fuels.
            '''

        })
    '''
    A thermal generating unit may have one or more fossil fuels.
    '''

    FuelAllocationSchedules: list[FuelAllocationSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FuelAllocationSchedule.FossilFuel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A fuel allocation schedule shall have a fossil fuel.
            '''

        })
    '''
    A fuel allocation schedule shall have a fossil fuel.
    '''

    PowerElectronicsThermalUnit: list[PowerElectronicsThermalUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerElectronicsThermalUnit.FossilFuels',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class GeographicalRegion(IdentifiedObject):
    '''
    A geographical region of a power system network model.
    '''

    Regions: list[SubGeographicalRegion] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubGeographicalRegion.Region',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All sub-geographical regions within this geographical region.
            '''

        })
    '''
    All sub-geographical regions within this geographical region.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Geometry(IdentifiedObject):
    '''
    Geo-spatial representation of a physical location. A location may be represented
    as a Point, Line, Polygon, or Circle.
    '''

    spatialFeatureType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reference to the type of GIS spatial feature represented by this geometry.
            '''

        })
    '''
    A reference to the type of GIS spatial feature represented by this
    geometry.
    '''

    CoordinateSystem: Optional[CoordinateSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CoordinateSystem.Geometry',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The coordinate system used for a given geometry.
            '''

        })
    '''
    The coordinate system used for a given geometry.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Geometry',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The location for which a geometry is specified.
            '''

        })
    '''
    The location for which a geometry is specified.
    '''

    GeometricElement: list[GeometricElement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeometricElement.Geometry',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeometricElement: list[GeometricElement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeometricElement.Geometry',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HVDCInterconnectionDynamics(IdentifiedObject):
    '''
    HVDC interconnection function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    DCEquipmentContainer: list[DCEquipmentContainer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCEquipmentContainer.HVDCInterconnectionDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC equipment container to which HVDC interconnection dynamics model applies.
            '''

        })
    '''
    DC equipment container to which HVDC interconnection dynamics model
    applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Hazard(IdentifiedObject):
    '''
    An object or a condition that is a danger for causing loss or perils to
    an asset and/or people.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of this hazard.
            '''

        })
    '''
    Type of this hazard.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of this hazard.
            '''

        })
    '''
    Status of this hazard.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IOPoint(IdentifiedObject):
    '''
    The class describe a measurement or control value. The purpose is to enable
    having attributes and associations common for measurement and control.
    '''

    IOPointSource: Optional[IOPointSource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IOPointSource.IOPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Local merasurement value source for an ICCP point.
            '''

        })
    '''
    Local merasurement value source for an ICCP point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Control(IOPoint):
    '''
    Control is used for supervisory/device control. It represents control outputs
    that are used to change the state in a process, e.g. close or open breaker,
    a set point value or a raise lower command.
    '''

    controlType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the type of Control. For example, this specifies if the Control
            represents BreakerOpen, BreakerClose, GeneratorVoltageSetPoint, GeneratorRaise,
            GeneratorLower, etc.
            '''

        })
    '''
    Specifies the type of Control. For example, this specifies if the Control
    represents BreakerOpen, BreakerClose, GeneratorVoltageSetPoint, GeneratorRaise,
    GeneratorLower, etc.
    '''

    operationInProgress: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates that a client is currently sending control commands that has
            not completed.
            '''

        })
    '''
    Indicates that a client is currently sending control commands that
    has not completed.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The last time a control output was sent.
            '''

        })
    '''
    The last time a control output was sent.
    '''

    unitMultiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit multiplier of the controlled quantity.
            '''

        })
    '''
    The unit multiplier of the controlled quantity.
    '''

    unitSymbol: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure of the controlled quantity.
            '''

        })
    '''
    The unit of measure of the controlled quantity.
    '''

    ControlAction: Optional[ControlAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlAction.Control',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.Controls',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Regulating device governed by this control output.
            '''

        })
    '''
    Regulating device governed by this control output.
    '''

    RemoteControl: Optional[RemoteControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteControl.Control',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The remote point controlling the physical actuator.
            '''

        })
    '''
    The remote point controlling the physical actuator.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AccumulatorReset(Control):
    '''
    This command resets the counter value to zero.
    '''

    AccumulatorValue: Optional[AccumulatorValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AccumulatorValue.AccumulatorReset',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The accumulator value that is reset by the command.
            '''

        })
    '''
    The accumulator value that is reset by the command.
    '''

    AccumulatorValue: Optional[AccumulatorValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AccumulatorValue.AccumulatorReset',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The accumulator value that is reset by the command.
            '''

        })
    '''
    The accumulator value that is reset by the command.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AnalogControl(Control):
    '''
    An analog control used for supervisory control.
    '''

    maxValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range maximum for any of the Control.value. Used for scaling,
            e.g. in bar graphs.
            '''

        })
    '''
    Normal value range maximum for any of the Control.value. Used for scaling,
    e.g. in bar graphs.
    '''

    minValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range minimum for any of the Control.value. Used for scaling,
            e.g. in bar graphs.
            '''

        })
    '''
    Normal value range minimum for any of the Control.value. Used for scaling,
    e.g. in bar graphs.
    '''

    AnalogValue: Optional[AnalogValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AnalogControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    AnalogValue: Optional[AnalogValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AnalogControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RaiseLowerCommand(AnalogControl):
    '''
    An analog control that increases or decreases a set point value with pulses.
    Unless otherwise specified, one pulse moves the set point by one.
    '''

    ValueAliasSet: Optional[ValueAliasSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ValueAliasSet.RaiseLowerCommands',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The ValueAliasSet used for translation of a Control value to a name.
            '''

        })
    '''
    The ValueAliasSet used for translation of a Control value to a name.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SetPoint(AnalogControl):
    '''
    An analog control that issues a set point value.
    '''

    normalValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value for Control.value e.g. used for percentage scaling.
            '''

        })
    '''
    Normal value for Control.value e.g. used for percentage scaling.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value representing the actuator output.
            '''

        })
    '''
    The value representing the actuator output.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Command(Control):
    '''
    A Command is a discrete control used for supervisory control.
    '''

    normalValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value for Control.value e.g. used for percentage scaling.
            '''

        })
    '''
    Normal value for Control.value e.g. used for percentage scaling.
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value representing the actuator output.
            '''

        })
    '''
    The value representing the actuator output.
    '''

    DiscreteValue: Optional[DiscreteValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscreteValue.Command',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    ValueAliasSet: Optional[ValueAliasSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ValueAliasSet.Commands',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The ValueAliasSet used for translation of a Control value to a name.
            '''

        })
    '''
    The ValueAliasSet used for translation of a Control value to a name.
    '''

    DiscreteValue: Optional[DiscreteValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscreteValue.Command',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class MeasurementValue(IOPoint):
    '''
    The current state for a measurement. A state value is an instance of a
    measurement from a specific source. Measurements can be associated with
    many state values, each representing a different source for the measurement.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time when the value was last updated.
            '''

        })
    '''
    The time when the value was last updated.
    '''

    sensorAccuracy: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The limit, expressed as a percentage of the sensor maximum, that errors
            will not exceed when the sensor is used under reference conditions.
            '''

        })
    '''
    The limit, expressed as a percentage of the sensor maximum, that errors
    will not exceed when the sensor is used under reference conditions.
    '''

    CalculationMethodHierarchy: Optional[CalculationMethodHierarchy] = field(
        default=None,
        metadata={
        'type': 'harmonization',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CalculationMethodHierarchy.MeasurementValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPerson: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldPerson.MeasurementValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeasurementValueQuality: Optional[MeasurementValueQuality] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueQuality.MeasurementValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A MeasurementValue has a MeasurementValueQuality associated with it.
            '''

        })
    '''
    A MeasurementValue has a MeasurementValueQuality associated with it.
    '''

    MeasurementValueSource: Optional[MeasurementValueSource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueSource.MeasurementValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reference to the type of source that updates the MeasurementValue, e.g.
            SCADA, CCLink, manual, etc. User conventions for the names of sources are
            contained in the introduction to IEC 61970-301.
            '''

        })
    '''
    A reference to the type of source that updates the MeasurementValue,
    e.g. SCADA, CCLink, manual, etc. User conventions for the names of
    sources are contained in the introduction to IEC 61970-301.
    '''

    RemoteSource: Optional[RemoteSource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteSource.MeasurementValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Link to the physical telemetered point associated with this measurement.
            '''

        })
    '''
    Link to the physical telemetered point associated with this measurement.
    '''

    MeasurementValueQuality: Optional[MeasurementValueQuality] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueQuality.MeasurementValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A MeasurementValue has a MeasurementValueQuality associated with it.
            '''

        })
    '''
    A MeasurementValue has a MeasurementValueQuality associated with it.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AccumulatorValue(MeasurementValue):
    '''
    AccumulatorValue represents an accumulated (counted) MeasurementValue.
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise. The value is positive.
            '''

        })
    '''
    The value to supervise. The value is positive.
    '''

    Accumulator: Optional[Accumulator] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Accumulator.AccumulatorValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement to which this value is connected.
            '''

        })
    '''
    Measurement to which this value is connected.
    '''

    AccumulatorReset: Optional[AccumulatorReset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AccumulatorReset.AccumulatorValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The command that resets the accumulator value.
            '''

        })
    '''
    The command that resets the accumulator value.
    '''

    AccumulatorReset: Optional[AccumulatorReset] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AccumulatorReset.AccumulatorValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The command that resets the accumulator value.
            '''

        })
    '''
    The command that resets the accumulator value.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AnalogValue(MeasurementValue):
    '''
    AnalogValue represents an analog MeasurementValue.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise.
            '''

        })
    '''
    The value to supervise.
    '''

    Analog: Optional[Analog] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Analog.AnalogValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement to which this value is connected.
            '''

        })
    '''
    Measurement to which this value is connected.
    '''

    AnalogControl: Optional[AnalogControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogControl.AnalogValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    AltGeneratingUnit: list[AltGeneratingUnitMeas] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AltGeneratingUnitMeas.AnalogValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The alternate generating unit for which this measurement value applies.
            '''

        })
    '''
    The alternate generating unit for which this measurement value applies.
    '''

    AltTieMeas: list[AltTieMeas] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AltTieMeas.AnalogValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The usage of the measurement within the control area specification.
            '''

        })
    '''
    The usage of the measurement within the control area specification.
    '''

    AnalogControl: Optional[AnalogControl] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogControl.AnalogValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscreteValue(MeasurementValue):
    '''
    DiscreteValue represents a discrete MeasurementValue.
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise.
            '''

        })
    '''
    The value to supervise.
    '''

    Command: Optional[Command] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Command.DiscreteValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    Discrete: Optional[Discrete] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Discrete.DiscreteValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement to which this value is connected.
            '''

        })
    '''
    Measurement to which this value is connected.
    '''

    Command: Optional[Command] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Command.DiscreteValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StringMeasurementValue(MeasurementValue):
    '''
    StringMeasurementValue represents a measurement value of type string.
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise.
            '''

        })
    '''
    The value to supervise.
    '''

    StringMeasurement: Optional[StringMeasurement] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StringMeasurement.StringMeasurementValues',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement to which this value is connected.
            '''

        })
    '''
    Measurement to which this value is connected.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ImpedanceTapChangerTable(IdentifiedObject):
    '''
    Describes a curve for how the power transformer end impedance varies with
    the tap step.
    '''

    ImpedanceTapChangerTablePoint: list[ImpedanceTapChangerTablePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ImpedanceTapChangerTablePoint.ImpedanceTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The points of this table.
            '''

        })
    '''
    The points of this table.
    '''

    ImpedanceTapChangerTabular: list[ImpedanceTapChangerTabular] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ImpedanceTapChangerTabular.ImpedanceTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The impedance tap changer to which this impedance tap table applies.
            '''

        })
    '''
    The impedance tap changer to which this impedance tap table applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InternalLocation(IdentifiedObject):
    '''
    Description of location internal to a building.
    '''

    buildingName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of building where location is.
            '''

        })
    '''
    Name of building where location is.
    '''

    buildingNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of building where location is.
            '''

        })
    '''
    Number of building where location is.
    '''

    floor: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Floor of location.
            '''

        })
    '''
    Floor of location.
    '''

    roomNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Room number of location.
            '''

        })
    '''
    Room number of location.
    '''

    suiteNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.InternalLocation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntraphaseSpacing(IdentifiedObject):
    '''
    Wire spacing data that associates multiple wire positions with the line
    segment, and allows to calculate line segment impedances. Number of phases
    can be derived from the number of associated wire positions whose phase
    is not neutral.
    '''

    isCable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, this spacing data describes a cable.
            '''

        })
    '''
    If true, this spacing data describes a cable.
    '''

    wireCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of wire sub-conductors in the symmetrical bundle (typically between
            1 and 4).
            '''

        })
    '''
    Number of wire sub-conductors in the symmetrical bundle (typically
    between 1 and 4).
    '''

    wireSpacing: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance between wire sub-conductors in a symmetrical bundle.
            '''

        })
    '''
    Distance between wire sub-conductors in a symmetrical bundle.
    '''

    usage: Optional[WireUsageKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Usage of the associated wires.
            '''

        })
    '''
    Usage of the associated wires.
    '''

    DuctBank: Optional[DuctBank] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DuctBank.WireSpacingInfos',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ACLineSegmentPhase: list[ACLineSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegmentPhase.IntraphaseSpacing',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Limit(IdentifiedObject):
    '''
    Specifies one limit value for a Measurement. A Measurement typically has
    several limits that are kept together by the LimitSet class. The actual
    meaning and use of a Limit instance (i.e., if it is an alarm or warning
    limit or if it is a high or low limit) is not captured in the Limit class.
    However the name of a Limit instance may indicate both meaning and use.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class AccumulatorLimit(Limit):
    '''
    Limit values for Accumulator measurements.
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise against. The value is positive.
            '''

        })
    '''
    The value to supervise against. The value is positive.
    '''

    LimitSet: Optional[AccumulatorLimitSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AccumulatorLimitSet.Limits',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The set of limits.
            '''

        })
    '''
    The set of limits.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AnalogLimit(Limit):
    '''
    Limit values for Analog measurements.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise against.
            '''

        })
    '''
    The value to supervise against.
    '''

    LimitSet: Optional[AnalogLimitSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnalogLimitSet.Limits',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The set of limits.
            '''

        })
    '''
    The set of limits.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LimitSet(IdentifiedObject):
    '''
    Specifies a set of Limits that are associated with a Measurement. A Measurement
    may have several LimitSets corresponding to seasonal or other changing
    conditions. The condition is captured in the name and description attributes.
    The same LimitSet may be used for several Measurements. In particular percentage
    limits are used this way.
    '''

    isPercentageLimits: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tells if the limit values are in percentage of normalValue or the specified
            Unit for Measurements and Controls.
            '''

        })
    '''
    Tells if the limit values are in percentage of normalValue or the specified
    Unit for Measurements and Controls.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class AccumulatorLimitSet(LimitSet):
    '''
    An AccumulatorLimitSet specifies a set of Limits that are associated with
    an Accumulator measurement.
    '''

    Limits: list[AccumulatorLimit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AccumulatorLimit.LimitSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The limit values used for supervision of Measurements.
            '''

        })
    '''
    The limit values used for supervision of Measurements.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class AnalogLimitSet(LimitSet):
    '''
    An AnalogLimitSet specifies a set of Limits that are associated with an
    Analog measurement.
    '''

    Limits: list[AnalogLimit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalogLimit.LimitSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The limit values used for supervision of Measurements.
            '''

        })
    '''
    The limit values used for supervision of Measurements.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LineSegmentCoupling(IdentifiedObject):
    '''
    Describes the relationship of a line in a coupled group to the reference
    line in the group. (Reference line has a coupledLineNumber = 1.)
    '''

    coupledLineNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sequence number of coupled line. Value of 1 indicates that line is the
            reference line. Valid value range is from 1 to number of coupled lines
            in the group.
            '''

        })
    '''
    Sequence number of coupled line. Value of 1 indicates that line is
    the reference line. Valid value range is from 1 to number of coupled
    lines in the group.
    '''

    reverseFlow: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication of whether the reference end of a line in a coupled group is
            the same as the reference end of the reference line.
            Set reverseFlow to True for any lines that do not have their Terminal with
            sequenceNumber = 1 at the same end as the reference line.
            Set reverseFlow to False for the reference line and for any lines that
            have their Terminal with sequenceNumber = 1 at the same end as the reference
            line.
            The sign of the coupled voltage drop of an ACLineSegment reverses when
            two coupled lines have their Terminals with sequenceNumber = 1 at opposite
            ends.
            '''

        })
    '''
    Indication of whether the reference end of a line in a coupled group
    is the same as the reference end of the reference line.
    Set reverseFlow to True for any lines that do not have their Terminal
    with sequenceNumber = 1 at the same end as the reference line.
    Set reverseFlow to False for the reference line and for any lines that
    have their Terminal with sequenceNumber = 1 at the same end as the
    reference line.
    The sign of the coupled voltage drop of an ACLineSegment reverses when
    two coupled lines have their Terminals with sequenceNumber = 1 at opposite
    ends.
    '''

    xOffset: Optional[ float | Displacement ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The horizontal offset between the horizontal reference point of a coupled
            line and the horizontal reference point of the reference line in the group.
            The horizontal reference point for a line is established by the line's
            WireAssembly. It is the zero x position on which the xCoord values of WirePositions
            in the WireAssembly are based.
            '''

        })
    '''
    The horizontal offset between the horizontal reference point of a coupled
    line and the horizontal reference point of the reference line in the
    group.
    The horizontal reference point for a line is established by the line's
    WireAssembly. It is the zero x position on which the xCoord values
    of WirePositions in the WireAssembly are based.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineSegmentCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The line whose relationship in a coupled group is described.
            '''

        })
    '''
    The line whose relationship in a coupled group is described.
    '''

    CoupledLineSegmentGroup: Optional[CoupledLineSegmentGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CoupledLineSegmentGroup.LineSegmentCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The coupled group of lines with which this coupled line has relationships.
            '''

        })
    '''
    The coupled group of lines with which this coupled line has relationships.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineSegmentCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The line whose relationship in a coupled group is described.
            '''

        })
    '''
    The line whose relationship in a coupled group is described.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadDynamics(IdentifiedObject):
    '''
    Load whose behaviour is described by reference to a standard model <font
    color="#0f0f0f">or by definition of a user-defined model.</font>
    A standard feature of dynamic load behaviour modelling is the ability to
    associate the same behaviour to multiple energy consumers by means of a
    single load definition. The load model is always applied to individual
    bus loads (energy consumers).
    '''

    EnergyConsumer: list[EnergyConsumer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyConsumer.LoadDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Energy consumer to which this dynamics load model applies.
            '''

        })
    '''
    Energy consumer to which this dynamics load model applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadGroup(IdentifiedObject):
    '''
    The class is the third level in a hierarchical structure for grouping of
    loads for the purpose of load flow load scaling.
    '''

    SubLoadArea: Optional[SubLoadArea] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubLoadArea.LoadGroups',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SubLoadArea where the Loadgroup belongs.
            '''

        })
    '''
    The SubLoadArea where the Loadgroup belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ConformLoadGroup(LoadGroup):
    '''
    A group of loads conforming to an allocation pattern.
    '''

    EnergyConsumers: list[ConformLoad] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConformLoad.LoadGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Conform loads assigned to this ConformLoadGroup.
            '''

        })
    '''
    Conform loads assigned to this ConformLoadGroup.
    '''

    ConformLoadSchedules: list[ConformLoadSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConformLoadSchedule.ConformLoadGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The ConformLoadSchedules in the ConformLoadGroup.
            '''

        })
    '''
    The ConformLoadSchedules in the ConformLoadGroup.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class NonConformLoadGroup(LoadGroup):
    '''
    Loads that do not follow a daily and seasonal load variation pattern.
    '''

    EnergyConsumers: list[NonConformLoad] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NonConformLoad.LoadGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Conform loads assigned to this ConformLoadGroup.
            '''

        })
    '''
    Conform loads assigned to this ConformLoadGroup.
    '''

    NonConformLoadSchedules: list[NonConformLoadSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NonConformLoadSchedule.NonConformLoadGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The NonConformLoadSchedules in the NonConformLoadGroup.
            '''

        })
    '''
    The NonConformLoadSchedules in the NonConformLoadGroup.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadResponseCharacteristic(IdentifiedObject):
    '''
    Models the characteristic response of the load demand due to changes in
    system conditions such as voltage and frequency. It is not related to demand
    response.
    If LoadResponseCharacteristic.exponentModel is True, the exponential voltage
    or frequency dependent models are specified and used as to calculate active
    and reactive power components of the load model.
    The equations to calculate active and reactive power components of the
    load model are internal to the power flow calculation, hence they use different
    quantities depending on the use case of the data exchange.
    The equations for exponential voltage dependent load model injected power
    are:
    pInjection= Pnominal* (Voltage/cim:BaseVoltage.nominalVoltage) ** cim:LoadResponseCharacteristic.pVoltageExponent
    qInjection= Qnominal* (Voltage/cim:BaseVoltage.nominalVoltage) ** cim:LoadResponseCharacteristic.qVoltageExponent
    pInjection = Pnominal* (Frequency/(Nominal frequency))**cim:LoadResponseCharacteristic.pFrequencyExponent
    qInjection = Qnominal* (Frequency/(Nominal frequency))**cim:LoadResponseCharacteristic.qFrequencyExponent
    Note that both voltage and frequency exponents could be used together so
    the full equation would be:
    pInjection = Pnominal* (Voltage/(cim:BaseVoltage.nominalVoltage))**cim:LoadResponseCharacteristic.pVoltageExponent
    * (Frequency/(base frequency))**cim:LoadResponseCharacteristic.pFrequencyExponent
    qInjection = Qnominal* (Voltage/(cim:BaseVoltage.nominalVoltage))**cim:LoadResponseCharacteristic.qVoltageExponent
    * (Frequency/(base frequency))**cim:LoadResponseCharacteristic.qFrequencyExponent
    The voltage and frequency expressed in the equation are values obtained
    from solved power flow. Base voltage and base frequency are those derived
    from the connectivity of the static network model.
    Where:
    1) * means "multiply" and ** is "raised to the power of";
    2) Pnominal and Qnominal represent the active power and reactive power
    at nominal voltage as any load described by the voltage exponential model
    shall be given at nominal voltage. This means that EnergyConsumer.p and
    EnergyConsumer.q are at nominal voltage.
    3) After power flow is solved:
    -pInjection and qInjection correspond to SvPowerflow.p and SvPowerflow.q
    respectively.
    - Voltage corresponds to SvVoltage.v at the TopologicalNode where the load
    is connected.
    '''

    exponentModel: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates the exponential voltage dependency model is to be used. If false,
            the coefficient model is to be used.
            The exponential voltage dependency model consist of the attributes:
            - pVoltageExponent
            - qVoltageExponent
            - pFrequencyExponent
            - qFrequencyExponent.
            The coefficient model consist of the attributes:
            - pConstantImpedance
            - pConstantCurrent
            - pConstantPower
            - qConstantImpedance
            - qConstantCurrent
            - qConstantPower.
            The sum of pConstantImpedance, pConstantCurrent and pConstantPower shall
            equal 1.
            The sum of qConstantImpedance, qConstantCurrent and qConstantPower shall
            equal 1.
            '''

        })
    '''
    Indicates the exponential voltage dependency model is to be used. If
    false, the coefficient model is to be used.
    The exponential voltage dependency model consist of the attributes:
    - pVoltageExponent
    - qVoltageExponent
    - pFrequencyExponent
    - qFrequencyExponent.
    The coefficient model consist of the attributes:
    - pConstantImpedance
    - pConstantCurrent
    - pConstantPower
    - qConstantImpedance
    - qConstantCurrent
    - qConstantPower.
    The sum of pConstantImpedance, pConstantCurrent and pConstantPower
    shall equal 1.
    The sum of qConstantImpedance, qConstantCurrent and qConstantPower
    shall equal 1.
    '''

    pConstantCurrent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of active power load modelled as constant current.
            '''

        })
    '''
    Portion of active power load modelled as constant current.
    '''

    pConstantImpedance: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of active power load modelled as constant impedance.
            '''

        })
    '''
    Portion of active power load modelled as constant impedance.
    '''

    pConstantPower: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of active power load modelled as constant power.
            '''

        })
    '''
    Portion of active power load modelled as constant power.
    '''

    pFrequencyExponent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exponent of per unit frequency effecting active power.
            '''

        })
    '''
    Exponent of per unit frequency effecting active power.
    '''

    pVoltageExponent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exponent of per unit voltage effecting real power.
            '''

        })
    '''
    Exponent of per unit voltage effecting real power.
    '''

    qConstantCurrent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of reactive power load modelled as constant current.
            '''

        })
    '''
    Portion of reactive power load modelled as constant current.
    '''

    qConstantImpedance: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of reactive power load modelled as constant impedance.
            '''

        })
    '''
    Portion of reactive power load modelled as constant impedance.
    '''

    qConstantPower: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Portion of reactive power load modelled as constant power.
            '''

        })
    '''
    Portion of reactive power load modelled as constant power.
    '''

    qFrequencyExponent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exponent of per unit frequency effecting reactive power.
            '''

        })
    '''
    Exponent of per unit frequency effecting reactive power.
    '''

    qVoltageExponent: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exponent of per unit voltage effecting reactive power.
            '''

        })
    '''
    Exponent of per unit voltage effecting reactive power.
    '''

    EnergyConsumer: list[EnergyConsumer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyConsumer.LoadResponse',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The set of loads that have the response characteristics.
            '''

        })
    '''
    The set of loads that have the response characteristics.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Location(IdentifiedObject):
    '''
    The place, scene, or point of something where someone or something has
    been, is, and/or will be at a given moment in time. It can be defined with
    one or more position points (coordinates) in a given coordinate system.
    '''

    direction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Direction that allows field crews to quickly find a given
            asset. For a given location, such as a street address, this is the relative
            direction in which to find the asset. For example, a streetlight may be
            located at the 'NW' (northwest) corner of the customer's site, or a usage
            point may be located on the second floor of an apartment building.
            '''

        })
    '''
    (if applicable) Direction that allows field crews to quickly find a
    given asset. For a given location, such as a street address, this is
    the relative direction in which to find the asset. For example, a streetlight
    may be located at the 'NW' (northwest) corner of the customer's site,
    or a usage point may be located on the second floor of an apartment
    building.
    '''

    geoInfoReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Reference to geographical information source, often external
            to the utility.
            '''

        })
    '''
    (if applicable) Reference to geographical information source, often
    external to the utility.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's corporate standards and practices, relative
            to the location itself (e.g., geographical, functional accounting, etc.,
            not a given property that happens to exist at that location).
            '''

        })
    '''
    Classification by utility's corporate standards and practices, relative
    to the location itself (e.g., geographical, functional accounting,
    etc., not a given property that happens to exist at that location).
    '''

    Cadastre: Optional[Cadastre] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cadastre.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Cadastre encompassing a location.
            '''

        })
    '''
    Cadastre encompassing a location.
    '''

    CoordinateSystem: Optional[CoordinateSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CoordinateSystem.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Coordinate system used to describe position points of this location.
            '''

        })
    '''
    Coordinate system used to describe position points of this location.
    '''

    electronicAddress: Optional[ElectronicAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Electronic address.
            '''

        })
    '''
    Electronic address.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Incident at this location.
            '''

        })
    '''
    Incident at this location.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.SubLocation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocationAccess: Optional[LocationAccess] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LocationAccess.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    mainAddress: Optional[StreetAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Main address of the location.
            '''

        })
    '''
    Main address of the location.
    '''

    phone1: Optional[TelephoneNumber] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Phone number.
            '''

        })
    '''
    Phone number.
    '''

    phone2: Optional[TelephoneNumber] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Additional phone number.
            '''

        })
    '''
    Additional phone number.
    '''

    secondaryAddress: Optional[StreetAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Secondary address of the location. For example, PO Box address may have
            different ZIP code than that in the 'mainAddress'.
            '''

        })
    '''
    Secondary address of the location. For example, PO Box address may
    have different ZIP code than that in the 'mainAddress'.
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Status of this location.
            '''

        })
    '''
    Status of this location.
    '''

    SwitchingOrder: Optional[SwitchingOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingOrder.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Building: list[Building] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Building.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedLocation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this location.
            '''

        })
    '''
    All configuration events created for this location.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnvironmentalMonitoringStation: list[EnvironmentalMonitoringStation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalMonitoringStation.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Monitoring station located at this location.
            '''

        })
    '''
    Monitoring station located at this location.
    '''

    Geometry: list[Geometry] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Geometry.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The geometry for a given location.
            '''

        })
    '''
    The geometry for a given location.
    '''

    InternalLocation: list[InternalLocation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InternalLocation.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubLocation: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocationAccess: Optional[LocationAccess] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LocationAccess.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PositionPoints: list[PositionPoint] = field(
        default_factory=list,
        metadata={
        'type': 'gmdm',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PositionPoint.Location',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PowerSystemResources: list[PowerSystemResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerSystemResource.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All power system resources at this location.
            '''

        })
    '''
    All power system resources at this location.
    '''

    Site: Optional[Site] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Site.Location',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketOccurrence(IdentifiedObject):
    '''
    Represents an occurrence of a market. For example a planned DA/HA/RT market
    with a defined market start and end time.
    '''

    MarketProducts: list[MarketProduct] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketProduct.Market',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyMarket(MarketOccurrence):
    '''
    Energy and Ancillary Market (e.g. Energy, Spinning Reserve, Non-Spinning
    Reserve) with a description of the Market operation control parameters.
    '''

    timeframe: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A specified period of time in which something occurs or is planned to take
            place.
            '''

        })
    '''
    A specified period of time in which something occurs or is planned
    to take place.
    '''

    MarketResults: Optional[MarketResults] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketResults.EnergyMarket',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.EnergyMarkets',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketProduct(IdentifiedObject):
    '''
    A product traded by an RTO (e.g. energy, 10 minute spinning reserve). Ancillary
    service product examples include: Regulation, Regulation Up, Regulation
    Down, Spinning Reserve, Non-Spinning Reserve, etc.
    '''

    rampInterval: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Ramping time interval for the specific market product type specified by
            marketProductType attribute. For example, if marketProductType = RU (from
            enumeration MarketProductType), then the rampInterval is the time in which
            the service must become available.
            The rampInterval is used for market products that have a minimum ramp requirement.
            For example, rampInterval = 10 (minutes) for a contingency reserve marketProductType
            vs a rampInterval = 30 (minutes) for a replacement reserve marketProductType.
            '''

        })
    '''
    Ramping time interval for the specific market product type specified
    by marketProductType attribute. For example, if marketProductType =
    RU (from enumeration MarketProductType), then the rampInterval is the
    time in which the service must become available.
    The rampInterval is used for market products that have a minimum ramp
    requirement. For example, rampInterval = 10 (minutes) for a contingency
    reserve marketProductType vs a rampInterval = 30 (minutes) for a replacement
    reserve marketProductType.
    '''

    marketProductType: Optional[MarketProductType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Market product type examples:
            EN (Energy)
            RU (Regulation Up)
            RD (Regulation Dn)
            SR (Spinning Reserve)
            NR (Non-Spinning Reserve)
            RC (RUC)
            '''

        })
    '''
    Market product type examples:
    EN (Energy)
    RU (Regulation Up)
    RD (Regulation Dn)
    SR (Spinning Reserve)
    NR (Non-Spinning Reserve)
    RC (RUC)
    '''

    Market: Optional[MarketOccurrence] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketOccurrence.MarketProducts',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegionResults: Optional[MarketRegionResults] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketRegionResults.MarketProduct',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Measurement(IdentifiedObject):
    '''
    A Measurement represents any measured, calculated or non-measured non-calculated
    quantity. Any piece of equipment may contain Measurements, e.g. a substation
    may have temperature measurements and door open indications, a transformer
    may have oil temperature and tank pressure measurements, a bay may contain
    a number of power flow measurements and a Breaker may contain a switch
    status measurement.
    The PSR - Measurement association is intended to capture this use of Measurement
    and is included in the naming hierarchy based on EquipmentContainer. The
    naming hierarchy typically has Measurements as leaves, e.g. Substation-VoltageLevel-Bay-Switch-Measurement.
    Some Measurements represent quantities related to a particular sensor location
    in the network, e.g. a voltage transformer (VT) or potential transformer
    (PT) at a busbar or a current transformer (CT) at the bar between a breaker
    and an isolator. The sensing position is not captured in the PSR - Measurement
    association. Instead it is captured by the Measurement - Terminal association
    that is used to define the sensing location in the network topology. The
    location is defined by the connection of the Terminal to ConductingEquipment.
    If both a Terminal and PSR are associated, and the PSR is of type ConductingEquipment,
    the associated Terminal should belong to that ConductingEquipment instance.
    When the sensor location is needed both Measurement-PSR and Measurement-Terminal
    are used. The Measurement-Terminal association is never used alone.
    '''

    measurementType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the type of measurement. For example, this specifies if the measurement
            represents an indoor temperature, outdoor temperature, bus voltage, line
            flow, etc.
            When the measurementType is set to "Specialization", the type of Measurement
            is defined in more detail by the specialized class which inherits from
            Measurement.
            '''

        })
    '''
    Specifies the type of measurement. For example, this specifies if the
    measurement represents an indoor temperature, outdoor temperature,
    bus voltage, line flow, etc.
    When the measurementType is set to "Specialization", the type of Measurement
    is defined in more detail by the specialized class which inherits from
    Measurement.
    '''

    phases: Optional[PhaseCode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates to which phases the measurement applies and avoids the need to
            use 'measurementType' to also encode phase information (which would explode
            the types). The phase information in Measurement, along with 'measurementType'
            and 'phases' uniquely defines a Measurement for a device, based on normal
            network phase. Their meaning will not change when the computed energizing
            phasing is changed due to jumpers or other reasons.
            If the attribute is missing three phases (ABC) shall be assumed.
            '''

        })
    '''
    Indicates to which phases the measurement applies and avoids the need
    to use 'measurementType' to also encode phase information (which would
    explode the types). The phase information in Measurement, along with
    'measurementType' and 'phases' uniquely defines a Measurement for a
    device, based on normal network phase. Their meaning will not change
    when the computed energizing phasing is changed due to jumpers or other
    reasons.
    If the attribute is missing three phases (ABC) shall be assumed.
    '''

    unitMultiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit multiplier of the measured quantity.
            '''

        })
    '''
    The unit multiplier of the measured quantity.
    '''

    unitSymbol: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure of the measured quantity.
            '''

        })
    '''
    The unit of measure of the measured quantity.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.Measurements',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CalculationMethodHierarchy: Optional[CalculationMethodHierarchy] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CalculationMethodHierarchy.Measurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Calculation method hierarchy which applies to this analog.
            '''

        })
    '''
    Calculation method hierarchy which applies to this analog.
    '''

    MeasurementAction: Optional[MeasurementAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementAction.Measurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.Measurements',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power system resource that contains the measurement.
            '''

        })
    '''
    The power system resource that contains the measurement.
    '''

    Terminal: Optional[ACDCTerminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACDCTerminal.Measurements',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            One or more measurements may be associated with a terminal in the network.
            '''

        })
    '''
    One or more measurements may be associated with a terminal in the network.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class Accumulator(Measurement):
    '''
    Accumulator represents an accumulated (counted) Measurement, e.g. an energy
    value.
    '''

    maxValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range maximum for any of the MeasurementValue.values. Used
            for scaling, e.g. in bar graphs or of telemetered raw values.
            '''

        })
    '''
    Normal value range maximum for any of the MeasurementValue.values.
    Used for scaling, e.g. in bar graphs or of telemetered raw values.
    '''

    AccumulatorValues: list[AccumulatorValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AccumulatorValue.Accumulator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Analog(Measurement):
    '''
    Analog represents an analog Measurement.
    '''

    maxValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range maximum for any of the MeasurementValue.values. Used
            for scaling, e.g. in bar graphs or of telemetered raw values.
            '''

        })
    '''
    Normal value range maximum for any of the MeasurementValue.values.
    Used for scaling, e.g. in bar graphs or of telemetered raw values.
    '''

    minValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range minimum for any of the MeasurementValue.values. Used
            for scaling, e.g. in bar graphs or of telemetered raw values.
            '''

        })
    '''
    Normal value range minimum for any of the MeasurementValue.values.
    Used for scaling, e.g. in bar graphs or of telemetered raw values.
    '''

    normalValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal measurement value, e.g., used for percentage calculations.
            '''

        })
    '''
    Normal measurement value, e.g., used for percentage calculations.
    '''

    positiveFlowIn: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates the direction of positive flow relative to the primary equipment
            connectivity.
            The attribute is applicable for measurements of flow such as active power,
            reactive power or current.
            TRUE means a positive measurement value at the terminal, where the measurement
            is located, indicates power is flowing into the related PowerSystemResource.
            FALSE means a positive measurement value at the terminal, where the measurement
            is located, indicates power is flowing out of the related PowerSystemResource.
            '''

        })
    '''
    Indicates the direction of positive flow relative to the primary equipment
    connectivity.
    The attribute is applicable for measurements of flow such as active
    power, reactive power or current.
    TRUE means a positive measurement value at the terminal, where the
    measurement is located, indicates power is flowing into the related
    PowerSystemResource.
    FALSE means a positive measurement value at the terminal, where the
    measurement is located, indicates power is flowing out of the related
    PowerSystemResource.
    '''

    AnalogValues: list[AnalogValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalogValue.Analog',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Discrete(Measurement):
    '''
    Discrete represents a discrete Measurement, i.e. a Measurement representing
    discrete values, e.g. a Breaker position.
    '''

    maxValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range maximum for any of the MeasurementValue.values. Used
            for scaling, e.g. in bar graphs or of telemetered raw values.
            '''

        })
    '''
    Normal value range maximum for any of the MeasurementValue.values.
    Used for scaling, e.g. in bar graphs or of telemetered raw values.
    '''

    minValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal value range minimum for any of the MeasurementValue.values. Used
            for scaling, e.g. in bar graphs or of telemetered raw values.
            '''

        })
    '''
    Normal value range minimum for any of the MeasurementValue.values.
    Used for scaling, e.g. in bar graphs or of telemetered raw values.
    '''

    normalValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal measurement value, e.g., used for percentage calculations.
            '''

        })
    '''
    Normal measurement value, e.g., used for percentage calculations.
    '''

    ValueAliasSet: Optional[ValueAliasSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ValueAliasSet.Discretes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The ValueAliasSet used for translation of a MeasurementValue.value to a
            name.
            '''

        })
    '''
    The ValueAliasSet used for translation of a MeasurementValue.value
    to a name.
    '''

    DiscreteValues: list[DiscreteValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DiscreteValue.Discrete',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class MktMeasurement(Measurement):
    '''
    Subclass of IEC61970:Meas:Measurement.
    '''

    ByTiePoint: Optional[TiePoint] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TiePoint.ByMktMeasurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A measurement is made on the B side of a tie point
            '''

        })
    '''
    A measurement is made on the B side of a tie point
    '''

    ForTiePoint: Optional[TiePoint] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TiePoint.ForMktMeasurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A measurement is made on the A side of a tie point
            '''

        })
    '''
    A measurement is made on the A side of a tie point
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.MktMeasurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Allows Pnode an association to aggregated resources external DC ties or
            psuedo tie measurements.
            '''

        })
    '''
    Allows Pnode an association to aggregated resources external DC ties
    or psuedo tie measurements.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class StringMeasurement(Measurement):
    '''
    StringMeasurement represents a measurement with values of type string.
    '''

    StringMeasurementValues: list[StringMeasurementValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StringMeasurementValue.StringMeasurement',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeasurementValueSource(IdentifiedObject):
    '''
    MeasurementValueSource describes the alternative sources updating a MeasurementValue.
    User conventions for how to use the MeasurementValueSource attributes are
    defined in IEC 61970-301.
    '''

    MeasurementValues: list[MeasurementValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeasurementValue.MeasurementValueSource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValues updated by the source.
            '''

        })
    '''
    The MeasurementValues updated by the source.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IOPointSource(MeasurementValueSource):
    '''
    Indicates the point source for an IO Point.
    '''

    IOPoint: list[IOPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IOPoint.IOPointSource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            ICCP point for a local measurement value source.
            '''

        })
    '''
    ICCP point for a local measurement value source.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MutualCoupling(IdentifiedObject):
    '''
    This class represents the zero sequence line mutual coupling.
    '''

    b0ch: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence mutual coupling shunt (charging) susceptance, uniformly distributed,
            of the entire line section.
            '''

        })
    '''
    Zero sequence mutual coupling shunt (charging) susceptance, uniformly
    distributed, of the entire line section.
    '''

    distance11: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance to the start of the coupled region from the first line's terminal
            having sequence number equal to 1.
            '''

        })
    '''
    Distance to the start of the coupled region from the first line's terminal
    having sequence number equal to 1.
    '''

    distance12: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance to the end of the coupled region from the first line's terminal
            with sequence number equal to 1.
            '''

        })
    '''
    Distance to the end of the coupled region from the first line's terminal
    with sequence number equal to 1.
    '''

    distance21: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance to the start of coupled region from the second line's terminal
            with sequence number equal to 1.
            '''

        })
    '''
    Distance to the start of coupled region from the second line's terminal
    with sequence number equal to 1.
    '''

    distance22: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance to the end of coupled region from the second line's terminal with
            sequence number equal to 1.
            '''

        })
    '''
    Distance to the end of coupled region from the second line's terminal
    with sequence number equal to 1.
    '''

    g0ch: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence mutual coupling shunt (charging) conductance, uniformly distributed,
            of the entire line section.
            '''

        })
    '''
    Zero sequence mutual coupling shunt (charging) conductance, uniformly
    distributed, of the entire line section.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence branch-to-branch mutual impedance coupling, resistance.
            '''

        })
    '''
    Zero sequence branch-to-branch mutual impedance coupling, resistance.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence branch-to-branch mutual impedance coupling, reactance.
            '''

        })
    '''
    Zero sequence branch-to-branch mutual impedance coupling, reactance.
    '''

    First_Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasFirstMutualCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The starting terminal for the calculation of distances along the first
            branch of the mutual coupling. Normally MutualCoupling would only be used
            for terminals of AC line segments. The first and second terminals of a
            mutual coupling should point to different AC line segments.
            '''

        })
    '''
    The starting terminal for the calculation of distances along the first
    branch of the mutual coupling. Normally MutualCoupling would only be
    used for terminals of AC line segments. The first and second terminals
    of a mutual coupling should point to different AC line segments.
    '''

    Second_Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasSecondMutualCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The starting terminal for the calculation of distances along the second
            branch of the mutual coupling.
            '''

        })
    '''
    The starting terminal for the calculation of distances along the second
    branch of the mutual coupling.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperatingParticipant(IdentifiedObject):
    '''
    An operator of multiple power system resource objects. Note multiple operating
    participants may operate the same power system resource object. This can
    be used for modeling jointly owned units where each owner operates as a
    contractual share.
    '''

    OperatingShare: list[OperatingShare] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperatingShare.OperatingParticipant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operating shares of this operating participant. An operating participant
            can be resused for any number of power system resources.
            '''

        })
    '''
    The operating shares of this operating participant. An operating participant
    can be resused for any number of power system resources.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationalLimit(IdentifiedObject):
    '''
    A value and normal value associated with a specific kind of limit.
    The sub class value and normalValue attributes vary inversely to the associated
    OperationalLimitType.acceptableDuration (acceptableDuration for short).
    If a particular piece of equipment has multiple operational limits of the
    same kind (apparent power, current, etc.), the limit with the greatest
    acceptableDuration shall have the smallest limit value and the limit with
    the smallest acceptableDuration shall have the largest limit value. Note:
    A large current can only be allowed to flow through a piece of equipment
    for a short duration without causing damage, but a lesser current can be
    allowed to flow for a longer duration.
    '''

    OperationalLimitSet: Optional[OperationalLimitSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitSet.OperationalLimitValue',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The limit set to which the limit values belong.
            '''

        })
    '''
    The limit set to which the limit values belong.
    '''

    OperationalLimitType: Optional[OperationalLimitType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitType.OperationalLimit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The limit type associated with this limit.
            '''

        })
    '''
    The limit type associated with this limit.
    '''

    StepOperationalLimitTable: Optional[StepOperationalLimitTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StepOperationalLimitTable.OperationalLimit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The step operational limit table for this operational limit.
            '''

        })
    '''
    The step operational limit table for this operational limit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ActivePowerLimit(OperationalLimit):
    '''
    Limit on active power flow.
    '''

    normalValue: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal value of active power limit. The attribute shall be a positive
            value or zero.
            '''

        })
    '''
    The normal value of active power limit. The attribute shall be a positive
    value or zero.
    '''

    value: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value of active power limit. The attribute shall be a positive value or
            zero.
            '''

        })
    '''
    Value of active power limit. The attribute shall be a positive value
    or zero.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ApparentPowerLimit(OperationalLimit):
    '''
    Apparent power limit.
    '''

    normalValue: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal apparent power limit. The attribute shall be a positive value
            or zero.
            '''

        })
    '''
    The normal apparent power limit. The attribute shall be a positive
    value or zero.
    '''

    value: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The apparent power limit. The attribute shall be a positive value or zero.
            '''

        })
    '''
    The apparent power limit. The attribute shall be a positive value or
    zero.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class CurrentLimit(OperationalLimit):
    '''
    Operational limit on current.
    '''

    normalValue: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal value for limit on current flow. The attribute shall be a positive
            value or zero.
            '''

        })
    '''
    The normal value for limit on current flow. The attribute shall be
    a positive value or zero.
    '''

    value: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Limit on current flow. The attribute shall be a positive value or zero.
            '''

        })
    '''
    Limit on current flow. The attribute shall be a positive value or zero.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageAngleLimit(OperationalLimit):
    '''
    Voltage angle limit between two terminals. The association end OperationalLimitSet.Terminal
    defines one end and the host of the limit. The association end VoltageAngleLimit.AngleReferenceTerminal
    defines the reference terminal.
    '''

    isFlowToRefTerminal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if the flow is from the operating limit terminal to the angle reference
            terminal. False means that the flow is the other direction. When it is
            not given, the limit is the same for both directions.
            '''

        })
    '''
    True if the flow is from the operating limit terminal to the angle
    reference terminal. False means that the flow is the other direction.
    When it is not given, the limit is the same for both directions.
    '''

    normalValue: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The difference in angle degrees between referenced by the association end
            OperationalLimitSet.Terminal and the Terminal referenced by the association
            end VoltageAngleLimit.AngleReferenceTerminal. The value shall be positive
            (greater than zero).
            '''

        })
    '''
    The difference in angle degrees between referenced by the association
    end OperationalLimitSet.Terminal and the Terminal referenced by the
    association end VoltageAngleLimit.AngleReferenceTerminal. The value
    shall be positive (greater than zero).
    '''

    value: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The difference in angle degrees between referenced by the association end
            OperationalLimitSet.Terminal and the Terminal referenced by the association
            end VoltageAngleLimit.AngleReferenceTerminal. The value shall be positive
            (greater than zero).
            '''

        })
    '''
    The difference in angle degrees between referenced by the association
    end OperationalLimitSet.Terminal and the Terminal referenced by the
    association end VoltageAngleLimit.AngleReferenceTerminal. The value
    shall be positive (greater than zero).
    '''

    AngleReferenceTerminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.VoltageAngleLimit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The angle reference terminal for the voltage angle limit.
            '''

        })
    '''
    The angle reference terminal for the voltage angle limit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageLimit(OperationalLimit):
    '''
    Operational limit applied to voltage.
    The use of operational VoltageLimit is preferred instead of limits defined
    at VoltageLevel. The operational VoltageLimits are used, if present.
    '''

    normalValue: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal limit on voltage. High or low limit nature of the limit depends
            upon the properties of the operational limit type. The attribute shall
            be a positive value or zero.
            '''

        })
    '''
    The normal limit on voltage. High or low limit nature of the limit
    depends upon the properties of the operational limit type. The attribute
    shall be a positive value or zero.
    '''

    value: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Limit on voltage. High or low limit nature of the limit depends upon the
            properties of the operational limit type. The attribute shall be a positive
            value or zero.
            '''

        })
    '''
    Limit on voltage. High or low limit nature of the limit depends upon
    the properties of the operational limit type. The attribute shall be
    a positive value or zero.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class OperationalLimitSet(IdentifiedObject):
    '''
    A set of limits associated with equipment. Sets of limits might apply to
    a specific temperature, or season for example. A set of limits may contain
    different severities of limit levels that would apply to the same equipment.
    The set may contain limits of different types such as apparent power and
    current limits or high and low voltage limits that are logically applied
    together as a set.
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Equipment.OperationalLimitSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The equipment to which the limit set applies.
            '''

        })
    '''
    The equipment to which the limit set applies.
    '''

    Terminal: Optional[ACDCTerminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACDCTerminal.OperationalLimitSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal where the operational limit set apply.
            '''

        })
    '''
    The terminal where the operational limit set apply.
    '''

    OperationalLimitValue: list[OperationalLimit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimit.OperationalLimitSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Values of equipment limits.
            '''

        })
    '''
    Values of equipment limits.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationalLimitType(IdentifiedObject):
    '''
    The operational meaning of a category of limits.
    '''

    isInfiniteDuration: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Defines if the operational limit type has infinite duration. If true, the
            limit has infinite duration. If false, the limit has definite duration
            which is defined by the attribute acceptableDuration.
            '''

        })
    '''
    Defines if the operational limit type has infinite duration. If true,
    the limit has infinite duration. If false, the limit has definite duration
    which is defined by the attribute acceptableDuration.
    '''

    isMinimum: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'NC Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://entsoe.eu/ns/nc#',
        'serialize': True,
        'docstring':
            '''
            Defines if the operational limit type is minimum. If true, the value is
            a minimum value of the same kind. This applies to stability and PATL. If
            false, the limit has the normal behaviour. OperationalLimitType.direction
            attribute shall be absoluteValue.
            '''

        })
    '''
    Defines if the operational limit type is minimum. If true, the value
    is a minimum value of the same kind. This applies to stability and
    PATL. If false, the limit has the normal behaviour. OperationalLimitType.direction
    attribute shall be absoluteValue.
    '''

    acceptableDuration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The nominal acceptable duration of the limit. Limits are commonly expressed
            in terms of the time limit for which the limit is normally acceptable.
            The actual acceptable duration of a specific limit may depend on other
            local factors such as temperature or wind speed. The attribute has meaning
            only if the flag isInfiniteDuration is set to false, hence it shall not
            be exchanged when isInfiniteDuration is set to true.
            '''

        })
    '''
    The nominal acceptable duration of the limit. Limits are commonly expressed
    in terms of the time limit for which the limit is normally acceptable.
    The actual acceptable duration of a specific limit may depend on other
    local factors such as temperature or wind speed. The attribute has
    meaning only if the flag isInfiniteDuration is set to false, hence
    it shall not be exchanged when isInfiniteDuration is set to true.
    '''

    direction: Optional[OperationalLimitDirectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The direction of the limit.
            '''

        })
    '''
    The direction of the limit.
    '''

    kind: Optional[LimitKind] = field(
        default=None,
        metadata={
        'type': 'European enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            Types of limits defined in the ENTSO-E Operational Handbook Policy 3.
            '''

        })
    '''
    Types of limits defined in the ENTSO-E Operational Handbook Policy
    3.
    '''

    PermanentAmbientTemperatureDependencyCurve: Optional[AmbientTemperatureDependencyCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AmbientTemperatureDependencyCurve.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The permanent ambient temperature dependency curve for this operational
            limit type.
            '''

        })
    '''
    The permanent ambient temperature dependency curve for this operational
    limit type.
    '''

    PermanentSolarRadiationCurve: Optional[SolarRadiationDependencyCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SolarRadiationDependencyCurve.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The permanent solar radiation curve for this operational limit type.
            '''

        })
    '''
    The permanent solar radiation curve for this operational limit type.
    '''

    RecoveryOverloadLimitCurve: Optional[RecoveryOverloadLimitCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RecoveryOverloadLimitCurve.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the curve which provides the recovery time information for this
            limit type.
            '''

        })
    '''
    This is the curve which provides the recovery time information for
    this limit type.
    '''

    TemporaryBaseOverloadLimitCurve: Optional[BaseOverloadLimitCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseOverloadLimitCurve.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The temporary base overload limit curve for this operational limit type.
            '''

        })
    '''
    The temporary base overload limit curve for this operational limit
    type.
    '''

    TemporaryDurationOverloadLimitCurve: Optional[DurationOverloadLimitCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DurationOverloadLimitCurve.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The temporary duration overload limit curve for this operational limit
            type.
            '''

        })
    '''
    The temporary duration overload limit curve for this operational limit
    type.
    '''

    OperationalLimit: list[OperationalLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimit.OperationalLimitType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limits associated with this type of limit.
            '''

        })
    '''
    The operational limits associated with this type of limit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Ownership(IdentifiedObject):
    '''
    Ownership of e.g. asset.
    '''

    share: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Share of this ownership.
            '''

        })
    '''
    Share of this ownership.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.Ownerships',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asset that is object of this ownership.
            '''

        })
    '''
    Asset that is object of this ownership.
    '''

    AssetOwner: Optional[AssetOwner] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetOwner.Ownerships',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asset owner that is subject in this ownership.
            '''

        })
    '''
    Asset owner that is subject in this ownership.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PSRType(IdentifiedObject):
    '''
    Classifying instances of the same class, e.g. overhead and underground
    ACLineSegments. This classification mechanism is intended to provide flexibility
    outside the scope of this document, i.e. provide customisation that is
    non standard.
    '''

    PowerSystemResources: list[PowerSystemResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerSystemResource.PSRType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Power system resources classified with this power system resource type.
            '''

        })
    '''
    Power system resources classified with this power system resource type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthLineParameter(IdentifiedObject):
    '''
    Common type for per-length electrical line parameters.
    '''

    WireAssemblyInfo: Optional[WireAssemblyInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireAssemblyInfo.PerLengthLineParameter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthDCLineParameter(PerLengthLineParameter):
    '''
    Common type for per-length electrical catalogues describing DC line parameters.
    '''

    capacitance: Optional[ float | CapacitancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitance per unit of length of the DC line segment; significant for
            cables only.
            '''

        })
    '''
    Capacitance per unit of length of the DC line segment; significant
    for cables only.
    '''

    inductance: Optional[ float | InductancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductance per unit of length of the DC line segment.
            '''

        })
    '''
    Inductance per unit of length of the DC line segment.
    '''

    resistance: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance per length of the DC line segment.
            '''

        })
    '''
    Resistance per length of the DC line segment.
    '''

    DCLineSegments: list[DCLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCLineSegment.PerLengthParameter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All line segments described by this set of per-length parameters.
            '''

        })
    '''
    All line segments described by this set of per-length parameters.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthImpedance(PerLengthLineParameter):
    '''
    Common type for per-length electrical impedances.
    '''

    ACLineSegments: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.PerLengthImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All line segments described by this per-length impedance.
            '''

        })
    '''
    All line segments described by this per-length impedance.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthPhaseImpedance(PerLengthImpedance):
    '''
    The per length phase impedance matrix expresses impedance and admittance
    parameters per unit length for n-conductor unbalanced line segments. A
    phase impedance matrix contains both self impedances for each phase and
    mutual impedances between pairs of phases. The matrix is stored in symmetric
    lower triangular format where the diagonal entries represent self-impedances
    (and have the same value in row and column) and the off diagonal entries
    represent phase-to-phase impedances (and have different row and column
    values).
    The matrix can be use to express impedances for both non-coupled and coupled
    line segments. Coupled line segments share a single per length phase impedance
    matrix whose entries reflect the self and mutual impedances of all the
    phases of all the wires.
    '''

    conductorCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductor count identifies the number of phase, neutral, and other wires
            represented in the phase impedance matrix and constrains the number of
            elements in the matrix. Typically, Kron reduction is used for incorporating
            effects of neutral impedance in the phase conductor values (so conductor
            count only considers phase wires), but neutrals can be included in the
            matrix (in which case conductor count would include the neutral wire(s)).
            For a phase impedance matrix associated with the lines of a coupled line
            segment group, the conductor count reflects the total of the conductors
            associated with all the coupled line segments in the group.
            '''

        })
    '''
    Conductor count identifies the number of phase, neutral, and other
    wires represented in the phase impedance matrix and constrains the
    number of elements in the matrix. Typically, Kron reduction is used
    for incorporating effects of neutral impedance in the phase conductor
    values (so conductor count only considers phase wires), but neutrals
    can be included in the matrix (in which case conductor count would
    include the neutral wire(s)). For a phase impedance matrix associated
    with the lines of a coupled line segment group, the conductor count
    reflects the total of the conductors associated with all the coupled
    line segments in the group.
    '''

    PhaseImpedanceData: list[PhaseImpedanceData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhaseImpedanceData.PhaseImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All data that belong to this conductor phase impedance.
            '''

        })
    '''
    All data that belong to this conductor phase impedance.
    '''

    PhaseImpedanceData: list[PhaseImpedanceData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhaseImpedanceData.PhaseImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All data that belong to this conductor phase impedance.
            '''

        })
    '''
    All data that belong to this conductor phase impedance.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthSequenceImpedance(PerLengthImpedance):
    '''
    Sequence impedance and admittance parameters per unit length, for transposed
    line segments of 1, 2, or 3 phases. For 1-phase line segments, define x
    = x0 = xself. For 2-phase line segments, define x = xself - xmutual and
    x0 = xself + xmutual.
    '''

    b0ch: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) susceptance, per unit of length.
            '''

        })
    '''
    Zero sequence shunt (charging) susceptance, per unit of length.
    '''

    bch: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance, per unit of length.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance, per unit of length.
    '''

    g0ch: Optional[ float | ConductancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) conductance, per unit of length.
            '''

        })
    '''
    Zero sequence shunt (charging) conductance, per unit of length.
    '''

    gch: Optional[ float | ConductancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance, per unit of length.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance, per unit of length.
    '''

    r: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance, per unit of length.
            '''

        })
    '''
    Positive sequence series resistance, per unit of length.
    '''

    r0: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance, per unit of length.
            '''

        })
    '''
    Zero sequence series resistance, per unit of length.
    '''

    x: Optional[ float | ReactancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance, per unit of length.
            '''

        })
    '''
    Positive sequence series reactance, per unit of length.
    '''

    x0: Optional[ float | ReactancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance, per unit of length.
            '''

        })
    '''
    Zero sequence series reactance, per unit of length.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerTable(IdentifiedObject):
    '''
    Describes a tabular curve for how the phase angle difference and impedance
    varies with the tap step.
    '''

    PhaseTapChangerTablePoint: list[PhaseTapChangerTablePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhaseTapChangerTablePoint.PhaseTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The points of this table.
            '''

        })
    '''
    The points of this table.
    '''

    PhaseTapChangerTabular: list[PhaseTapChangerTabular] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhaseTapChangerTabular.PhaseTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The phase tap changers to which this phase tap table applies.
            '''

        })
    '''
    The phase tap changers to which this phase tap table applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConnectionAngleTapChangerTable(PhaseTapChangerTable):
    '''
    Describes a tabular curve for how the connection angle varies with the
    tap step. This table is used when its winding connection angle matches
    the operating angle of the tap changer. There must be an instance of this
    table for each winding connection angle that can be used.
    '''

    windingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The phase angle between the in-phase winding and the out-of -phase winding
            used for creating phase shift. The out-of-phase winding produces what is
            known as the difference voltage. Setting this angle to 90 degrees is not
            the same as a symmetrical transformer. In this scenario you will still
            treat the 90-degree angle as a phase shifting transformer. The attribute
            can only be multiples of 30 degrees. When 0 degree is used the asymmetrical
            phase tap changer acts as ratio tap changer controlling voltage.
            '''

        })
    '''
    The phase angle between the in-phase winding and the out-of -phase
    winding used for creating phase shift. The out-of-phase winding produces
    what is known as the difference voltage. Setting this angle to 90 degrees
    is not the same as a symmetrical transformer. In this scenario you
    will still treat the 90-degree angle as a phase shifting transformer.
    The attribute can only be multiples of 30 degrees. When 0 degree is
    used the asymmetrical phase tap changer acts as ratio tap changer controlling
    voltage.
    '''

    ConnectionAngleTapChanger: Optional[ConnectionAngleTapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectionAngleTapChanger.ConnectionAngleTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The connection angle tap changer that has this connection angle tap changer
            table.
            '''

        })
    '''
    The connection angle tap changer that has this connection angle tap
    changer table.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pnode(IdentifiedObject):
    '''
    A pricing node is directly associated with a connectivity node. It is a
    pricing location for which market participants submit their bids, offers,
    buy/sell CRRs, and settle.
    '''

    MktMeasurement: list[MktMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktMeasurement.Pnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Allows Measurements to be associated to Pnodes.
            '''

        })
    '''
    Allows Measurements to be associated to Pnodes.
    '''

    RegisteredResources: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.Pnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A registered resource injects power at one or more connectivity nodes related
            to a pnode
            '''

        })
    '''
    A registered resource injects power at one or more connectivity nodes
    related to a pnode
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AggregatedPnode(Pnode):
    '''
    An aggregated pricing node is a specialized type of pricing node used to
    model items such as System Zone, Default Price Zone, Custom Price Zone,
    Control Area, Aggregated Generation, Aggregated Particpating Load, Aggregated
    Non-Participating Load, Trading Hub, Designated Control Area(DCA) Zone.
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.AggregatedPnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IndividualPnode(Pnode):
    '''
    Individual pricing node based on Pnode.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.IndividualPnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GenDistributionFactor: Optional[GenDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenDistributionFactor.IndividualPnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadDistributionFactor: Optional[LoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadDistributionFactor.IndividualPnode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PointOfCommonCoupling(IdentifiedObject):
    '''
    Point of Common Coupling (PCC) refers to the location where multiple electrical
    sources or loads are electrically connected and provide a reference point
    where the voltages and currents from different parts of the system are
    considered to be common. The PCC is used to support system analysis, control,
    and monitoring, as it provides a reference for understanding the interactions
    and power flow between various components within the system. It is also
    relevant to define the requirement and responsibility between different
    actors in operating a power system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACPointOfCommonCoupling(PointOfCommonCoupling):
    '''
    Point of interconnection of the DC converter station to the adjacent AC
    system (IEC 60633).
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.ACPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Connectivity node which is a point of common coupling AC.
            '''

        })
    '''
    Connectivity node which is a point of common coupling AC.
    '''

    DCConverterUnit: Optional[DCConverterUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCConverterUnit.ACPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC converter unit that has AC point of common coupling.
            '''

        })
    '''
    DC converter unit that has AC point of common coupling.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.ACPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Connectivity node which is a point of common coupling AC.
            '''

        })
    '''
    Connectivity node which is a point of common coupling AC.
    '''

    DCConverterUnit: Optional[DCConverterUnit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCConverterUnit.ACPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC converter unit that has AC point of common coupling.
            '''

        })
    '''
    DC converter unit that has AC point of common coupling.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCPointOfCommonCoupling(PointOfCommonCoupling):
    '''
    Point of interconnection of the DC converter station to the DC transmission
    line (IEC 60633).
    '''

    DCConverterUnit: Optional[DCConverterUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCConverterUnit.DCPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC converter unit that has DC point of common coupling.
            '''

        })
    '''
    DC converter unit that has DC point of common coupling.
    '''

    DCNode: Optional[DCNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCNode.DCPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DCNode that is a point of common coupling DC.
            '''

        })
    '''
    The DCNode that is a point of common coupling DC.
    '''

    DCConverterUnit: Optional[DCConverterUnit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCConverterUnit.DCPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC converter unit that has DC point of common coupling.
            '''

        })
    '''
    DC converter unit that has DC point of common coupling.
    '''

    DCNode: Optional[DCNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCNode.DCPointOfCommonCoupling',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DCNode that is a point of common coupling DC.
            '''

        })
    '''
    The DCNode that is a point of common coupling DC.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Part3Ext)
@dataclass(repr=False)
class PowerSystemResource(IdentifiedObject):
    '''
    A power system resource (PSR) can be an item of equipment such as a switch,
    an equipment container containing many individual items of equipment such
    as a substation, or an organisational entity such as sub-control area.
    Power system resources can have measurements associated.
    '''

    AssetDatasheet: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.PowerSystemResources',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Datasheet information for this power system resource.
            '''

        })
    '''
    Datasheet information for this power system resource.
    '''

    DesignElement: Optional[DesignElement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DesignElement.PowerSystemResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Operation to be performed with the resource in context of a particular
            design
            '''

        })
    '''
    Operation to be performed with the resource in context of a particular
    design
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.PowerSystemResources',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Location of this power system resource.
            '''

        })
    '''
    Location of this power system resource.
    '''

    PSRType: Optional[PSRType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PSRType.PowerSystemResources',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Custom classification for this power system resource.
            '''

        })
    '''
    Custom classification for this power system resource.
    '''

    ConfigurationEvent: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Part 3 Ext',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.PowerSystemResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Controls: list[Control] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Control.PowerSystemResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The controller outputs used to actually govern a regulating device, e.g.
            the magnetization of a synchronous machine or capacitor bank breaker actuator.
            '''

        })
    '''
    The controller outputs used to actually govern a regulating device,
    e.g. the magnetization of a synchronous machine or capacitor bank breaker
    actuator.
    '''

    Measurements: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.PowerSystemResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The measurements associated with this power system resource.
            '''

        })
    '''
    The measurements associated with this power system resource.
    '''

    OperatingShare: list[OperatingShare] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperatingShare.PowerSystemResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operating shares of this power system resource.
            '''

        })
    '''
    The operating shares of this power system resource.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class ACLineSegmentPhase(PowerSystemResource):
    '''
    A line segment phase represents one phase (or optionally the neutral) of
    an alternating current line segment.
    Under most circumstances there is not a line segment phase for the neutral.
    However, if a wire assembly is being used and it does not specify phase,
    a line segment phase must exist for each position in the assembly (including
    the neutral).
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sequence number provides the numbering for this line segment phase. When
            impedance is directly described, sequence number binds the phase to the
            column and row for entries in the per length phase impedance matrix (PhaseImpedanceData
            of PerLengthPhaseImpedance). When used in conjunction with a wire assembly
            description, sequence number associates the line segment phase to a position.
            For a line segment not a part of a parallel line segment group, sequence
            number starts at one and increments by one through each line segment phase
            associated with the line segment. If there is a line segment phase for
            neutral, it is numbered last.
            '''

        })
    '''
    Sequence number provides the numbering for this line segment phase.
    When impedance is directly described, sequence number binds the phase
    to the column and row for entries in the per length phase impedance
    matrix (PhaseImpedanceData of PerLengthPhaseImpedance). When used in
    conjunction with a wire assembly description, sequence number associates
    the line segment phase to a position.
    For a line segment not a part of a parallel line segment group, sequence
    number starts at one and increments by one through each line segment
    phase associated with the line segment. If there is a line segment
    phase for neutral, it is numbered last.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase identifies the phase or neutral connection of the conductor at both
            ends.
            '''

        })
    '''
    Phase identifies the phase or neutral connection of the conductor at
    both ends.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.ACLineSegmentPhases',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The line segment to which the phase belongs.
            '''

        })
    '''
    The line segment to which the phase belongs.
    '''

    IntraphaseSpacing: Optional[IntraphaseSpacing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IntraphaseSpacing.ACLineSegmentPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WireInfo: Optional[WireInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireInfo.ACLineSegmentPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class AirCompressor(PowerSystemResource):
    '''
    Combustion turbine air compressor which is an integral part of a compressed
    air energy storage (CAES) plant.
    '''

    airCompressorRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rating of the CAES air compressor.
            '''

        })
    '''
    Rating of the CAES air compressor.
    '''

    CAESPlant: Optional[CAESPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CAESPlant.AirCompressor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An air compressor may be a member of a compressed air energy storage plant.
            '''

        })
    '''
    An air compressor may be a member of a compressed air energy storage
    plant.
    '''

    CombustionTurbine: Optional[CombustionTurbine] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CombustionTurbine.AirCompressor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A CAES air compressor is driven by combustion turbine.
            '''

        })
    '''
    A CAES air compressor is driven by combustion turbine.
    '''

    CAESPlant: Optional[CAESPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CAESPlant.AirCompressor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            An air compressor may be a member of a compressed air energy storage plant.
            '''

        })
    '''
    An air compressor may be a member of a compressed air energy storage
    plant.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AreaInterchangeController(PowerSystemResource):
    '''
    Area interchange control is set to control active power of an area.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.AreaInterchangeController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Control area that has a area interchange controller.
            '''

        })
    '''
    Control area that has a area interchange controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.European)
@dataclass(repr=False)
class BoundaryPoint(PowerSystemResource):
    '''
    Designates a connection point at which one or more model authority sets
    shall connect to. The location of the connection point as well as other
    properties are agreed between organisations responsible for the interconnection,
    hence all attributes of the class represent this agreement. It is primarily
    used in a boundary model authority set which can contain one or many BoundaryPoint-s
    among other Equipment-s and their connections.
    '''

    fromEndIsoCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            The ISO code of the region which the "From" side of the Boundary point
            belongs to or it is connected to.
            The ISO code is a two-character country code as defined by ISO 3166 (http://www.iso.org/iso/country_codes).
            The length of the string is 2 characters maximum.
            '''

        })
    '''
    The ISO code of the region which the "From" side of the Boundary point
    belongs to or it is connected to.
    The ISO code is a two-character country code as defined by ISO 3166
    (http://www.iso.org/iso/country_codes). The length of the string is
    2 characters maximum.
    '''

    fromEndName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            A human readable name with length of the string 64 characters maximum.
            It covers the following two cases:
            -if the Boundary point is placed on a tie-line, it is the name (IdentifiedObject.name)
            of the substation at which the "From" side of the tie-line is connected
            to.
            -if the Boundary point is placed in a substation, it is the name (IdentifiedObject.name)
            of the element (e.g. PowerTransformer, ACLineSegment, Switch, etc.) at
            which the "From" side of the Boundary point is connected to.
            '''

        })
    '''
    A human readable name with length of the string 64 characters maximum.
    It covers the following two cases:
    -if the Boundary point is placed on a tie-line, it is the name (IdentifiedObject.name)
    of the substation at which the "From" side of the tie-line is connected
    to.
    -if the Boundary point is placed in a substation, it is the name (IdentifiedObject.name)
    of the element (e.g. PowerTransformer, ACLineSegment, Switch, etc.)
    at which the "From" side of the Boundary point is connected to.
    '''

    fromEndNameTso: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            Identifies the name of the transmission system operator, distribution system
            operator or other entity at which the "From" side of the interconnection
            is connected to. The length of the string is 64 characters maximum.
            '''

        })
    '''
    Identifies the name of the transmission system operator, distribution
    system operator or other entity at which the "From" side of the interconnection
    is connected to. The length of the string is 64 characters maximum.
    '''

    isDirectCurrent: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            If true, this boundary point is a point of common coupling (PCC) of a direct
            current (DC) interconnection, otherwise the interconnection is AC (default).
            '''

        })
    '''
    If true, this boundary point is a point of common coupling (PCC) of
    a direct current (DC) interconnection, otherwise the interconnection
    is AC (default).
    '''

    isExcludedFromAreaInterchange: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            If true, this boundary point is on the interconnection that is excluded
            from control area interchange calculation and consequently has no related
            tie flows. Otherwise, the interconnection is included in control area interchange
            and a TieFlow is required at all sides of the boundary point (default).
            '''

        })
    '''
    If true, this boundary point is on the interconnection that is excluded
    from control area interchange calculation and consequently has no related
    tie flows. Otherwise, the interconnection is included in control area
    interchange and a TieFlow is required at all sides of the boundary
    point (default).
    '''

    toEndIsoCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            The ISO code of the region which the "To" side of the Boundary point belongs
            to or is connected to.
            The ISO code is a two-character country code as defined by ISO 3166 (http://www.iso.org/iso/country_codes).
            The length of the string is 2 characters maximum.
            '''

        })
    '''
    The ISO code of the region which the "To" side of the Boundary point
    belongs to or is connected to.
    The ISO code is a two-character country code as defined by ISO 3166
    (http://www.iso.org/iso/country_codes). The length of the string is
    2 characters maximum.
    '''

    toEndName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            A human readable name with length of the string 64 characters maximum.
            It covers the following two cases:
            -if the Boundary point is placed on a tie-line, it is the name (IdentifiedObject.name)
            of the substation at which the "To" side of the tie-line is connected to.
            -if the Boundary point is placed in a substation, it is the name (IdentifiedObject.name)
            of the element (e.g. PowerTransformer, ACLineSegment, Switch, etc.) at
            which the "To" side of the Boundary point is connected to.
            '''

        })
    '''
    A human readable name with length of the string 64 characters maximum.
    It covers the following two cases:
    -if the Boundary point is placed on a tie-line, it is the name (IdentifiedObject.name)
    of the substation at which the "To" side of the tie-line is connected
    to.
    -if the Boundary point is placed in a substation, it is the name (IdentifiedObject.name)
    of the element (e.g. PowerTransformer, ACLineSegment, Switch, etc.)
    at which the "To" side of the Boundary point is connected to.
    '''

    toEndNameTso: Optional[str] = field(
        default=None,
        metadata={
        'type': 'European Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            Identifies the name of the transmission system operator, distribution system
            operator or other entity at which the "To" side of the interconnection
            is connected to. The length of the string is 64 characters maximum.
            '''

        })
    '''
    Identifies the name of the transmission system operator, distribution
    system operator or other entity at which the "To" side of the interconnection
    is connected to. The length of the string is 64 characters maximum.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.BoundaryPoint',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            The connectivity node that is designated as a boundary point.
            '''

        })
    '''
    The connectivity node that is designated as a boundary point.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.BoundaryPoint',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': False,
        'docstring':
            '''
            The connectivity node that is designated as a boundary point.
            '''

        })
    '''
    The connectivity node that is designated as a boundary point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100-European#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class CAESPlant(PowerSystemResource):
    '''
    Compressed air energy storage plant.
    '''

    energyStorageCapacity: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The rated energy storage capacity. The attribute shall be a positive value.
            '''

        })
    '''
    The rated energy storage capacity. The attribute shall be a positive
    value.
    '''

    ratedCapacityP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The CAES plant's gross rated generating capacity. The attribute shall be
            a positive value.
            '''

        })
    '''
    The CAES plant's gross rated generating capacity. The attribute shall
    be a positive value.
    '''

    AirCompressor: Optional[AirCompressor] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CAESPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An air compressor may be a member of a compressed air energy storage plant.
            '''

        })
    '''
    An air compressor may be a member of a compressed air energy storage
    plant.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.CAESPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may be a member of a compressed air energy storage
            plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a compressed air energy
    storage plant.
    '''

    AirCompressor: Optional[AirCompressor] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CAESPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            An air compressor may be a member of a compressed air energy storage plant.
            '''

        })
    '''
    An air compressor may be a member of a compressed air energy storage
    plant.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.CAESPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may be a member of a compressed air energy storage
            plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a compressed air energy
    storage plant.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class CogenerationPlant(PowerSystemResource):
    '''
    A set of thermal generating units for the production of electrical energy
    and process steam (usually from the output of the steam turbines). The
    steam sendout is typically used for industrial purposes or for municipal
    heating and cooling.
    '''

    cogenHPSendoutRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The high pressure steam sendout.
            '''

        })
    '''
    The high pressure steam sendout.
    '''

    cogenHPSteamRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The high pressure steam rating.
            '''

        })
    '''
    The high pressure steam rating.
    '''

    cogenLPSendoutRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The low pressure steam sendout.
            '''

        })
    '''
    The low pressure steam sendout.
    '''

    cogenLPSteamRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The low pressure steam rating.
            '''

        })
    '''
    The low pressure steam rating.
    '''

    ratedP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The rated output active power of the cogeneration plant.
            The attribute shall be a positive value.
            '''

        })
    '''
    The rated output active power of the cogeneration plant.
    The attribute shall be a positive value.
    '''

    SteamSendoutSchedule: Optional[SteamSendoutSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SteamSendoutSchedule.CogenerationPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A cogeneration plant has a steam sendout schedule.
            '''

        })
    '''
    A cogeneration plant has a steam sendout schedule.
    '''

    SteamSendoutSchedule: Optional[SteamSendoutSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SteamSendoutSchedule.CogenerationPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A cogeneration plant has a steam sendout schedule.
            '''

        })
    '''
    A cogeneration plant has a steam sendout schedule.
    '''

    ThermalGeneratingUnits: list[ThermalGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ThermalGeneratingUnit.CogenerationPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may be a member of a cogeneration plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a cogeneration plant.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CombinedCyclePlant(PowerSystemResource):
    '''
    A set of combustion turbines and steam turbines where the exhaust heat
    from the combustion turbines is recovered to make steam for the steam turbines,
    resulting in greater overall plant efficiency.
    '''

    combCyclePlantRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The combined cycle plant's active power output rating.
            '''

        })
    '''
    The combined cycle plant's active power output rating.
    '''

    ThermalGeneratingUnits: list[ThermalGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ThermalGeneratingUnit.CombinedCyclePlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may be a member of a combined cycle plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a combined cycle plant.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CombustionTurbine(PowerSystemResource):
    '''
    A prime mover that is typically fuelled by gas or light oil.
    '''

    AirCompressor: Optional[AirCompressor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CombustionTurbine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A CAES air compressor is driven by combustion turbine.
            '''

        })
    '''
    A CAES air compressor is driven by combustion turbine.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConnectivityNodeContainer(PowerSystemResource):
    '''
    A base class for all objects that may contain connectivity nodes or topological
    nodes.
    '''

    ConnectivityNodes: list[ConnectivityNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConnectivityNode.ConnectivityNodeContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Connectivity nodes which belong to this connectivity node container.
            '''

        })
    '''
    Connectivity nodes which belong to this connectivity node container.
    '''

    TopologicalNode: list[TopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TopologicalNode.ConnectivityNodeContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The topological nodes which belong to this connectivity node container.
            '''

        })
    '''
    The topological nodes which belong to this connectivity node container.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquipmentContainer(ConnectivityNodeContainer):
    '''
    A modelling construct to provide a root class for containing equipment.
    '''

    AdditionalGroupedEquipment: list[Equipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Equipment.AdditionalEquipmentContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The additonal contained equipment. The equipment belong to the equipment
            container. The equipment is contained in another equipment container, but
            also grouped with this equipment container. Examples include when a switch
            contained in a substation is also desired to be grouped with a line contianer
            or when a switch is included in a secondary substation and also grouped
            in a feeder.
            '''

        })
    '''
    The additonal contained equipment. The equipment belong to the equipment
    container. The equipment is contained in another equipment container,
    but also grouped with this equipment container. Examples include when
    a switch contained in a substation is also desired to be grouped with
    a line contianer or when a switch is included in a secondary substation
    and also grouped in a feeder.
    '''

    Equipments: list[Equipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Equipment.EquipmentContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Contained equipment.
            '''

        })
    '''
    Contained equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class Bay(EquipmentContainer):
    '''
    A collection of power system resources (within a given substation) including
    conducting equipment, protection relays, measurements, and telemetry. A
    bay typically represents a physical grouping related to modularization
    of equipment.
    '''

    bayEnergyMeasFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates the presence/absence of energy measurements.
            '''

        })
    '''
    Indicates the presence/absence of energy measurements.
    '''

    bayPowerMeasFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates the presence/absence of active/reactive power measurements.
            '''

        })
    '''
    Indicates the presence/absence of active/reactive power measurements.
    '''

    breakerConfiguration: Optional[BreakerConfiguration] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Breaker configuration.
            '''

        })
    '''
    Breaker configuration.
    '''

    busBarConfiguration: Optional[BusbarConfiguration] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Busbar configuration.
            '''

        })
    '''
    Busbar configuration.
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.Bays',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Substation containing the bay.
            '''

        })
    '''
    Substation containing the bay.
    '''

    VoltageLevel: Optional[VoltageLevel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageLevel.Bays',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage level containing this bay.
            '''

        })
    '''
    The voltage level containing this bay.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCEquipmentContainer(EquipmentContainer):
    '''
    A modelling construct to provide a root class for containment of DC as
    well as AC equipment. The class differ from the EquipmentContainer for
    AC in that it may also contain DCNode(-s). Hence it can contain both AC
    and DC equipment.
    '''

    HVDCInterconnectionDynamics: Optional[HVDCInterconnectionDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HVDCInterconnectionDynamics.DCEquipmentContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            HVDC interconnection dynamics model used to describe dynamic behaviour
            of this HVDC interconnection.
            '''

        })
    '''
    HVDC interconnection dynamics model used to describe dynamic behaviour
    of this HVDC interconnection.
    '''

    DCNodes: list[DCNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCNode.DCEquipmentContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC nodes contained in the DC equipment container.
            '''

        })
    '''
    The DC nodes contained in the DC equipment container.
    '''

    DCTopologicalNode: list[DCTopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCTopologicalNode.DCEquipmentContainer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The topological nodes which belong to this connectivity node container.
            '''

        })
    '''
    The topological nodes which belong to this connectivity node container.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCConverterUnit(DCEquipmentContainer):
    '''
    Indivisible operative unit comprising all equipment between the point of
    common coupling on the AC side and the point of common coupling � DC side,
    essentially one or more converters, together with one or more converter
    transformers, converter control equipment, essential protective and switching
    devices and auxiliaries, if any, used for conversion.
    '''

    operationMode: Optional[DCConverterOperatingModeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The operating mode of an DC bipole (bipolar, monopolar metallic return,
            etc.).
            '''

        })
    '''
    The operating mode of an DC bipole (bipolar, monopolar metallic return,
    etc.).
    '''

    ACPointOfCommonCoupling: Optional[ACPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACPointOfCommonCoupling.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            AC point of common coupling for this DC converter unit.
            '''

        })
    '''
    AC point of common coupling for this DC converter unit.
    '''

    DCPointOfCommonCoupling: Optional[DCPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPointOfCommonCoupling.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DCNode that is the point of common coupling at DC side of this DCConverterUnit.
            '''

        })
    '''
    DCNode that is the point of common coupling at DC side of this DCConverterUnit.
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC pole that has this DC converter unit.
            '''

        })
    '''
    The DC pole that has this DC converter unit.
    '''

    DCSubstation: Optional[DCSubstation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCSubstation.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC substation that has one or more DC converter units.
            '''

        })
    '''
    DC substation that has one or more DC converter units.
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The containing substation of the DC converter unit.
            '''

        })
    '''
    The containing substation of the DC converter unit.
    '''

    ACPointOfCommonCoupling: Optional[ACPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACPointOfCommonCoupling.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            AC point of common coupling for this DC converter unit.
            '''

        })
    '''
    AC point of common coupling for this DC converter unit.
    '''

    DCPointOfCommonCoupling: Optional[DCPointOfCommonCoupling] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPointOfCommonCoupling.DCConverterUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DCNode that is the point of common coupling at DC side of this DCConverterUnit.
            '''

        })
    '''
    DCNode that is the point of common coupling at DC side of this DCConverterUnit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCLine(DCEquipmentContainer):
    '''
    Overhead lines and/or cables connecting two or more DC substations.
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.DCLine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC pole that has this DC line.
            '''

        })
    '''
    The DC pole that has this DC line.
    '''

    Region: Optional[SubGeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubGeographicalRegion.DCLines',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SubGeographicalRegion containing the DC line.
            '''

        })
    '''
    The SubGeographicalRegion containing the DC line.
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.DCLine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC pole that has this DC line.
            '''

        })
    '''
    The DC pole that has this DC line.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSubstation(DCEquipmentContainer):
    '''
    DC substation or DC converter station (IEC 60633) is part of an DC system
    which consists of one or more converter units installed in a single location
    together with buildings, reactors, filters, reactive power supply, control,
    monitoring, protective, measuring and auxiliary equipment. A DC substation
    forming part of an DC transmission system may be referred to as an DC transmission
    substation.
    '''

    isTapping: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC tapping substation (IEC 60633) is a DC substation, mainly used for inversion,
            with a rating which is a small fraction of that of the rectifier(s) in
            the system.
            '''

        })
    '''
    DC tapping substation (IEC 60633) is a DC substation, mainly used for
    inversion, with a rating which is a small fraction of that of the rectifier(s)
    in the system.
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.DCSubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Substation that contains this DC susbstation.
            '''

        })
    '''
    Substation that contains this DC susbstation.
    '''

    DCConverterUnit: list[DCConverterUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCConverterUnit.DCSubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC converter unit that belongs to this DC substation.
            '''

        })
    '''
    DC converter unit that belongs to this DC substation.
    '''

    DCSubstationBipole: list[DCSubstationBipole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCSubstationBipole.DCSubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC substation bipole which is part of the DC substation.
            '''

        })
    '''
    DC substation bipole which is part of the DC substation.
    '''

    DCSubstationPole: list[DCSubstationPole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCSubstationPole.DCSubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC substation pole which is part of the DC substation.
            '''

        })
    '''
    DC substation pole which is part of the DC substation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSubstationBipole(DCEquipmentContainer):
    '''
    Part of a bipolar DC system (IEC 60633) contained within a DC substation.
    '''

    DCSubstation: Optional[DCSubstation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCSubstation.DCSubstationBipole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC substation that contains this DC substation bipole part.
            '''

        })
    '''
    DC substation that contains this DC substation bipole part.
    '''

    DirectCurrentSubstationBipoleController: Optional[DirectCurrentSubstationBipoleController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DirectCurrentSubstationBipoleController.DCSubstationBipole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC substation bipole controller controlling this DC substation bipole.
            '''

        })
    '''
    DC substation bipole controller controlling this DC substation bipole.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSubstationPole(DCEquipmentContainer):
    '''
    Part of an DC system pole (IEC 60633) which is contained within a DC substation.
    '''

    DCSubstation: Optional[DCSubstation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCSubstation.DCSubstationPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC substation that contains this DC substation pole part.
            '''

        })
    '''
    DC substation that contains this DC substation pole part.
    '''

    DirectCurrentSubstationPoleController: Optional[DirectCurrentSubstationPoleController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DirectCurrentSubstationPoleController.DCSubstationPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC substation pole controller controlling this DC substation pole.
            '''

        })
    '''
    DC substation pole controller controlling this DC substation pole.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class Feeder(EquipmentContainer):
    '''
    A collection of equipment for organizational purposes, used for grouping
    distribution resources.
    The organization a feeder does not necessarily reflect connectivity or
    current operation state.
    '''

    NormalEnergizingSubstation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.NormalEnergizedFeeder',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The substation that nominally energizes the feeder. Also used for naming
            purposes.
            '''

        })
    '''
    The substation that nominally energizes the feeder. Also used for naming
    purposes.
    '''

    NamingSecondarySubstation: list[Substation] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Substation.NamingFeeder',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The secondary substations that are normally energized from the feeder.
            Used for naming purposes. Should be consistent with the other associations
            for energizing terminal specification and the feeder energization specification.
            '''

        })
    '''
    The secondary substations that are normally energized from the feeder.
    Used for naming purposes. Should be consistent with the other associations
    for energizing terminal specification and the feeder energization specification.
    '''

    NormalHeadTerminal: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.NormalHeadFeeder',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The normal head terminal or terminals of the feeder.
            '''

        })
    '''
    The normal head terminal or terminals of the feeder.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Line(EquipmentContainer):
    '''
    Contains equipment beyond a substation belonging to a power transmission
    line.
    '''

    ACTieCorridor: Optional[ACTieCorridor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACTieCorridor.Line',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            ACTieCorridor that the line is part of.
            '''

        })
    '''
    ACTieCorridor that the line is part of.
    '''

    Region: Optional[SubGeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubGeographicalRegion.Lines',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The sub-geographical region of the line.
            '''

        })
    '''
    The sub-geographical region of the line.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktLine(Line):
    '''
    Subclass for IEC61970:Wires:Line.
    '''

    TransmissionRightOfWay: Optional[TransmissionRightOfWay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionRightOfWay.MktLine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Plant(EquipmentContainer):
    '''
    A Plant is a collection of equipment for purposes of generation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class Substation(EquipmentContainer):
    '''
    A collection of equipment for purposes other than generation or utilization,
    through which electric energy in bulk is passed for the purposes of switching
    or modifying its characteristics.
    '''

    NamingFeeder: Optional[Feeder] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Feeder.NamingSecondarySubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The primary feeder that normally energizes the secondary substation. Used
            for naming purposes. Either this association or the substation to subgeographical
            region should be used for hierarchical containment specification.
            '''

        })
    '''
    The primary feeder that normally energizes the secondary substation.
    Used for naming purposes. Either this association or the substation
    to subgeographical region should be used for hierarchical containment
    specification.
    '''

    Region: Optional[SubGeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubGeographicalRegion.Substations',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The SubGeographicalRegion containing the substation.
            '''

        })
    '''
    The SubGeographicalRegion containing the substation.
    '''

    Bays: list[Bay] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bay.Substation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Bays contained in the substation.
            '''

        })
    '''
    Bays contained in the substation.
    '''

    DCConverterUnit: list[DCConverterUnit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCConverterUnit.Substation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC converter unit belonging of the substation.
            '''

        })
    '''
    The DC converter unit belonging of the substation.
    '''

    DCSubstation: list[DCSubstation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCSubstation.Substation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC substation that is part of AC and DC substation.
            '''

        })
    '''
    DC substation that is part of AC and DC substation.
    '''

    NormalEnergizedFeeder: list[Feeder] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Feeder.NormalEnergizingSubstation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The normal energized feeders of the substation. Also used for naming purposes.
            '''

        })
    '''
    The normal energized feeders of the substation. Also used for naming
    purposes.
    '''

    VoltageLevels: list[VoltageLevel] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VoltageLevel.Substation',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The voltage levels within this substation.
            '''

        })
    '''
    The voltage levels within this substation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class VoltageLevel(EquipmentContainer):
    '''
    A collection of equipment at one common system voltage forming a switchgear.
    The equipment typically consists of breakers, busbars, instrumentation,
    control, regulation and protection devices as well as assemblies of all
    these.
    '''

    highVoltageLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The bus bar's high voltage limit.
            The limit applies to all equipment and nodes contained in a given VoltageLevel.
            It is not required that it is exchanged in pair with lowVoltageLimit. It
            is preferable to use operational VoltageLimit, which prevails, if present.
            '''

        })
    '''
    The bus bar's high voltage limit.
    The limit applies to all equipment and nodes contained in a given VoltageLevel.
    It is not required that it is exchanged in pair with lowVoltageLimit.
    It is preferable to use operational VoltageLimit, which prevails, if
    present.
    '''

    lowVoltageLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The bus bar's low voltage limit.
            The limit applies to all equipment and nodes contained in a given VoltageLevel.
            It is not required that it is exchanged in pair with highVoltageLimit.
            It is preferable to use operational VoltageLimit, which prevails, if present.
            '''

        })
    '''
    The bus bar's low voltage limit.
    The limit applies to all equipment and nodes contained in a given VoltageLevel.
    It is not required that it is exchanged in pair with highVoltageLimit.
    It is preferable to use operational VoltageLimit, which prevails, if
    present.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.VoltageLevel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The base voltage used for all equipment within the voltage level.
            '''

        })
    '''
    The base voltage used for all equipment within the voltage level.
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.VoltageLevels',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The substation of the voltage level.
            '''

        })
    '''
    The substation of the voltage level.
    '''

    Bays: list[Bay] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bay.VoltageLevel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The bays within this voltage level.
            '''

        })
    '''
    The bays within this voltage level.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ControlArea(PowerSystemResource):
    '''
    A control area is a grouping of generating units and/or loads and a cutset
    of tie lines (as terminals) which may be used for a variety of purposes
    including automatic generation control, power flow solution area interchange
    control specification, and input to load forecasting. All generation and
    load within the area defined by the terminals on the border are considered
    in the area interchange control. Note that any number of overlapping control
    area specifications may be superimposed on the physical model. The following
    general principles apply to ControlArea:
    1. The control area orientation for net interchange is positive for an
    import, negative for an export.
    2. The control area net interchange is determined by summing flows in Terminals.
    The Terminals are identified by creating a set of TieFlow objects associated
    with a ControlArea object. Each TieFlow object identifies one Terminal.
    3. In a single network model, a tie between two control areas must be modelled
    in both control area specifications, such that the two representations
    of the tie flow sum to zero.
    4. The normal orientation of Terminal flow is positive for flow into the
    conducting equipment that owns the Terminal. (i.e. flow from a bus into
    a device is positive.) However, the orientation of each flow in the control
    area specification must align with the control area convention, i.e. import
    is positive. If the orientation of the Terminal flow referenced by a TieFlow
    is positive into the control area, then this is confirmed by setting TieFlow.positiveFlowIn
    flag TRUE. If not, the orientation must be reversed by setting the TieFlow.positiveFlowIn
    flag FALSE.
    '''

    netInterchange: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The specified positive net interchange into the control area, i.e. positive
            sign means flow into the area.
            '''

        })
    '''
    The specified positive net interchange into the control area, i.e.
    positive sign means flow into the area.
    '''

    pTolerance: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power net interchange tolerance. The attribute shall be a positive
            value or zero.
            '''

        })
    '''
    Active power net interchange tolerance. The attribute shall be a positive
    value or zero.
    '''

    type: Optional[ControlAreaTypeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The primary type of control area definition used to determine if this is
            used for automatic generation control, for planning interchange control,
            or other purposes. A control area specified with primary type of automatic
            generation control could still be forecast and used as an interchange area
            in power flow analysis.
            '''

        })
    '''
    The primary type of control area definition used to determine if this
    is used for automatic generation control, for planning interchange
    control, or other purposes. A control area specified with primary type
    of automatic generation control could still be forecast and used as
    an interchange area in power flow analysis.
    '''

    AreaInterchangeController: Optional[AreaInterchangeController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AreaInterchangeController.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Area interchange controller for this control area.
            '''

        })
    '''
    Area interchange controller for this control area.
    '''

    EnergyArea: Optional[EnergyArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyArea.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The energy area that is forecast from this control area specification.
            '''

        })
    '''
    The energy area that is forecast from this control area specification.
    '''

    PowerFrequencyController: Optional[PowerFrequencyController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerFrequencyController.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power frequency controller for this control area.
            '''

        })
    '''
    Power frequency controller for this control area.
    '''

    ControlAreaGeneratingUnit: list[ControlAreaGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaGeneratingUnit.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The generating unit specifications for the control area.
            '''

        })
    '''
    The generating unit specifications for the control area.
    '''

    ControlAreaPowerElectronicsUnit: list[ControlAreaPowerElectronicsUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaPowerElectronicsUnit.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The parent control area for the power electronics unit specifications.
            '''

        })
    '''
    The parent control area for the power electronics unit specifications.
    '''

    EnergyArea: Optional[EnergyArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyArea.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The energy area that is forecast from this control area specification.
            '''

        })
    '''
    The energy area that is forecast from this control area specification.
    '''

    TieFlow: list[TieFlow] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieFlow.ControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The tie flows associated with the control area.
            '''

        })
    '''
    The tie flows associated with the control area.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCBiPole(PowerSystemResource):
    '''
    DC system bipole (IEC 60633), which is part of an DC system consisting
    of two independently operable DC system poles, which during normal operation,
    exhibit opposite direct voltage polarities with respect to earth.
    '''

    BipolarDCSystem: Optional[BipolarDCSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BipolarDCSystem.DCBiPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Bipolar DC system that has this DC bipole.
            '''

        })
    '''
    Bipolar DC system that has this DC bipole.
    '''

    BipolarDCSystem: Optional[BipolarDCSystem] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BipolarDCSystem.DCBiPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Bipolar DC system that has this DC bipole.
            '''

        })
    '''
    Bipolar DC system that has this DC bipole.
    '''

    DCPole: list[DCPole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCPole.DCBiPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC pole part of the DC system bipole.
            '''

        })
    '''
    DC pole part of the DC system bipole.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCPole(PowerSystemResource):
    '''
    The direct current (DC) system pole (IEC 60633) is part of a DC system
    consisting of all the equipment in the DC substations and the interconnecting
    transmission lines, if any, which during normal operation exhibit a common
    direct voltage polarity with respect to earth.
    '''

    normalParticipationFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal participation factor describing the entity part of the active power
            provided by a collection of entities (e.g. an active power forecast to
            a collection of entities is divided to each of the member entity according
            to the participation factor). Must be a positive value.
            In the case of a sharing strategy, the distribution is following entities
            value (V) equals aggregated value (T) divided by sum of participation factors
            (PF), i.e. V=T/sum(PF).
            In the case of priority strategy, the item with the lowest number gets
            allocated energy first.
            '''

        })
    '''
    Normal participation factor describing the entity part of the active
    power provided by a collection of entities (e.g. an active power forecast
    to a collection of entities is divided to each of the member entity
    according to the participation factor). Must be a positive value.
    In the case of a sharing strategy, the distribution is following entities
    value (V) equals aggregated value (T) divided by sum of participation
    factors (PF), i.e. V=T/sum(PF).
    In the case of priority strategy, the item with the lowest number gets
    allocated energy first.
    '''

    participationFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Participation factor describing the entity part of the active power provided
            by a collection of entities (e.g. an active power forecast to a collection
            of entities is divided to each of the member entity according to the participation
            factor). Must be a positive value.
            In the case of a sharing strategy, the distribution is following entities
            value (V) equals aggregated value (T) divided by sum of participation factors
            (PF), i.e. V=T/sum(PF).
            In the case of priority strategy, the item with the lowest number gets
            allocated energy first.
            '''

        })
    '''
    Participation factor describing the entity part of the active power
    provided by a collection of entities (e.g. an active power forecast
    to a collection of entities is divided to each of the member entity
    according to the participation factor). Must be a positive value.
    In the case of a sharing strategy, the distribution is following entities
    value (V) equals aggregated value (T) divided by sum of participation
    factors (PF), i.e. V=T/sum(PF).
    In the case of priority strategy, the item with the lowest number gets
    allocated energy first.
    '''

    maxEconomicP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum high economic active power limit, that should not exceed the maximum
            operating active power limit.
            '''

        })
    '''
    Maximum high economic active power limit, that should not exceed the
    maximum operating active power limit.
    '''

    minEconomicP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Low economic active power limit that shall be greater than or equal to
            the minimum operating active power limit.
            '''

        })
    '''
    Low economic active power limit that shall be greater than or equal
    to the minimum operating active power limit.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            '''

        })
    '''
    Active power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    '''

    AsymmetricMonopolarDCSystem: Optional[MonopolarDCSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MonopolarDCSystem.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asymmetric monopolar DC system that has this DC pole.
            '''

        })
    '''
    Asymmetric monopolar DC system that has this DC pole.
    '''

    DCBiPole: Optional[DCBiPole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCBiPole.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC system bipole that has two independently operatable DC system poles.
            '''

        })
    '''
    DC system bipole that has two independently operatable DC system poles.
    '''

    DCLine: Optional[DCLine] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCLine.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC line that is related to this DC pole.
            '''

        })
    '''
    The DC line that is related to this DC pole.
    '''

    DCTieCorridor: Optional[DCTieCorridor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTieCorridor.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DCTieCorridor that has this DC pole.
            '''

        })
    '''
    The DCTieCorridor that has this DC pole.
    '''

    DirectCurrentPoleController: Optional[DirectCurrentPoleController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DirectCurrentPoleController.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC pole controller that controls this DC pole.
            '''

        })
    '''
    DC pole controller that controls this DC pole.
    '''

    DCConverterUnit: list[DCConverterUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCConverterUnit.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC converter unit that relates to this DC pole.
            '''

        })
    '''
    The DC converter unit that relates to this DC pole.
    '''

    DCLine: Optional[DCLine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCLine.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC line that is related to this DC pole.
            '''

        })
    '''
    The DC line that is related to this DC pole.
    '''

    AsymmetricMonopolarDCSystem: Optional[MonopolarDCSystem] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MonopolarDCSystem.DCPole',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Asymmetric monopolar DC system that has this DC pole.
            '''

        })
    '''
    Asymmetric monopolar DC system that has this DC pole.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSystem(PowerSystemResource):
    '''
    Electrical power system which transfers energy in the form of direct current
    between two or more AC buses (defined in IEC 60633).
    '''

    directionKind: Optional[DCSystemDirectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Direction kind of the DC system.
            '''

        })
    '''
    Direction kind of the DC system.
    '''

    transmissionKind: Optional[DCSystemTransmissionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transmission kind of the DC system.
            '''

        })
    '''
    Transmission kind of the DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BipolarDCSystem(DCSystem):
    '''
    Bipolar DC system (IEC 60633) consists of two poles of opposite polarity
    with respect to earth. The overhead lines, if any, of the two poles may
    be carried on common or separate towers.
    '''

    isRigid: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, the bipolar DC system is a rigid DC current bipolar system (IEC
            60633). It is a bipolar DC system without neutral connection between both
            converter stations. Since only two (pole) conductors exist, no unbalance
            current between both poles is possible. In case of interruption of power
            transfer of one converter pole, the current of the other pole has to be
            interrupted as well (at least for a limited time to allow reconfiguration
            of the DC circuit).
            '''

        })
    '''
    If true, the bipolar DC system is a rigid DC current bipolar system
    (IEC 60633). It is a bipolar DC system without neutral connection between
    both converter stations. Since only two (pole) conductors exist, no
    unbalance current between both poles is possible. In case of interruption
    of power transfer of one converter pole, the current of the other pole
    has to be interrupted as well (at least for a limited time to allow
    reconfiguration of the DC circuit).
    '''

    DCBiPole: Optional[DCBiPole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCBiPole.BipolarDCSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC bipole that belongs to a bipolar DC system.
            '''

        })
    '''
    DC bipole that belongs to a bipolar DC system.
    '''

    DCBiPole: Optional[DCBiPole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCBiPole.BipolarDCSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC bipole that belongs to a bipolar DC system.
            '''

        })
    '''
    DC bipole that belongs to a bipolar DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MonopolarDCSystem(DCSystem):
    '''
    Monopolar DC system (IEC 60633) is a DC system with only one pole.
    '''

    isSymmetrical: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            if true, the monopolar DC system is symmetrical monopolar DC system (IEC
            60633). It is a DC system with only one symmetrical monopole. A symmetrical
            monopole is part of an DC system consisting of all the equipment in the
            DC substations and the interconnecting transmission lines, if any, which
            during normal operation exhibits equal and opposite direct voltage polarities
            with respect to earth but without series connection of converters in each
            converter station. The term "symmetrical monopole" is used even though
            there are two polarities with DC voltages, because with only one converter
            it is not possible to provide the redundancy which is normally associated
            with the term "bipole".
            '''

        })
    '''
    if true, the monopolar DC system is symmetrical monopolar DC system
    (IEC 60633). It is a DC system with only one symmetrical monopole.
    A symmetrical monopole is part of an DC system consisting of all the
    equipment in the DC substations and the interconnecting transmission
    lines, if any, which during normal operation exhibits equal and opposite
    direct voltage polarities with respect to earth but without series
    connection of converters in each converter station. The term "symmetrical
    monopole" is used even though there are two polarities with DC voltages,
    because with only one converter it is not possible to provide the redundancy
    which is normally associated with the term "bipole".
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.AsymmetricMonopolarDCSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC pole part of the asymmetric DC system.
            '''

        })
    '''
    DC pole part of the asymmetric DC system.
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.AsymmetricMonopolarDCSystem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC pole part of the asymmetric DC system.
            '''

        })
    '''
    DC pole part of the asymmetric DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyConsumerPhase(PowerSystemResource):
    '''
    A single phase of an energy consumer.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power of the load. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            For voltage dependent loads the value is at rated voltage.
            Starting value for a steady state solution.
            '''

        })
    '''
    Active power of the load. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    For voltage dependent loads the value is at rated voltage.
    Starting value for a steady state solution.
    '''

    pfixed: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power of the load that is a fixed quantity. Load sign convention
            is used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Active power of the load that is a fixed quantity. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    '''

    pfixedPct: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed active power as per cent of load group fixed active power. Load sign
            convention is used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Fixed active power as per cent of load group fixed active power. Load
    sign convention is used, i.e. positive sign means flow out from a node.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power of the load. Load sign convention is used, i.e. positive
            sign means flow out from a node.
            For voltage dependent loads the value is at rated voltage.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power of the load. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    For voltage dependent loads the value is at rated voltage.
    Starting value for a steady state solution.
    '''

    qfixed: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power of the load that is a fixed quantity. Load sign convention
            is used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Reactive power of the load that is a fixed quantity. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    '''

    qfixedPct: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed reactive power as per cent of load group fixed reactive power. Load
            sign convention is used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Fixed reactive power as per cent of load group fixed reactive power.
    Load sign convention is used, i.e. positive sign means flow out from
    a node.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this energy consumer component. If the energy consumer is wye
            connected, the connection is from the indicated phase to the central ground
            or neutral point. If the energy consumer is delta connected, the phase
            indicates an energy consumer connected from the indicated phase to the
            next logical non-neutral phase.
            '''

        })
    '''
    Phase of this energy consumer component. If the energy consumer is
    wye connected, the connection is from the indicated phase to the central
    ground or neutral point. If the energy consumer is delta connected,
    the phase indicates an energy consumer connected from the indicated
    phase to the next logical non-neutral phase.
    '''

    EnergyConsumer: Optional[EnergyConsumer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumer.EnergyConsumerPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The energy consumer to which this phase belongs.
            '''

        })
    '''
    The energy consumer to which this phase belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergySourcePhase(PowerSystemResource):
    '''
    Represents the single phase information of an unbalanced energy source.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this energy source component. If the energy source wye connected,
            the connection is from the indicated phase to the central ground or neutral
            point. If the energy source is delta connected, the phase indicates an
            energy source connected from the indicated phase to the next logical non-neutral
            phase.
            '''

        })
    '''
    Phase of this energy source component. If the energy source wye connected,
    the connection is from the indicated phase to the central ground or
    neutral point. If the energy source is delta connected, the phase indicates
    an energy source connected from the indicated phase to the next logical
    non-neutral phase.
    '''

    EnergySource: Optional[EnergySource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySource.EnergySourcePhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The energy sourceto which the phase belongs.
            '''

        })
    '''
    The energy sourceto which the phase belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Equipment(PowerSystemResource):
    '''
    The parts of a power system that are physical devices, electronic or mechanical.
    '''

    aggregate: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The aggregate flag provides an alternative way of representing an aggregated
            (equivalent) element. It is applicable in cases when the dedicated classes
            for equivalent equipment do not have all of the attributes necessary to
            represent the required level of detail. In case the flag is set to "true"
            the single instance of equipment represents multiple pieces of equipment
            that have been modelled together as an aggregate equivalent obtained by
            a network reduction procedure. Examples would be power transformers or
            synchronous machines operating in parallel modelled as a single aggregate
            power transformer or aggregate synchronous machine.
            The attribute is not used for EquivalentBranch, EquivalentShunt, EquivalentInjection
            and ExternalNetworkInjection.
            '''

        })
    '''
    The aggregate flag provides an alternative way of representing an aggregated
    (equivalent) element. It is applicable in cases when the dedicated
    classes for equivalent equipment do not have all of the attributes
    necessary to represent the required level of detail. In case the flag
    is set to "true" the single instance of equipment represents multiple
    pieces of equipment that have been modelled together as an aggregate
    equivalent obtained by a network reduction procedure. Examples would
    be power transformers or synchronous machines operating in parallel
    modelled as a single aggregate power transformer or aggregate synchronous
    machine.
    The attribute is not used for EquivalentBranch, EquivalentShunt, EquivalentInjection
    and ExternalNetworkInjection.
    '''

    inService: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the availability of the equipment. True means the equipment is
            available for topology processing, which determines if the equipment is
            energized or not. False means that the equipment is treated by network
            applications as if it is not in the model.
            '''

        })
    '''
    Specifies the availability of the equipment. True means the equipment
    is available for topology processing, which determines if the equipment
    is energized or not. False means that the equipment is treated by network
    applications as if it is not in the model.
    '''

    networkAnalysisEnabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The equipment is enabled to participate in network analysis. If unspecified,
            the value is assumed to be true.
            '''

        })
    '''
    The equipment is enabled to participate in network analysis. If unspecified,
    the value is assumed to be true.
    '''

    normallyInService: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the availability of the equipment under normal operating conditions.
            True means the equipment is available for topology processing, which determines
            if the equipment is energized or not. False means that the equipment is
            treated by network applications as if it is not in the model.
            '''

        })
    '''
    Specifies the availability of the equipment under normal operating
    conditions. True means the equipment is available for topology processing,
    which determines if the equipment is energized or not. False means
    that the equipment is treated by network applications as if it is not
    in the model.
    '''

    AdditionalEquipmentContainer: list[EquipmentContainer] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquipmentContainer.AdditionalGroupedEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Additional equipment container beyond the primary equipment container.
            The equipment is contained in another equipment container, but also grouped
            with this equipment container.
            '''

        })
    '''
    Additional equipment container beyond the primary equipment container.
    The equipment is contained in another equipment container, but also
    grouped with this equipment container.
    '''

    EquipmentContainer: Optional[EquipmentContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EquipmentContainer.Equipments',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Container of this equipment.
            '''

        })
    '''
    Container of this equipment.
    '''

    OperationalLimitSet: list[OperationalLimitSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitSet.Equipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit sets associated with this equipment.
            '''

        })
    '''
    The operational limit sets associated with this equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AuxiliaryEquipment(Equipment):
    '''
    AuxiliaryEquipment describe equipment that is not performing any primary
    functions but support for the equipment performing the primary function.
    AuxiliaryEquipment is attached to primary equipment via an association
    with Terminal.
    This class is for AC equipment only.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.AuxiliaryEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The Terminal at the equipment where the AuxiliaryEquipment is attached.
            '''

        })
    '''
    The Terminal at the equipment where the AuxiliaryEquipment is attached.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FaultIndicator(AuxiliaryEquipment):
    '''
    A FaultIndicator is typically only an indicator (which may or may not be
    remotely monitored), and not a piece of equipment that actually initiates
    a protection event. It is used for FLISR (Fault Location, Isolation and
    Restoration) purposes, assisting with the dispatch of crews to "most likely"
    part of the network (i.e. assists with determining circuit section where
    the fault most likely happened).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Sensor(AuxiliaryEquipment):
    '''
    This class describe devices that transform a measured quantity into signals
    that can be presented at displays, used in control or be recorded.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentTransformer(Sensor):
    '''
    Instrument transformer used to measure electrical qualities of the circuit
    that is being protected and/or monitored. Typically used as current transducer
    for the purpose of metering or protection. A typical secondary current
    rating would be 5A.
    '''

    usage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Intended usage of the CT; i.e. metering, protection.
            '''

        })
    '''
    Intended usage of the CT; i.e. metering, protection.
    '''

    accuracyLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Percent of rated current for which the CT remains accurate within specified
            limits.
            '''

        })
    '''
    Percent of rated current for which the CT remains accurate within specified
    limits.
    '''

    coreBurden: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power burden of the CT core.
            '''

        })
    '''
    Power burden of the CT core.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PostLineSensor(Sensor):
    '''
    A sensor used mainly in overhead distribution networks as the source of
    both current and voltage measurements.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PotentialTransformer(Sensor):
    '''
    Instrument transformer (also known as Voltage Transformer) used to measure
    electrical qualities of the circuit that is being protected and/or monitored.
    Typically used as voltage transducer for the purpose of metering, protection,
    or sometimes auxiliary substation supply. A typical secondary voltage rating
    would be 120V.
    '''

    nominalRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nominal ratio between the primary and secondary voltage.
            '''

        })
    '''
    Nominal ratio between the primary and secondary voltage.
    '''

    type: Optional[PotentialTransformerKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Potential transformer construction type.
            '''

        })
    '''
    Potential transformer construction type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SurgeArrester(AuxiliaryEquipment):
    '''
    Shunt device, installed on the network, usually in the proximity of electrical
    equipment in order to protect the said equipment against transient voltage
    transients caused by lightning or switching activity.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WaveTrap(AuxiliaryEquipment):
    '''
    Wave traps are devices that impede high frequency power line carrier signals
    yet present a negligible impedance at the main power frequency.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class CompositeSwitch(Equipment):
    '''
    A model of a set of individual Switches normally enclosed within the same
    cabinet and possibly with interlocks that restrict the combination of switch
    positions. These are typically found in medium voltage distribution networks.
    A CompositeSwitch could represent a Ring-Main-Unit (RMU), or pad-mounted
    switchgear, with primitive internal devices such as an internal bus-bar
    plus 3 or 4 internal switches each of which may individually be open or
    closed. A CompositeSwitch and a set of contained Switches can also be used
    to represent a multi-position switch e.g. a switch that can connect a circuit
    to Ground, Open or Busbar.
    '''

    compositeSwitchType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An alphanumeric code that can be used as a reference to extra information
            such as the description of the interlocking scheme if any.
            '''

        })
    '''
    An alphanumeric code that can be used as a reference to extra information
    such as the description of the interlocking scheme if any.
    '''

    Switches: list[Switch] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Switch.CompositeSwitch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Switches contained in this Composite switch.
            '''

        })
    '''
    Switches contained in this Composite switch.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConductingEquipment(Equipment):
    '''
    The parts of the AC power system that are designed to carry current or
    that are conductively connected through terminals.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.ConductingEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Base voltage of this conducting equipment. Use only when there is no voltage
            level container used and only one base voltage applies. For example, not
            used for transformers.
            '''

        })
    '''
    Base voltage of this conducting equipment. Use only when there is no
    voltage level container used and only one base voltage applies. For
    example, not used for transformers.
    '''

    GroundingAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.GroundedEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action involving grounding operation on this conducting equipment.
            '''

        })
    '''
    Action involving grounding operation on this conducting equipment.
    '''

    JumpingAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.JumpedEquipments',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Jumper action involving jumping operation on this conducting equipment.
            '''

        })
    '''
    Jumper action involving jumping operation on this conducting equipment.
    '''

    Outage: Optional[Outage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Outage.OutageIsolationEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SvStatus: list[SvStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvStatus.ConductingEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The status state variable associated with this conducting equipment.
            '''

        })
    '''
    The status state variable associated with this conducting equipment.
    '''

    Terminals: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.ConductingEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Conducting equipment have terminals that may be connected to other conducting
            equipment terminals via connectivity nodes or topological nodes.
            '''

        })
    '''
    Conducting equipment have terminals that may be connected to other
    conducting equipment terminals via connectivity nodes or topological
    nodes.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class ACDCConverter(ConductingEquipment):
    '''
    A unit with valves for three phases, together with unit control equipment,
    essential protective and switching devices, DC storage capacitors, phase
    reactors and auxiliaries, if any, used for conversion.
    '''

    numberOfValves: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of valves in the converter. Used in loss calculations.
            '''

        })
    '''
    Number of valves in the converter. Used in loss calculations.
    '''

    baseS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Base apparent power of the converter pole. The attribute shall be a positive
            value.
            '''

        })
    '''
    Base apparent power of the converter pole. The attribute shall be a
    positive value.
    '''

    idc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Converter DC current, also called Id. It is converter's state variable,
            result from power flow.
            '''

        })
    '''
    Converter DC current, also called Id. It is converter's state variable,
    result from power flow.
    '''

    idleLoss: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power loss in pole at no power transfer. It is the converter's configuration
            data used in power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Active power loss in pole at no power transfer. It is the converter's
    configuration data used in power flow. The attribute shall be a positive
    value.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum active power limit. The value is overwritten by values of VsCapabilityCurve,
            if present.
            '''

        })
    '''
    Maximum active power limit. The value is overwritten by values of VsCapabilityCurve,
    if present.
    '''

    maxUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum voltage on the DC side at which the converter should operate.
            It is the converter's configuration data used in power flow. The attribute
            shall be a positive value.
            '''

        })
    '''
    The maximum voltage on the DC side at which the converter should operate.
    It is the converter's configuration data used in power flow. The attribute
    shall be a positive value.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum active power limit. The value is overwritten by values of VsCapabilityCurve,
            if present.
            '''

        })
    '''
    Minimum active power limit. The value is overwritten by values of VsCapabilityCurve,
    if present.
    '''

    minUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum voltage on the DC side at which the converter should operate.
            It is the converter's configuration data used in power flow. The attribute
            shall be a positive value.
            '''

        })
    '''
    The minimum voltage on the DC side at which the converter should operate.
    It is the converter's configuration data used in power flow. The attribute
    shall be a positive value.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power at the point of common coupling. Load sign convention is used,
            i.e. positive sign means flow out from a node.
            Starting value for a steady state solution in the case a simplified power
            flow model is used.
            '''

        })
    '''
    Active power at the point of common coupling. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    Starting value for a steady state solution in the case a simplified
    power flow model is used.
    '''

    poleLossP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power loss at a DC Pole
            = idleLoss + switchingLoss*|Idc| + resitiveLoss*Idc^2.
            For lossless operation Pdc=Pac.
            For rectifier operation with losses Pdc=Pac-lossP.
            For inverter operation with losses Pdc=Pac+lossP.
            It is converter's state variable used in power flow. The attribute shall
            be a positive value.
            '''

        })
    '''
    The active power loss at a DC Pole
    = idleLoss + switchingLoss*|Idc| + resitiveLoss*Idc^2.
    For lossless operation Pdc=Pac.
    For rectifier operation with losses Pdc=Pac-lossP.
    For inverter operation with losses Pdc=Pac+lossP.
    It is converter's state variable used in power flow. The attribute
    shall be a positive value.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power at the point of common coupling. Load sign convention is
            used, i.e. positive sign means flow out from a node.
            Starting value for a steady state solution in the case a simplified power
            flow model is used.
            '''

        })
    '''
    Reactive power at the point of common coupling. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    Starting value for a steady state solution in the case a simplified
    power flow model is used.
    '''

    ratedUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated converter DC voltage, also called UdN. The attribute shall be a positive
            value. It is the converter's configuration data used in power flow. For
            instance a bipolar DC link with value 200 kV has a 400kV difference between
            the dc lines.
            '''

        })
    '''
    Rated converter DC voltage, also called UdN. The attribute shall be
    a positive value. It is the converter's configuration data used in
    power flow. For instance a bipolar DC link with value 200 kV has a
    400kV difference between the dc lines.
    '''

    resistiveLoss: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            It is the converter's configuration data used in power flow. Refer to poleLossP.
            The attribute shall be a positive value.
            '''

        })
    '''
    It is the converter's configuration data used in power flow. Refer
    to poleLossP. The attribute shall be a positive value.
    '''

    switchingLoss: Optional[ float | ActivePowerPerCurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Switching losses, relative to the base apparent power 'baseS'. Refer to
            poleLossP. The attribute shall be a positive value.
            '''

        })
    '''
    Switching losses, relative to the base apparent power 'baseS'. Refer
    to poleLossP. The attribute shall be a positive value.
    '''

    targetPpcc: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Real power injection target in AC grid, at point of common coupling. Load
            sign convention is used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Real power injection target in AC grid, at point of common coupling.
    Load sign convention is used, i.e. positive sign means flow out from
    a node.
    '''

    targetUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Target value for DC voltage magnitude. The attribute shall be a positive
            value.
            '''

        })
    '''
    Target value for DC voltage magnitude. The attribute shall be a positive
    value.
    '''

    uc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line-to-line converter voltage, the voltage at the AC side of the valve.
            It is converter's state variable, result from power flow. The attribute
            shall be a positive value.
            '''

        })
    '''
    Line-to-line converter voltage, the voltage at the AC side of the valve.
    It is converter's state variable, result from power flow. The attribute
    shall be a positive value.
    '''

    udc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Converter voltage at the DC side, also called Ud. It is converter's state
            variable, result from power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Converter voltage at the DC side, also called Ud. It is converter's
    state variable, result from power flow. The attribute shall be a positive
    value.
    '''

    valveU0: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Valve threshold voltage, also called Uvalve. Forward voltage drop when
            the valve is conducting. Used in loss calculations, i.e. the switchLoss
            depend on numberOfValves*valveU0.
            '''

        })
    '''
    Valve threshold voltage, also called Uvalve. Forward voltage drop when
    the valve is conducting. Used in loss calculations, i.e. the switchLoss
    depend on numberOfValves*valveU0.
    '''

    ACDCConverterController: Optional[ACDCConverterController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACDCConverterController.ACDCConverter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Direct current controller which controls the ACDC converter.
            '''

        })
    '''
    Direct current controller which controls the ACDC converter.
    '''

    PccTerminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.ConverterDCSides',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Point of common coupling terminal for this converter DC side. It is typically
            the terminal on the power transformer (or switch) closest to the AC network.
            '''

        })
    '''
    Point of common coupling terminal for this converter DC side. It is
    typically the terminal on the power transformer (or switch) closest
    to the AC network.
    '''

    DCTerminals: list[ACDCConverterDCTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACDCConverterDCTerminal.DCConductingEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A DC converter have DC converter terminals. A converter has two DC converter
            terminals.
            '''

        })
    '''
    A DC converter have DC converter terminals. A converter has two DC
    converter terminals.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CsConverter(ACDCConverter):
    '''
    DC side of the current source converter (CSC).
    The firing angle controls the dc voltage at the converter, both for rectifier
    and inverter. The difference between the dc voltages of the rectifier and
    inverter determines the dc current. The extinction angle is used to limit
    the dc voltage at the inverter, if needed, and is not used in active power
    control. The firing angle, transformer tap position and number of connected
    filters are the primary means to control a current source dc line. Higher
    level controls are built on top, e.g. DC voltage, dc current and active
    power. From a steady state perspective it is sufficient to specify the
    desired active power transfer (ACDCConverter.targetPpcc) and the control
    functions will set the dc voltage, dc current, firing angle, transformer
    tap position and number of connected filters to meet this. Therefore attributes
    targetAlpha and targetGamma are not applicable in this case.
    Attributes targetAlpha and targetGamma are mutually exclusive therefore
    only one of them can be defined to describe an operating target.
    The reactive power consumed by the converter is a function of the firing
    angle, transformer tap position and number of connected filter, which can
    be approximated with half of the active power. The losses are a function
    of the dc voltage and dc current.
    The attributes minAlpha and maxAlpha define the range of firing angles
    for rectifier operation between which no discrete tap changer action takes
    place. The range is typically 10 to 18 degrees.
    The attributes minGamma and maxGamma define the range of extinction angles
    for inverter operation between which no discrete tap changer action takes
    place. The range is typically 17 to 20 degrees.
    '''

    alpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Firing angle that determines the DC voltage at the converter DC terminal.
            Typical value between 10 degrees and 18 degrees for a rectifier. It is
            converter's state variable, result from power flow. The attribute shall
            be a positive value.
            '''

        })
    '''
    Firing angle that determines the DC voltage at the converter DC terminal.
    Typical value between 10 degrees and 18 degrees for a rectifier. It
    is converter's state variable, result from power flow. The attribute
    shall be a positive value.
    '''

    gamma: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Extinction angle. It is used to limit the DC voltage at the inverter if
            needed. Typical value between 17 degrees and 20 degrees for an inverter.
            It is converter's state variable, result from power flow. The attribute
            shall be a positive value.
            '''

        })
    '''
    Extinction angle. It is used to limit the DC voltage at the inverter
    if needed. Typical value between 17 degrees and 20 degrees for an inverter.
    It is converter's state variable, result from power flow. The attribute
    shall be a positive value.
    '''

    maxAlpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum firing angle. It is the converter's configuration data used in
            power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Maximum firing angle. It is the converter's configuration data used
    in power flow. The attribute shall be a positive value.
    '''

    maxGamma: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum extinction angle. It is the converter's configuration data used
            in power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Maximum extinction angle. It is the converter's configuration data
    used in power flow. The attribute shall be a positive value.
    '''

    maxIdc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum direct current (Id) on the DC side at which the converter should
            operate. It is the converter's configuration data use in power flow. The
            attribute shall be a positive value.
            '''

        })
    '''
    The maximum direct current (Id) on the DC side at which the converter
    should operate. It is the converter's configuration data use in power
    flow. The attribute shall be a positive value.
    '''

    minAlpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum firing angle. It is the converter's configuration data used in
            power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Minimum firing angle. It is the converter's configuration data used
    in power flow. The attribute shall be a positive value.
    '''

    minGamma: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum extinction angle. It is the converter's configuration data used
            in power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Minimum extinction angle. It is the converter's configuration data
    used in power flow. The attribute shall be a positive value.
    '''

    minIdc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum direct current (Id) on the DC side at which the converter should
            operate. It is the converter's configuration data used in power flow. The
            attribute shall be a positive value.
            '''

        })
    '''
    The minimum direct current (Id) on the DC side at which the converter
    should operate. It is the converter's configuration data used in power
    flow. The attribute shall be a positive value.
    '''

    ratedIdc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated converter DC current, also called IdN. The attribute shall be a positive
            value. It is the converter's configuration data used in power flow.
            '''

        })
    '''
    Rated converter DC current, also called IdN. The attribute shall be
    a positive value. It is the converter's configuration data used in
    power flow.
    '''

    targetAlpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Target firing angle. It is converter's control variable used in power flow.
            It is only applicable for rectifier control. Allowed values are within
            the range minAlpha&lt;=targetAlpha&lt;=maxAlpha. The attribute shall be
            a positive value.
            '''

        })
    '''
    Target firing angle. It is converter's control variable used in power
    flow. It is only applicable for rectifier control. Allowed values are
    within the range minAlpha&lt;=targetAlpha&lt;=maxAlpha. The attribute
    shall be a positive value.
    '''

    targetGamma: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Target extinction angle. It is converter's control variable used in power
            flow. It is only applicable for inverter control. Allowed values are within
            the range minGamma&lt;=targetGamma&lt;=maxGamma. The attribute shall be
            a positive value.
            '''

        })
    '''
    Target extinction angle. It is converter's control variable used in
    power flow. It is only applicable for inverter control. Allowed values
    are within the range minGamma&lt;=targetGamma&lt;=maxGamma. The attribute
    shall be a positive value.
    '''

    targetIdc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DC current target value. It is converter's control variable used in power
            flow. The attribute shall be a positive value.
            '''

        })
    '''
    DC current target value. It is converter's control variable used in
    power flow. The attribute shall be a positive value.
    '''

    operatingMode: Optional[CsOperatingModeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether the DC pole is operating as an inverter or as a rectifier.
            It is converter's control variable used in power flow.
            '''

        })
    '''
    Indicates whether the DC pole is operating as an inverter or as a rectifier.
    It is converter's control variable used in power flow.
    '''

    pPccControl: Optional[CsPpccControlKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of active power control.
            '''

        })
    '''
    Kind of active power control.
    '''

    CSCDynamics: Optional[CSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CSCDynamics.CSConverter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Current source converter dynamics model used to describe dynamic behaviour
            of this converter.
            '''

        })
    '''
    Current source converter dynamics model used to describe dynamic behaviour
    of this converter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VsConverter(ACDCConverter):
    '''
    DC side of the voltage source converter (VSC).
    '''

    maxModulationIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum quotient between the AC converter voltage (Uc) and DC voltage
            (Ud). A factor typically less than 1. It is converter's configuration data
            used in power flow.
            '''

        })
    '''
    The maximum quotient between the AC converter voltage (Uc) and DC voltage
    (Ud). A factor typically less than 1. It is converter's configuration
    data used in power flow.
    '''

    targetPowerFactorPcc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power factor target at the AC side, at point of common coupling. The attribute
            shall be a positive value.
            '''

        })
    '''
    Power factor target at the AC side, at point of common coupling. The
    attribute shall be a positive value.
    '''

    targetPWMfactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnitude of pulse-modulation factor. The attribute shall be a positive
            value.
            '''

        })
    '''
    Magnitude of pulse-modulation factor. The attribute shall be a positive
    value.
    '''

    delta: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Angle between VsConverter.uv and ACDCConverter.uc. It is converter's state
            variable used in power flow. The attribute shall be a positive value or
            zero.
            '''

        })
    '''
    Angle between VsConverter.uv and ACDCConverter.uc. It is converter's
    state variable used in power flow. The attribute shall be a positive
    value or zero.
    '''

    droop: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Droop constant. The pu value is obtained as D [kV/MW] * Sb / Ubdc. The
            attribute shall be a positive value.
            '''

        })
    '''
    Droop constant. The pu value is obtained as D [kV/MW] * Sb / Ubdc.
    The attribute shall be a positive value.
    '''

    droopCompensation: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Compensation constant. Used to compensate for voltage drop when controlling
            voltage at a distant bus. The attribute shall be a positive value.
            '''

        })
    '''
    Compensation constant. Used to compensate for voltage drop when controlling
    voltage at a distant bus. The attribute shall be a positive value.
    '''

    maxValveCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum current through a valve. It is converter's configuration data.
            '''

        })
    '''
    The maximum current through a valve. It is converter's configuration
    data.
    '''

    qShare: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power sharing factor among parallel converters on Uac control.
            The attribute shall be a positive value or zero.
            '''

        })
    '''
    Reactive power sharing factor among parallel converters on Uac control.
    The attribute shall be a positive value or zero.
    '''

    targetPhasePcc: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase target at AC side, at point of common coupling. The attribute shall
            be a positive value.
            '''

        })
    '''
    Phase target at AC side, at point of common coupling. The attribute
    shall be a positive value.
    '''

    targetQpcc: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection target in AC grid, at point of common coupling.
            Load sign convention is used, i.e. positive sign means flow out from a
            node.
            '''

        })
    '''
    Reactive power injection target in AC grid, at point of common coupling.
    Load sign convention is used, i.e. positive sign means flow out from
    a node.
    '''

    targetUpcc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage target in AC grid, at point of common coupling. The attribute shall
            be a positive value.
            '''

        })
    '''
    Voltage target in AC grid, at point of common coupling. The attribute
    shall be a positive value.
    '''

    uv: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line-to-line voltage on the valve side of the converter transformer. It
            is converter's state variable, result from power flow. The attribute shall
            be a positive value.
            '''

        })
    '''
    Line-to-line voltage on the valve side of the converter transformer.
    It is converter's state variable, result from power flow. The attribute
    shall be a positive value.
    '''

    pPccControl: Optional[VsPpccControlKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of control of real power and/or DC voltage.
            '''

        })
    '''
    Kind of control of real power and/or DC voltage.
    '''

    qPccControl: Optional[VsQpccControlKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of reactive power control.
            '''

        })
    '''
    Kind of reactive power control.
    '''

    VSCDynamics: Optional[VSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCDynamics.VsConverter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage source converter dynamics model used to describe dynamic behaviour
            of this converter.
            '''

        })
    '''
    Voltage source converter dynamics model used to describe dynamic behaviour
    of this converter.
    '''

    CapabilityCurve: list[VsCapabilityCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VsCapabilityCurve.VsConverter',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Capability curve of this converter.
            '''

        })
    '''
    Capability curve of this converter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Clamp(ConductingEquipment):
    '''
    A Clamp is a galvanic connection at a line segment where other equipment
    is connected. A Clamp does not cut the line segment.
    A Clamp is ConductingEquipment and has one Terminal with an associated
    ConnectivityNode. Any other ConductingEquipment can be connected to the
    Clamp ConnectivityNode.
    '''

    lengthFromTerminal1: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The length to the place where the clamp is located starting from side one
            of the line segment, i.e. the line segment terminal with sequence number
            equal to 1.
            '''

        })
    '''
    The length to the place where the clamp is located starting from side
    one of the line segment, i.e. the line segment terminal with sequence
    number equal to 1.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.Clamp',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The line segment to which the clamp is connected.
            '''

        })
    '''
    The line segment to which the clamp is connected.
    '''

    ClampAction: Optional[ClampAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClampAction.Clamp',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    JumperAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.Clamp',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Conductor(ConductingEquipment):
    '''
    Combination of conducting material with consistent electrical characteristics,
    building a single electrical system, used to carry current between points
    in the power system.
    '''

    length: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Segment length for calculating line segment capabilities.
            '''

        })
    '''
    Segment length for calculating line segment capabilities.
    '''

    DamageCurve: Optional[ConductorCharacteristicCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductorCharacteristicCurve.Conductor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Damage curve associated to a conductor.
            '''

        })
    '''
    Damage curve associated to a conductor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class ACLineSegment(Conductor):
    '''
    A line segment is a conductor or combination of conductors, with consistent
    electrical characteristics along its length, building a single electrical
    system that carries alternating current between two points in the power
    system.
    The BaseVoltage at the two ends of a line segment shall have the same BaseVoltage.nominalVoltage.
    However, boundary lines may have slightly different BaseVoltage.nominalVoltages
    and variation is allowed. Larger voltage difference in general requires
    use of an equivalent branch.
    Line segment impedances can be either directly described in electrical
    terms or physical line detail can be provided from which impedances can
    be calculated.
    <b>Directly described impedances</b>
    For symmetrical, transposed three phase line segments, it is sufficient
    to use attributes of the line segment, which describe impedances and admittances
    for the entire length of the line segment. Additionally, line segment impedances
    can be computed by using line segment length and associated per length
    impedances.
    Unbalanced modeling of impedances is supported by the per length phase
    impedance matrix (PerLengthPhaseImpedance) in conjunction with phase-to-sequence
    number mapping supplied by either ACLineSegmentPhase or WirePosition. The
    sequence numbers are referenced by the row and column attributes of the
    per length phase impedance matrix. This method enables single-phase and
    two-phase line segments, and transpositions of phases, to be described
    using the same per length phase impedance matrix. The length of the line
    segment is used in the computation of total impedance values for the line
    segment.
    <b>Line detail characteristics</b>
    There are three approaches to providing line detail and all use WireAssembly
    to supply line positions:
    <ul>
    <li>Option 1 - WireAssembly supplies only line positions. ACLineSegmentPhase
    points to wire type and intraphase spacing and supplies the phase-to-sequence
    number mapping.</li>
    <li>Option 2 - WireAssembly supplies line position and, for each position,
    also supplies wire type and intraphase spacing. ACLineSegmentPhase supplies
    the phase-to-sequence number mapping.</li>
    <li>Option 3 - WireAssembly supplies line position and, for each position,
    also supplies wire type and intraphase spacing and phase. WireAssembly
    therefore supplies the phase-to-sequence number mapping and ACLineSegmentPhase
    is not needed.</li>
    </ul>
    '''

    b0ch: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) susceptance, uniformly distributed, of the
            entire line segment.
            '''

        })
    '''
    Zero sequence shunt (charging) susceptance, uniformly distributed,
    of the entire line segment.
    '''

    bch: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance, uniformly distributed,
            of the entire line segment. This value represents the full charging over
            the full length of the line segment.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance, uniformly distributed,
    of the entire line segment. This value represents the full charging
    over the full length of the line segment.
    '''

    g0ch: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) conductance, uniformly distributed, of the
            entire line segment.
            '''

        })
    '''
    Zero sequence shunt (charging) conductance, uniformly distributed,
    of the entire line segment.
    '''

    gch: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance, uniformly distributed,
            of the entire line segment.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance, uniformly distributed,
    of the entire line segment.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance of the entire line segment.
            '''

        })
    '''
    Positive sequence series resistance of the entire line segment.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance of the entire line segment.
            '''

        })
    '''
    Zero sequence series resistance of the entire line segment.
    '''

    shortCircuitEndTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum permitted temperature at the end of SC for the calculation of minimum
            short-circuit currents. Used for short circuit data exchange according
            to IEC 60909.
            '''

        })
    '''
    Maximum permitted temperature at the end of SC for the calculation
    of minimum short-circuit currents. Used for short circuit data exchange
    according to IEC 60909.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance of the entire line segment.
            '''

        })
    '''
    Positive sequence series reactance of the entire line segment.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance of the entire line segment.
            '''

        })
    '''
    Zero sequence series reactance of the entire line segment.
    '''

    LineGroundingAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.AlongACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Ground action involving clamp usage (for the case when the ground is applied
            along the line segment instead of at its terminals).
            '''

        })
    '''
    Ground action involving clamp usage (for the case when the ground is
    applied along the line segment instead of at its terminals).
    '''

    LineJumpingAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.ACLineSegments',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Jumper action involving clamp usage (for the case when the jumper is applied
            along the line segment instead of at its terminals).
            '''

        })
    '''
    Jumper action involving clamp usage (for the case when the jumper is
    applied along the line segment instead of at its terminals).
    '''

    LineSegmentCoupling: Optional[LineSegmentCoupling] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LineSegmentCoupling.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The description of this line's coupling with other lines in a coupled group.
            '''

        })
    '''
    The description of this line's coupling with other lines in a coupled
    group.
    '''

    PerLengthImpedance: Optional[PerLengthImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PerLengthImpedance.ACLineSegments',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Per-length impedance of this line segment.
            '''

        })
    '''
    Per-length impedance of this line segment.
    '''

    WireSpacingInfo: Optional[WireSpacingInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IntraphaseSpacing.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ACLineSegmentPhases: list[ACLineSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegmentPhase.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The line segment phases which belong to the line segment.
            '''

        })
    '''
    The line segment phases which belong to the line segment.
    '''

    Clamp: list[Clamp] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Clamp.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The clamps connected to the line segment.
            '''

        })
    '''
    The clamps connected to the line segment.
    '''

    Cut: list[Cut] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Cut.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Cuts applied to the line segment.
            '''

        })
    '''
    Cuts applied to the line segment.
    '''

    LineSegmentCoupling: Optional[LineSegmentCoupling] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LineSegmentCoupling.ACLineSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The description of this line's coupling with other lines in a coupled group.
            '''

        })
    '''
    The description of this line's coupling with other lines in a coupled
    group.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusSegment(Conductor):
    '''
    A segment of bus conductor between connections to breaker strings, line
    bays, etc
    '''

    Retain: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if retain
            '''

        })
    '''
    True if retain
    '''

    retained: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Bus segment is retained in the topological solution. The flow through retained
            bus sections will normally be calculated in power flow.
            '''

        })
    '''
    Bus segment is retained in the topological solution. The flow through
    retained bus sections will normally be calculated in power flow.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WireSegment(Conductor):
    '''
    A two terminal and power conducting device of negligible impedance and
    length represented as zero impedance device that can be used to connect
    auxiliary equipment to its terminals.
    '''

    WireSegmentPhases: list[WireSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WireSegmentPhase.WireSegment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The wire segment phases which belong to the wire segment.
            '''

        })
    '''
    The wire segment phases which belong to the wire segment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Connector(ConductingEquipment):
    '''
    A conductor, or group of conductors, with negligible impedance, that serve
    to connect other conducting equipment within a single substation and are
    modelled with a single logical terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BusbarSection(Connector):
    '''
    A conductor, or group of conductors, with negligible impedance, that serve
    to connect other conducting equipment within a single substation. The BusbarSection
    class is intended to represent physical parts of bus bars no matter how
    that bus bar is constructed.
    Voltage measurements are typically obtained from voltage transformers that
    are connected to busbar sections. A bus bar section may have many physical
    terminals but for analysis is modelled with exactly one logical terminal.
    '''

    ipMax: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowable peak short-circuit current of busbar (Ipmax in IEC 60909-0).
            Mechanical limit of the busbar in the substation itself. Used for short
            circuit data exchange according to IEC 60909.
            '''

        })
    '''
    Maximum allowable peak short-circuit current of busbar (Ipmax in IEC
    60909-0).
    Mechanical limit of the busbar in the substation itself. Used for short
    circuit data exchange according to IEC 60909.
    '''

    VoltageControlZone: Optional[VoltageControlZone] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageControlZone.BusbarSection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A VoltageControlZone is controlled by a designated BusbarSection.
            '''

        })
    '''
    A VoltageControlZone is controlled by a designated BusbarSection.
    '''

    VoltageControlZone: Optional[VoltageControlZone] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageControlZone.BusbarSection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A VoltageControlZone is controlled by a designated BusbarSection.
            '''

        })
    '''
    A VoltageControlZone is controlled by a designated BusbarSection.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Junction(Connector):
    '''
    A point where one or more conducting equipments are connected with zero
    resistance.
    The Junction class is intended to provide a place to associate additional
    information to a connectivity node which connects two or more equipment
    terminals. Examples include a tee-point or the connection point between
    two switches.
    The Junction class is intended to provide a method to associate additional
    information, for instance Location, to a ConnectivityNode. Examples include
    a T-point or the connection point between two switches. Typically, BusbarSection
    objects and Junction objects are represented by different symbols on diagrams.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class EarthFaultCompensator(ConductingEquipment):
    '''
    A conducting equipment used to represent a connection to ground which is
    typically used to compensate earth faults. An earth fault compensator device
    modelled with a single terminal implies a second terminal solidly connected
    to ground. If two terminals are modelled, the ground is not assumed and
    normal connection rules apply.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nominal resistance of device.
            '''

        })
    '''
    Nominal resistance of device.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GroundingImpedance(EarthFaultCompensator):
    '''
    A fixed impedance device used for grounding.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance of device.
            '''

        })
    '''
    Reactance of device.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PetersenCoil(EarthFaultCompensator):
    '''
    A variable impedance device normally used to offset line charging during
    single line faults in an ungrounded section of network.
    '''

    nominalU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The nominal voltage for which the coil is designed.
            '''

        })
    '''
    The nominal voltage for which the coil is designed.
    '''

    offsetCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The offset current that the Petersen coil controller is operating from
            the resonant point. This is normally a fixed amount for which the controller
            is configured and could be positive or negative. Typically 0 to 60 A depending
            on voltage and resonance conditions.
            '''

        })
    '''
    The offset current that the Petersen coil controller is operating from
    the resonant point. This is normally a fixed amount for which the controller
    is configured and could be positive or negative. Typically 0 to 60
    A depending on voltage and resonance conditions.
    '''

    positionCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The control current used to control the Petersen coil also known as the
            position current. Typically in the range of 20 mA to 200 mA.
            '''

        })
    '''
    The control current used to control the Petersen coil also known as
    the position current. Typically in the range of 20 mA to 200 mA.
    '''

    xGroundMax: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum reactance.
            '''

        })
    '''
    The maximum reactance.
    '''

    xGroundMin: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum reactance.
            '''

        })
    '''
    The minimum reactance.
    '''

    xGroundNominal: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The nominal reactance. This is the operating point (normally over compensation)
            that is defined based on the resonance point in the healthy network condition.
            The impedance is calculated based on nominal voltage divided by position
            current.
            '''

        })
    '''
    The nominal reactance. This is the operating point (normally over compensation)
    that is defined based on the resonance point in the healthy network
    condition. The impedance is calculated based on nominal voltage divided
    by position current.
    '''

    mode: Optional[PetersenCoilModeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The mode of operation of the Petersen coil.
            '''

        })
    '''
    The mode of operation of the Petersen coil.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class EnergyConnection(ConductingEquipment):
    '''
    A connection of energy generation or consumption on the power system model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyConsumer(EnergyConnection):
    '''
    Generic user of energy - a point of consumption on the power system model.
    EnergyConsumer.pfixed, .qfixed, .pfixedPct and .qfixedPct have meaning
    only if there is no LoadResponseCharacteristic associated with EnergyConsumer
    or if LoadResponseCharacteristic.exponentModel is set to False.
    '''

    customerCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of individual customers represented by this demand.
            '''

        })
    '''
    Number of individual customers represented by this demand.
    '''

    grounded: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Required for Yn and I connections (as represented by EnergyConsumer.phaseConnection).
            True if the neutral is solidly grounded.
            '''

        })
    '''
    Required for Yn and I connections (as represented by EnergyConsumer.phaseConnection).
    True if the neutral is solidly grounded.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power of the load. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            For voltage dependent loads the value is at rated voltage.
            Starting value for a steady state solution.
            '''

        })
    '''
    Active power of the load. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    For voltage dependent loads the value is at rated voltage.
    Starting value for a steady state solution.
    '''

    pfixed: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power of the load that is a fixed quantity and does not vary as
            load group value varies. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            '''

        })
    '''
    Active power of the load that is a fixed quantity and does not vary
    as load group value varies. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    '''

    pfixedPct: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed active power as a percentage of load group fixed active power. Used
            to represent the time-varying components. Load sign convention is used,
            i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Fixed active power as a percentage of load group fixed active power.
    Used to represent the time-varying components. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power of the load. Load sign convention is used, i.e. positive
            sign means flow out from a node.
            For voltage dependent loads the value is at rated voltage.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power of the load. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    For voltage dependent loads the value is at rated voltage.
    Starting value for a steady state solution.
    '''

    qfixed: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power of the load that is a fixed quantity and does not vary as
            load group value varies. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            '''

        })
    '''
    Reactive power of the load that is a fixed quantity and does not vary
    as load group value varies. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    '''

    qfixedPct: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed reactive power as a percentage of load group fixed reactive power.
            Used to represent the time-varying components. Load sign convention is
            used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    Fixed reactive power as a percentage of load group fixed reactive power.
    Used to represent the time-varying components. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    '''

    phaseConnection: Optional[PhaseShuntConnectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of phase connection, such as wye or delta.
            '''

        })
    '''
    The type of phase connection, such as wye or delta.
    '''

    EnergyConsumerAction: Optional[EnergyConsumerAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumerAction.EnergyConsumer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadDynamics: Optional[LoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadDynamics.EnergyConsumer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Load dynamics model used to describe dynamic behaviour of this energy consumer.
            '''

        })
    '''
    Load dynamics model used to describe dynamic behaviour of this energy
    consumer.
    '''

    LoadResponse: Optional[LoadResponseCharacteristic] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadResponseCharacteristic.EnergyConsumer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The load response characteristic of this load. If missing, this load is
            assumed to be constant power.
            '''

        })
    '''
    The load response characteristic of this load. If missing, this load
    is assumed to be constant power.
    '''

    PowerCutZone: Optional[PowerCutZone] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerCutZone.EnergyConsumers',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The energy consumer is assigned to this power cut zone.
            '''

        })
    '''
    The energy consumer is assigned to this power cut zone.
    '''

    EnergyConsumerPhase: list[EnergyConsumerPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyConsumerPhase.EnergyConsumer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The individual phase models for this energy consumer.
            '''

        })
    '''
    The individual phase models for this energy consumer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class ConformLoad(EnergyConsumer):
    '''
    ConformLoad represents loads that follow a daily load change pattern where
    the pattern can be used to scale the load with a system load.
    '''

    LoadGroup: Optional[ConformLoadGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConformLoadGroup.EnergyConsumers',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Group of this ConformLoad.
            '''

        })
    '''
    Group of this ConformLoad.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NonConformLoad(EnergyConsumer):
    '''
    NonConformLoad represents loads that do not follow a daily load change
    pattern and whose changes are not correlated with the daily load change
    pattern.
    '''

    LoadGroup: Optional[NonConformLoadGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NonConformLoadGroup.EnergyConsumers',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Group of this ConformLoad.
            '''

        })
    '''
    Group of this ConformLoad.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StationSupply(EnergyConsumer):
    '''
    Station supply with load derived from the station output.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class EnergySource(EnergyConnection):
    '''
    A generic equivalent for an energy supplier on a transmission or distribution
    voltage level.
    '''

    activePower: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            High voltage source active injection. Load sign convention is used, i.e.
            positive sign means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    High voltage source active injection. Load sign convention is used,
    i.e. positive sign means flow out from a node.
    Starting value for steady state solutions.
    '''

    nominalVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase-to-phase nominal voltage.
            '''

        })
    '''
    Phase-to-phase nominal voltage.
    '''

    pMax: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the maximum active power that can be produced by the source. Load
            sign convention is used, i.e. positive sign means flow out from a TopologicalNode
            (bus) into the conducting equipment.
            '''

        })
    '''
    This is the maximum active power that can be produced by the source.
    Load sign convention is used, i.e. positive sign means flow out from
    a TopologicalNode (bus) into the conducting equipment.
    '''

    pMin: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the minimum active power that can be produced by the source. Load
            sign convention is used, i.e. positive sign means flow out from a TopologicalNode
            (bus) into the conducting equipment.
            '''

        })
    '''
    This is the minimum active power that can be produced by the source.
    Load sign convention is used, i.e. positive sign means flow out from
    a TopologicalNode (bus) into the conducting equipment.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence Thevenin resistance.
            '''

        })
    '''
    Positive sequence Thevenin resistance.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence Thevenin resistance.
            '''

        })
    '''
    Zero sequence Thevenin resistance.
    '''

    r2: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence Thevenin resistance.
            '''

        })
    '''
    Negative sequence Thevenin resistance.
    '''

    reactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            High voltage source reactive injection. Load sign convention is used, i.e.
            positive sign means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    High voltage source reactive injection. Load sign convention is used,
    i.e. positive sign means flow out from a node.
    Starting value for steady state solutions.
    '''

    voltageAngle: Optional[ float | AngleRadians ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase angle of a-phase open circuit used when voltage characteristics need
            to be imposed at the node associated with the terminal of the energy source,
            such as when voltages and angles from the transmission level are used as
            input to the distribution network. The attribute shall be a positive value
            or zero.
            '''

        })
    '''
    Phase angle of a-phase open circuit used when voltage characteristics
    need to be imposed at the node associated with the terminal of the
    energy source, such as when voltages and angles from the transmission
    level are used as input to the distribution network. The attribute
    shall be a positive value or zero.
    '''

    voltageMagnitude: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase-to-phase open circuit voltage magnitude used when voltage characteristics
            need to be imposed at the node associated with the terminal of the energy
            source, such as when voltages and angles from the transmission level are
            used as input to the distribution network. The attribute shall be a positive
            value or zero.
            '''

        })
    '''
    Phase-to-phase open circuit voltage magnitude used when voltage characteristics
    need to be imposed at the node associated with the terminal of the
    energy source, such as when voltages and angles from the transmission
    level are used as input to the distribution network. The attribute
    shall be a positive value or zero.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence Thevenin reactance.
            '''

        })
    '''
    Positive sequence Thevenin reactance.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence Thevenin reactance.
            '''

        })
    '''
    Zero sequence Thevenin reactance.
    '''

    x2: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence Thevenin reactance.
            '''

        })
    '''
    Negative sequence Thevenin reactance.
    '''

    EnergySchedulingType: Optional[EnergySchedulingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySchedulingType.EnergySource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Energy Scheduling Type of an Energy Source.
            '''

        })
    '''
    Energy Scheduling Type of an Energy Source.
    '''

    EnergySourceAction: Optional[EnergySourceAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySourceAction.EnergySource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this energy source.
            '''

        })
    '''
    Action taken with this energy source.
    '''

    EnergySourcePhase: list[EnergySourcePhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergySourcePhase.EnergySource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The individual phase information of the energy source.
            '''

        })
    '''
    The individual phase information of the energy source.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegulatingCondEq(EnergyConnection):
    '''
    A type of conducting equipment that can regulate a quantity (i.e. voltage
    or flow) at a specific point in the network.
    '''

    controlEnabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the regulation status of the equipment. True is regulating, false
            is not regulating.
            '''

        })
    '''
    Specifies the regulation status of the equipment. True is regulating,
    false is not regulating.
    '''

    EquipmentController: Optional[EquipmentController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EquipmentController.RegulatingCondEq',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The equipment controller for this regulating conducting equipment.
            '''

        })
    '''
    The equipment controller for this regulating conducting equipment.
    '''

    RegulatingControl: Optional[RegulatingControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulatingControl.RegulatingCondEq',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The regulating control scheme in which this equipment participates.
            '''

        })
    '''
    The regulating control scheme in which this equipment participates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExternalNetworkInjection(RegulatingCondEq):
    '''
    This class represents the external network for use in power flow and short-circuit
    calculations.
    In the power flow domain the external network is modelled as a power injection
    with power limits and a power-frequency bias. For short-circuit calculations
    the external network is modelled as the �network feeders� element defined
    in section 6.2 of IEC60909-0:2016. Boolean flag ikSecond allows short-circuit
    calculations using the superposition method to detect that the maximum
    and minimum initial symmetrical short-circuit currents have to be corrected
    for the fact that they were calculated according the IEC60909-0 method.
    '''

    ikSecond: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether the maximum and minimum initial symmetrical short-circuit
            currents (Ik� max and Ik� min) have been calculated according to the IEC
            60909-0 method. Is only used in short-circuit calculations done according
            to the superposition method.
            '''

        })
    '''
    Indicates whether the maximum and minimum initial symmetrical short-circuit
    currents (Ik� max and Ik� min) have been calculated according to the
    IEC 60909-0 method. Is only used in short-circuit calculations done
    according to the superposition method.
    '''

    maxR0ToX0Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of zero sequence resistance to zero sequence reactance (R(0)/X(0)
            max). R0 and X0 are the real and imaginary parts of the zero sequence short-circuit
            impedance Z0 defined in clause 3.19.3 of IEC 60909-0:2016.
            '''

        })
    '''
    Maximum ratio of zero sequence resistance to zero sequence reactance
    (R(0)/X(0) max). R0 and X0 are the real and imaginary parts of the
    zero sequence short-circuit impedance Z0 defined in clause 3.19.3 of
    IEC 60909-0:2016.
    '''

    maxR1ToX1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of positive sequence resistance to positive sequence reactance
            (R(1)/X(1) max). R1 and X1 are the real and imaginary parts of the positive
            sequence short-circuit impedance Z1 defined in clause 3.19.1 of IEC 60909-0:2016.
            '''

        })
    '''
    Maximum ratio of positive sequence resistance to positive sequence
    reactance (R(1)/X(1) max). R1 and X1 are the real and imaginary parts
    of the positive sequence short-circuit impedance Z1 defined in clause
    3.19.1 of IEC 60909-0:2016.
    '''

    maxZ0ToZ1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of zero sequence impedance to its positive sequence impedance
            (Z(0)/Z(1) max). Z0 is the zero sequence short-circuit impedance defined
            in clause 3.19.3 of IEC 60909-0:2016. Z1 is the positive sequence short-circuit
            impedance defined in clause 3.19.1 of IEC 60909-0:2016.
            '''

        })
    '''
    Maximum ratio of zero sequence impedance to its positive sequence impedance
    (Z(0)/Z(1) max). Z0 is the zero sequence short-circuit impedance defined
    in clause 3.19.3 of IEC 60909-0:2016. Z1 is the positive sequence short-circuit
    impedance defined in clause 3.19.1 of IEC 60909-0:2016.
    '''

    minR0ToX0Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum ratio of zero sequence resistance to zero sequence reactance (R(0)/X(0)
            min). R0 and X0 are the real and imaginary parts of the zero sequence short-circuit
            impedance Z0 defined in clause 3.19.3 of IEC 60909-0:2016.
            '''

        })
    '''
    Minimum ratio of zero sequence resistance to zero sequence reactance
    (R(0)/X(0) min). R0 and X0 are the real and imaginary parts of the
    zero sequence short-circuit impedance Z0 defined in clause 3.19.3 of
    IEC 60909-0:2016.
    '''

    minR1ToX1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum ratio of positive sequence resistance to positive sequence reactance
            (R(1)/X(1) min). R1 and X1 are the real and imaginary parts of the positive
            sequence short-circuit impedance Z1 defined in clause 3.19.1 of IEC 60909-0:2016.
            '''

        })
    '''
    Minimum ratio of positive sequence resistance to positive sequence
    reactance (R(1)/X(1) min). R1 and X1 are the real and imaginary parts
    of the positive sequence short-circuit impedance Z1 defined in clause
    3.19.1 of IEC 60909-0:2016.
    '''

    minZ0ToZ1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum ratio of zero sequence impedance to its positive sequence impedance
            (Z(0)/Z(1) min). Z0 is the zero sequence short-circuit impedance defined
            in clause 3.19.3 of IEC 60909-0:2016. Z1 is the positive sequence short-circuit
            impedance defined in clause 3.19.1 of IEC 60909-0:2016.
            '''

        })
    '''
    Minimum ratio of zero sequence impedance to its positive sequence impedance
    (Z(0)/Z(1) min). Z0 is the zero sequence short-circuit impedance defined
    in clause 3.19.3 of IEC 60909-0:2016. Z1 is the positive sequence short-circuit
    impedance defined in clause 3.19.1 of IEC 60909-0:2016.
    '''

    referencePriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority of unit for use as powerflow voltage phase angle reference bus
            selection. 0 = don t care (default) 1 = highest priority. 2 is less than
            1 and so on.
            '''

        })
    '''
    Priority of unit for use as powerflow voltage phase angle reference
    bus selection. 0 = don t care (default) 1 = highest priority. 2 is
    less than 1 and so on.
    '''

    governorSCD: Optional[ float | ActivePowerPerFrequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power Frequency Bias. This is the change in power injection divided by
            the change in frequency and negated. A positive value of the power frequency
            bias provides additional power injection upon a drop in frequency.
            '''

        })
    '''
    Power Frequency Bias. This is the change in power injection divided
    by the change in frequency and negated. A positive value of the power
    frequency bias provides additional power injection upon a drop in frequency.
    '''

    maxInitialSymShCCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum initial symmetrical short-circuit current (Ik" max) in A. Ik� is
            defined in clause 3.5 of IEC 60909-0:2016.
            '''

        })
    '''
    Maximum initial symmetrical short-circuit current (Ik" max) in A. Ik�
    is defined in clause 3.5 of IEC 60909-0:2016.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum active power of the injection.
            '''

        })
    '''
    Maximum active power of the injection.
    '''

    maxQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power of the injection. Used for modelling of infeed for
            load flow exchange. Not used for short-circuit modelling.
            '''

        })
    '''
    Maximum reactive power of the injection. Used for modelling of infeed
    for load flow exchange. Not used for short-circuit modelling.
    '''

    minInitialSymShCCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum initial symmetrical short-circuit current (Ik" min) in A. Ik� is
            defined in clause 3.5 of IEC 60909-0:2016.
            '''

        })
    '''
    Minimum initial symmetrical short-circuit current (Ik" min) in A. Ik�
    is defined in clause 3.5 of IEC 60909-0:2016.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum active power of the injection.
            '''

        })
    '''
    Minimum active power of the injection.
    '''

    minQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power of the injection. Used for modelling of infeed for
            load flow exchange. Not used for short-circuit modelling.
            '''

        })
    '''
    Minimum reactive power of the injection. Used for modelling of infeed
    for load flow exchange. Not used for short-circuit modelling.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    Active power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for steady state solutions.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for steady state solutions.
    '''

    voltageFactor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage factor (c) in pu which has been used to calculate the maximum and
            minimum initial symmetrical short-circuit currents (Ik� max and Ik� min).
            Is only used in short-circuit calculations done according to the superposition
            method. The voltage factor is defined in clause 3.15 of IEC 60909-0:2016.
            '''

        })
    '''
    Voltage factor (c) in pu which has been used to calculate the maximum
    and minimum initial symmetrical short-circuit currents (Ik� max and
    Ik� min). Is only used in short-circuit calculations done according
    to the superposition method. The voltage factor is defined in clause
    3.15 of IEC 60909-0:2016.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FACTSEquipment(RegulatingCondEq):
    '''
    Flexible Alternating Current Transmission System regulating equipment.
    '''

    maxC: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitive reactance at maximum reactive power. Shall always be positive.
            '''

        })
    '''
    Capacitive reactance at maximum reactive power. Shall always be positive.
    '''

    maxL: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductive rating at maximum inductive reactive power. Shall always be negative.
            '''

        })
    '''
    Inductive rating at maximum inductive reactive power. Shall always
    be negative.
    '''

    minC: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitive reactance at minimum reactive power. Shall always be positive.
            '''

        })
    '''
    Capacitive reactance at minimum reactive power. Shall always be positive.
    '''

    minL: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductive rating at minimum inductive reactive power. Shall always be negative.
            '''

        })
    '''
    Inductive rating at minimum inductive reactive power. Shall always
    be negative.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    ratedC: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitive reactance at maximum reactive power. Shall always be positive.
            '''

        })
    '''
    Capacitive reactance at maximum reactive power. Shall always be positive.
    '''

    ratedI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated current of the FACTS equipment.
            '''

        })
    '''
    Rated current of the FACTS equipment.
    '''

    ratedL: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductive rating at maximum inductive reactive power. Shall always be negative.
            '''

        })
    '''
    Inductive rating at maximum inductive reactive power. Shall always
    be negative.
    '''

    ratedU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage of the FACTS equipment.
            '''

        })
    '''
    Rated voltage of the FACTS equipment.
    '''

    slope: Optional[ float | VoltagePerReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The characteristics slope which defines how the reactive power output changes
            in proportion to the difference between the regulated bus voltage and the
            voltage setpoint.
            The attribute shall be a positive value or zero.
            '''

        })
    '''
    The characteristics slope which defines how the reactive power output
    changes in proportion to the difference between the regulated bus voltage
    and the voltage setpoint.
    The attribute shall be a positive value or zero.
    '''

    LossCurve: list[LossCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossCurve.FACTSEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The loss curve for the FACTS equipment.
            '''

        })
    '''
    The loss curve for the FACTS equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ModularStaticSynchronousSeriesCompensator(FACTSEquipment):
    '''
    Modular static synchronous series compensator (MSSSC) is a type of flexible
    AC transmission system regulating equipment which consists of solid-state
    voltage source inverter connected in series with a transmission line. This
    is similar to static synchronous series compensator (SSSC), but without
    injection transformer. This enables the MSSSC to be truly modular with
    the ability to simply install a number of equipment in series to provide
    a desired maximum level of impedance. MSSSC can be dispersed into multiple
    location in a circuit working collectively under the same controller scheme.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticSynchronousCompensator(FACTSEquipment):
    '''
    Static synchronous compensator (STATCOM), also known as a static synchronous
    condenser (STATCON), is a type of flexible AC transmission system regulating
    equipment used on alternating current electricity transmission networks.
    It is based on a power electronics voltage-source converter and can act
    as either a source or sink of reactive AC power to an electricity network.
    If connected to a source of power it can also provide active AC power.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticVarCompensator(FACTSEquipment):
    '''
    A facility for providing variable and controllable shunt reactive power.
    The SVC typically consists of a stepdown transformer, filter, thyristor-controlled
    reactor, and thyristor-switched capacitor arms.
    The SVC may operate in fixed MVar output mode or in voltage control mode.
    When in voltage control mode, the output of the SVC will be proportional
    to the deviation of voltage at the controlled bus from the voltage setpoint.
    The SVC characteristic slope defines the proportion. If the voltage at
    the controlled bus is equal to the voltage setpoint, the SVC MVar output
    is zero.
    '''

    capacitiveRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitive reactance at maximum capacitive reactive power. Shall always
            be positive.
            '''

        })
    '''
    Capacitive reactance at maximum capacitive reactive power. Shall always
    be positive.
    '''

    inductiveRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductive reactance at maximum inductive reactive power. Shall always be
            negative.
            '''

        })
    '''
    Inductive reactance at maximum inductive reactive power. Shall always
    be negative.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    slope: Optional[ float | VoltagePerReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The characteristics slope of an SVC defines how the reactive power output
            changes in proportion to the difference between the regulated bus voltage
            and the voltage setpoint.
            The attribute shall be a positive value or zero.
            '''

        })
    '''
    The characteristics slope of an SVC defines how the reactive power
    output changes in proportion to the difference between the regulated
    bus voltage and the voltage setpoint.
    The attribute shall be a positive value or zero.
    '''

    voltageSetPoint: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactive power output of the SVC is proportional to the difference
            between the voltage at the regulated bus and the voltage setpoint. When
            the regulated bus voltage is equal to the voltage setpoint, the reactive
            power output is zero.
            '''

        })
    '''
    The reactive power output of the SVC is proportional to the difference
    between the voltage at the regulated bus and the voltage setpoint.
    When the regulated bus voltage is equal to the voltage setpoint, the
    reactive power output is zero.
    '''

    sVCControlMode: Optional[SVCControlMode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            SVC control mode.
            '''

        })
    '''
    SVC control mode.
    '''

    StaticVarCompensatorDynamics: Optional[StaticVarCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensatorDynamics.StaticVarCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Static Var Compensator dynamics model used to describe dynamic behaviour
            of this Static Var Compensator.
            '''

        })
    '''
    Static Var Compensator dynamics model used to describe dynamic behaviour
    of this Static Var Compensator.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ThyristorControlledSeriesCompensator(FACTSEquipment):
    '''
    Thyristor-controlled series capacitors (TCSC) is a type of flexible AC
    transmission system regulating equipment that is configured with controlled
    reactors in parallel with sections of a capacitor bank. This combination
    allows smooth control of the fundamental frequency capacitive reactance
    over a wide range. The thyristor valve contains a string of series connected
    high power thyristors. TCSC can control power flows in order to achieve
    eliminating of line overloads, reducing loop flows and minimising system
    losses.
    '''

    currentSection: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The current section on which the TCSC is operating.
            '''

        })
    '''
    The current section on which the TCSC is operating.
    '''

    compensationZ: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The actual compensation impedance provided by the compensator. The attribute
            value shall be positive if compensation is in the capacitive range. The
            attribute value shall be negative if compensation is in the inductive rating.
            '''

        })
    '''
    The actual compensation impedance provided by the compensator. The
    attribute value shall be positive if compensation is in the capacitive
    range. The attribute value shall be negative if compensation is in
    the inductive rating.
    '''

    flexibleCapacitiveZ: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flexible impedance that can be controlled by the compensator when operating
            in the capacitive range. Shall always be positive.
            '''

        })
    '''
    Flexible impedance that can be controlled by the compensator when operating
    in the capacitive range. Shall always be positive.
    '''

    flexibleInductiveZ: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flexible impedance that can be controlled by the compensator when operating
            in the inductive range. Shall always be negative.
            '''

        })
    '''
    Flexible impedance that can be controlled by the compensator when operating
    in the inductive range. Shall always be negative.
    '''

    minI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum current below which the device bypassed.
            '''

        })
    '''
    Minimum current below which the device bypassed.
    '''

    reconnectionI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The current for which the TCSC returns back to operation after bypass.
            '''

        })
    '''
    The current for which the TCSC returns back to operation after bypass.
    '''

    TCSCCompensationPoint: list[TCSCCompensationPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TCSCCompensationPoint.ThyristorControlledSeriesCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Compensation point for this TCSC.
            '''

        })
    '''
    Compensation point for this TCSC.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FrequencyConverter(RegulatingCondEq):
    '''
    A device to convert from one frequency to another (e.g., frequency F1 to
    F2) comprises a pair of FrequencyConverter instances. One converts from
    F1 to DC, the other converts the DC to F2.
    '''

    frequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Frequency on the AC side.
            '''

        })
    '''
    Frequency on the AC side.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum active power on the DC side at which the frequency converter
            should operate.
            '''

        })
    '''
    The maximum active power on the DC side at which the frequency converter
    should operate.
    '''

    maxU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum voltage on the DC side at which the frequency converter should
            operate.
            '''

        })
    '''
    The maximum voltage on the DC side at which the frequency converter
    should operate.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum active power on the DC side at which the frequency converter
            should operate.
            '''

        })
    '''
    The minimum active power on the DC side at which the frequency converter
    should operate.
    '''

    minU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum voltage on the DC side at which the frequency converter should
            operate.
            '''

        })
    '''
    The minimum voltage on the DC side at which the frequency converter
    should operate.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PowerElectronicsConnection(RegulatingCondEq):
    '''
    A connection to the AC network for energy production or consumption that
    uses power electronics rather than rotating machines.
    '''

    maxIFault: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum fault current this device will contribute, in per-unit of rated
            current, before the converter protection will trip or bypass.
            '''

        })
    '''
    Maximum fault current this device will contribute, in per-unit of rated
    current, before the converter protection will trip or bypass.
    '''

    maxQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power limit. This is the maximum (nameplate) limit for
            the unit.
            '''

        })
    '''
    Maximum reactive power limit. This is the maximum (nameplate) limit
    for the unit.
    '''

    minQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power limit for the unit. This is the minimum (nameplate)
            limit for the unit.
            '''

        })
    '''
    Minimum reactive power limit for the unit. This is the minimum (nameplate)
    limit for the unit.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Active power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nameplate apparent power rating for the unit.
            The attribute shall have a positive value.
            '''

        })
    '''
    Nameplate apparent power rating for the unit.
    The attribute shall have a positive value.
    '''

    ratedU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage (nameplate data, Ur in IEC 60909-0). It is primarily used
            for short circuit data exchange according to IEC 60909.
            The attribute shall be a positive value.
            '''

        })
    '''
    Rated voltage (nameplate data, Ur in IEC 60909-0). It is primarily
    used for short circuit data exchange according to IEC 60909.
    The attribute shall be a positive value.
    '''

    controlMode: Optional[ConverterControlModeKind] = field(
        default=None,
        metadata={
        'type': 'gmdm enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            Inverter control mode indicating whether reactive power output is based
            on constant PF or constant Q
            '''

        })
    '''
    Inverter control mode indicating whether reactive power output is based
    on constant PF or constant Q
    '''

    DERDynamics: Optional[DERDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERDynamics.PowerElectronicsConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DER dynamics model associated with this power electronics connection model.
            '''

        })
    '''
    DER dynamics model associated with this power electronics connection
    model.
    '''

    StatcomDynamics: Optional[StatcomDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StatcomDynamics.PowerElectronicsConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The statcom dynamics model associated with this power electronics connection.
            '''

        })
    '''
    The statcom dynamics model associated with this power electronics connection.
    '''

    WindTurbineType3or4Dynamics: Optional[WindTurbineType3or4Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4Dynamics.PowerElectronicsConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The wind turbine type 3 or type 4 dynamics model associated with this power
            electronics connection.
            '''

        })
    '''
    The wind turbine type 3 or type 4 dynamics model associated with this
    power electronics connection.
    '''

    PowerElectronicsConnectionPhase: list[PowerElectronicsConnectionPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerElectronicsConnectionPhase.PowerElectronicsConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The individual phases models for the power electronics connection.
            '''

        })
    '''
    The individual phases models for the power electronics connection.
    '''

    PowerElectronicsUnit: list[PowerElectronicsUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerElectronicsUnit.PowerElectronicsConnection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            An AC network connection may have several power electronics units connecting
            through it.
            '''

        })
    '''
    An AC network connection may have several power electronics units connecting
    through it.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RotatingMachine(RegulatingCondEq):
    '''
    A rotating machine which may be used as a generator or motor.
    '''

    ratedPowerFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power factor (nameplate data). It is primarily used for short circuit data
            exchange according to IEC 60909. The attribute cannot be a negative value.
            '''

        })
    '''
    Power factor (nameplate data). It is primarily used for short circuit
    data exchange according to IEC 60909. The attribute cannot be a negative
    value.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Active power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            Starting value for a steady state solution.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow out from a node.
    Starting value for a steady state solution.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nameplate apparent power rating for the unit.
            The attribute shall have a positive value.
            '''

        })
    '''
    Nameplate apparent power rating for the unit.
    The attribute shall have a positive value.
    '''

    ratedU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage (nameplate data, Ur in IEC 60909-0). It is primarily used
            for short circuit data exchange according to IEC 60909.
            The attribute shall be a positive value.
            '''

        })
    '''
    Rated voltage (nameplate data, Ur in IEC 60909-0). It is primarily
    used for short circuit data exchange according to IEC 60909.
    The attribute shall be a positive value.
    '''

    GeneratingUnit: Optional[GeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.RotatingMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A synchronous machine may operate as a generator and as such becomes a
            member of a generating unit.
            '''

        })
    '''
    A synchronous machine may operate as a generator and as such becomes
    a member of a generating unit.
    '''

    HydroPump: Optional[HydroPump] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPump.RotatingMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The synchronous machine drives the turbine which moves the water from a
            low elevation to a higher elevation. The direction of machine rotation
            for pumping may or may not be the same as for generating.
            '''

        })
    '''
    The synchronous machine drives the turbine which moves the water from
    a low elevation to a higher elevation. The direction of machine rotation
    for pumping may or may not be the same as for generating.
    '''

    HydroPump: Optional[HydroPump] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPump.RotatingMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The synchronous machine drives the turbine which moves the water from a
            low elevation to a higher elevation. The direction of machine rotation
            for pumping may or may not be the same as for generating.
            '''

        })
    '''
    The synchronous machine drives the turbine which moves the water from
    a low elevation to a higher elevation. The direction of machine rotation
    for pumping may or may not be the same as for generating.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class AsynchronousMachine(RotatingMachine):
    '''
    A rotating machine whose shaft rotates asynchronously with the electrical
    field. Also known as an induction machine with no external connection to
    the rotor windings, e.g. squirrel-cage induction machine.
    '''

    converterFedDrive: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether the machine is a converter fed drive. Used for short
            circuit data exchange according to IEC 60909.
            '''

        })
    '''
    Indicates whether the machine is a converter fed drive. Used for short
    circuit data exchange according to IEC 60909.
    '''

    iaIrRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Ratio of locked-rotor current to the rated current of the motor (Ia/Ir).
            Used for short circuit data exchange according to IEC 60909.
            '''

        })
    '''
    Ratio of locked-rotor current to the rated current of the motor (Ia/Ir).
    Used for short circuit data exchange according to IEC 60909.
    '''

    polePairNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of pole pairs of stator. Used for short circuit data exchange according
            to IEC 60909.
            '''

        })
    '''
    Number of pole pairs of stator. Used for short circuit data exchange
    according to IEC 60909.
    '''

    reversible: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates for converter drive motors if the power can be reversible. Used
            for short circuit data exchange according to IEC 60909.
            '''

        })
    '''
    Indicates for converter drive motors if the power can be reversible.
    Used for short circuit data exchange according to IEC 60909.
    '''

    rxLockedRotorRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Locked rotor ratio (R/X). Used for short circuit data exchange according
            to IEC 60909.
            '''

        })
    '''
    Locked rotor ratio (R/X). Used for short circuit data exchange according
    to IEC 60909.
    '''

    efficiency: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Efficiency of the asynchronous machine at nominal operation as a percentage.
            Indicator for converter drive motors. Used for short circuit data exchange
            according to IEC 60909.
            '''

        })
    '''
    Efficiency of the asynchronous machine at nominal operation as a percentage.
    Indicator for converter drive motors. Used for short circuit data exchange
    according to IEC 60909.
    '''

    nominalFrequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nameplate data indicates if the machine is 50 Hz or 60 Hz.
            '''

        })
    '''
    Nameplate data indicates if the machine is 50 Hz or 60 Hz.
    '''

    nominalSpeed: Optional[ float | RotationSpeed ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Nameplate data. Depends on the slip and number of pole pairs.
            '''

        })
    '''
    Nameplate data. Depends on the slip and number of pole pairs.
    '''

    ratedMechanicalPower: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated mechanical power (Pr in IEC 60909-0). Used for short circuit data
            exchange according to IEC 60909.
            '''

        })
    '''
    Rated mechanical power (Pr in IEC 60909-0). Used for short circuit
    data exchange according to IEC 60909.
    '''

    rr1: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Damper 1 winding resistance.
            '''

        })
    '''
    Damper 1 winding resistance.
    '''

    rr2: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Damper 2 winding resistance.
            '''

        })
    '''
    Damper 2 winding resistance.
    '''

    tpo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transient rotor time constant (greater than tppo).
            '''

        })
    '''
    Transient rotor time constant (greater than tppo).
    '''

    tppo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sub-transient rotor time constant (greater than 0).
            '''

        })
    '''
    Sub-transient rotor time constant (greater than 0).
    '''

    xlr1: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Damper 1 winding leakage reactance.
            '''

        })
    '''
    Damper 1 winding leakage reactance.
    '''

    xlr2: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Damper 2 winding leakage reactance.
            '''

        })
    '''
    Damper 2 winding leakage reactance.
    '''

    xm: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing reactance.
            '''

        })
    '''
    Magnetizing reactance.
    '''

    xp: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transient reactance (unsaturated) (greater than or equal to xpp).
            '''

        })
    '''
    Transient reactance (unsaturated) (greater than or equal to xpp).
    '''

    xpp: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sub-transient reactance (unsaturated).
            '''

        })
    '''
    Sub-transient reactance (unsaturated).
    '''

    xs: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Synchronous reactance (greater than xp).
            '''

        })
    '''
    Synchronous reactance (greater than xp).
    '''

    asynchronousMachineType: Optional[AsynchronousMachineKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates the type of Asynchronous Machine (motor or generator).
            '''

        })
    '''
    Indicates the type of Asynchronous Machine (motor or generator).
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.AsynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Asynchronous machine dynamics model used to describe dynamic behaviour
            of this asynchronous machine.
            '''

        })
    '''
    Asynchronous machine dynamics model used to describe dynamic behaviour
    of this asynchronous machine.
    '''

    DERDynamics: Optional[DERDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERDynamics.AsynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DER dynamics model associated with this asynchronous machine model.
            '''

        })
    '''
    DER dynamics model associated with this asynchronous machine model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class SynchronousMachine(RotatingMachine):
    '''
    An electromechanical device that operates with shaft rotating synchronously
    with the network. It is a single machine operating either as a generator
    or synchronous condenser or pump.
    '''

    coolantCondition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Temperature or pressure of coolant medium.
            '''

        })
    '''
    Temperature or pressure of coolant medium.
    '''

    earthing: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether or not the generator is earthed. Used for short circuit
            data exchange according to IEC 60909.
            '''

        })
    '''
    Indicates whether or not the generator is earthed. Used for short circuit
    data exchange according to IEC 60909.
    '''

    mu: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Factor to calculate the breaking current (4.5.2.1 in IEC 60909-0).
            Used only for single fed short circuit on a generator (4.3.4.2. in IEC
            60909-0).
            '''

        })
    '''
    Factor to calculate the breaking current (4.5.2.1 in IEC 60909-0).
    Used only for single fed short circuit on a generator (4.3.4.2. in
    IEC 60909-0).
    '''

    referencePriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority of unit for use as powerflow voltage phase angle reference bus
            selection. 0 = don t care (default) 1 = highest priority. 2 is less than
            1 and so on.
            '''

        })
    '''
    Priority of unit for use as powerflow voltage phase angle reference
    bus selection. 0 = don t care (default) 1 = highest priority. 2 is
    less than 1 and so on.
    '''

    aVRToManualLag: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Time delay required when switching from Automatic Voltage Regulation (AVR)
            to Manual for a lagging MVAr violation.
            '''

        })
    '''
    Time delay required when switching from Automatic Voltage Regulation
    (AVR) to Manual for a lagging MVAr violation.
    '''

    aVRToManualLead: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Time delay required when switching from Automatic Voltage Regulation (AVR)
            to Manual for a leading MVAr violation.
            '''

        })
    '''
    Time delay required when switching from Automatic Voltage Regulation
    (AVR) to Manual for a leading MVAr violation.
    '''

    baseQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Default base reactive power value. This value represents the initial reactive
            power that can be used by any application function.
            '''

        })
    '''
    Default base reactive power value. This value represents the initial
    reactive power that can be used by any application function.
    '''

    condenserP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power consumed when in condenser mode operation.
            '''

        })
    '''
    Active power consumed when in condenser mode operation.
    '''

    earthingStarPointR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generator star point earthing resistance (Re). Used for short circuit data
            exchange according to IEC 60909.
            '''

        })
    '''
    Generator star point earthing resistance (Re). Used for short circuit
    data exchange according to IEC 60909.
    '''

    earthingStarPointX: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generator star point earthing reactance (Xe). Used for short circuit data
            exchange according to IEC 60909.
            '''

        })
    '''
    Generator star point earthing reactance (Xe). Used for short circuit
    data exchange according to IEC 60909.
    '''

    ikk: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Steady-state short-circuit current (in A for the profile) of generator
            with compound excitation during 3-phase short circuit.
            - Ikk=0: Generator with no compound excitation.
            - Ikk&lt;&gt;0: Generator with compound excitation.
            Ikk is used to calculate the minimum steady-state short-circuit current
            for generators with compound excitation.
            (4.6.1.2 in IEC 60909-0:2001).
            Used only for single fed short circuit on a generator. (4.3.4.2. in IEC
            60909-0:2001).
            '''

        })
    '''
    Steady-state short-circuit current (in A for the profile) of generator
    with compound excitation during 3-phase short circuit.
    - Ikk=0: Generator with no compound excitation.
    - Ikk&lt;&gt;0: Generator with compound excitation.
    Ikk is used to calculate the minimum steady-state short-circuit current
    for generators with compound excitation.
    (4.6.1.2 in IEC 60909-0:2001).
    Used only for single fed short circuit on a generator. (4.3.4.2. in
    IEC 60909-0:2001).
    '''

    manualToAVR: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Time delay required when switching from Manual to Automatic Voltage Regulation.
            This value is used in the accelerating power reference frame for powerflow
            solutions.
            '''

        })
    '''
    Time delay required when switching from Manual to Automatic Voltage
    Regulation. This value is used in the accelerating power reference
    frame for powerflow solutions.
    '''

    maxQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power limit. This is the maximum (nameplate) limit for
            the unit.
            '''

        })
    '''
    Maximum reactive power limit. This is the maximum (nameplate) limit
    for the unit.
    '''

    maxU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage limit for the unit.
            '''

        })
    '''
    Maximum voltage limit for the unit.
    '''

    minQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power limit for the unit.
            '''

        })
    '''
    Minimum reactive power limit for the unit.
    '''

    minU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage limit for the unit.
            '''

        })
    '''
    Minimum voltage limit for the unit.
    '''

    qPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Part of the coordinated reactive control that comes from this machine.
            The attribute is used as a participation factor not necessarily summing
            up to 100 % for the participating devices in the control.
            '''

        })
    '''
    Part of the coordinated reactive control that comes from this machine.
    The attribute is used as a participation factor not necessarily summing
    up to 100 % for the participating devices in the control.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Equivalent resistance (RG) of generator. RG is considered for the calculation
            of all currents, except for the calculation of the peak current ip. Used
            for short circuit data exchange according to IEC 60909.
            '''

        })
    '''
    Equivalent resistance (RG) of generator. RG is considered for the calculation
    of all currents, except for the calculation of the peak current ip.
    Used for short circuit data exchange according to IEC 60909.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence resistance of the synchronous machine.
            '''

        })
    '''
    Zero sequence resistance of the synchronous machine.
    '''

    r2: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence resistance.
            '''

        })
    '''
    Negative sequence resistance.
    '''

    satDirectSubtransX: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis subtransient reactance saturated, also known as Xd"sat.
            '''

        })
    '''
    Direct-axis subtransient reactance saturated, also known as Xd"sat.
    '''

    satDirectSyncX: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Direct-axes saturated synchronous reactance (xdsat); reciprocal of short-circuit
            ration. Used for short circuit data exchange, only for single fed short
            circuit on a generator. (4.3.4.2. in IEC 60909-0:2001).
            '''

        })
    '''
    Direct-axes saturated synchronous reactance (xdsat); reciprocal of
    short-circuit ration. Used for short circuit data exchange, only for
    single fed short circuit on a generator. (4.3.4.2. in IEC 60909-0:2001).
    '''

    satDirectTransX: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Saturated Direct-axis transient reactance. The attribute is primarily used
            for short circuit calculations according to ANSI.
            '''

        })
    '''
    Saturated Direct-axis transient reactance. The attribute is primarily
    used for short circuit calculations according to ANSI.
    '''

    voltageRegulationRange: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Range of generator voltage regulation (PG in IEC 60909-0) used for calculation
            of the impedance correction factor KG defined in IEC 60909-0.
            This attribute is used to describe the operating voltage of the generating
            unit.
            '''

        })
    '''
    Range of generator voltage regulation (PG in IEC 60909-0) used for
    calculation of the impedance correction factor KG defined in IEC 60909-0.
    This attribute is used to describe the operating voltage of the generating
    unit.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence reactance of the synchronous machine.
            '''

        })
    '''
    Zero sequence reactance of the synchronous machine.
    '''

    x2: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence reactance.
            '''

        })
    '''
    Negative sequence reactance.
    '''

    coolantType: Optional[CoolantType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Method of cooling the machine.
            '''

        })
    '''
    Method of cooling the machine.
    '''

    operatingMode: Optional[SynchronousMachineOperatingMode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Current mode of operation.
            '''

        })
    '''
    Current mode of operation.
    '''

    shortCircuitRotorType: Optional[ShortCircuitRotorKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of rotor, used by short circuit applications, only for single fed
            short circuit according to IEC 60909.
            '''

        })
    '''
    Type of rotor, used by short circuit applications, only for single
    fed short circuit according to IEC 60909.
    '''

    type: Optional[SynchronousMachineKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Modes that this synchronous machine can operate in.
            '''

        })
    '''
    Modes that this synchronous machine can operate in.
    '''

    DERDynamics: Optional[DERDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERDynamics.SynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            DER dynamics model associated with this synchronous machine model.
            '''

        })
    '''
    DER dynamics model associated with this synchronous machine model.
    '''

    InitialReactiveCapabilityCurve: Optional[ReactiveCapabilityCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReactiveCapabilityCurve.InitiallyUsedBySynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The default reactive capability curve for use by a synchronous machine.
            The reference voltage (exchanged by ReactiveCapabilityCurve.referenceVoltage)
            for this ReactiveCapabilityCurve shall be equal to the BaseVoltage.nominalVoltage
            of the ConnectivityNode to which the Equipment is connected to. The information
            is obtained via the containment of the Equipment or the ConnectivityNode.
            '''

        })
    '''
    The default reactive capability curve for use by a synchronous machine.
    The reference voltage (exchanged by ReactiveCapabilityCurve.referenceVoltage)
    for this ReactiveCapabilityCurve shall be equal to the BaseVoltage.nominalVoltage
    of the ConnectivityNode to which the Equipment is connected to. The
    information is obtained via the containment of the Equipment or the
    ConnectivityNode.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.SynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine dynamics model used to describe dynamic behaviour of
            this synchronous machine.
            '''

        })
    '''
    Synchronous machine dynamics model used to describe dynamic behaviour
    of this synchronous machine.
    '''

    ReactiveCapabilityCurve: list[ReactiveCapabilityCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReactiveCapabilityCurve.SynchronousMachine',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The reactive capability curve for this synchronous machine.
            '''

        })
    '''
    The reactive capability curve for this synchronous machine.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensator(RegulatingCondEq):
    '''
    A shunt capacitor or reactor or switchable bank of shunt capacitors or
    reactors. A section of a shunt compensator is an individual capacitor or
    reactor. A negative value for bPerSection indicates that the compensator
    is a reactor. ShuntCompensator is a single terminal device. Ground is implied.
    '''

    grounded: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Required for Yn and I connections (as represented by ShuntCompensator.phaseConnection).
            True if the neutral is solidly grounded.
            '''

        })
    '''
    Required for Yn and I connections (as represented by ShuntCompensator.phaseConnection).
    True if the neutral is solidly grounded.
    '''

    maximumSections: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum number of sections that may be switched in.
            '''

        })
    '''
    The maximum number of sections that may be switched in.
    '''

    normalSections: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal number of sections switched in. The value shall be between zero
            and ShuntCompensator.maximumSections.
            '''

        })
    '''
    The normal number of sections switched in. The value shall be between
    zero and ShuntCompensator.maximumSections.
    '''

    sections: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shunt compensator sections in use. Starting value for steady state solution.
            The attribute shall be a positive value or zero. Non integer values are
            allowed to support continuous variables. The reasons for continuous value
            are to support study cases where no discrete shunt compensators has yet
            been designed, a solutions where a narrow voltage band force the sections
            to oscillate or accommodate for a continuous solution as input.
            For LinearShuntConpensator the value shall be between zero and ShuntCompensator.maximumSections.
            At value zero the shunt compensator conductance and admittance is zero.
            Linear interpolation of conductance and admittance between the previous
            and next integer section is applied in case of non-integer values.
            For NonlinearShuntCompensator(-s) shall only be set to one of the NonlinearShuntCompenstorPoint.sectionNumber.
            There is no interpolation between NonlinearShuntCompenstorPoint(-s).
            '''

        })
    '''
    Shunt compensator sections in use. Starting value for steady state
    solution. The attribute shall be a positive value or zero. Non integer
    values are allowed to support continuous variables. The reasons for
    continuous value are to support study cases where no discrete shunt
    compensators has yet been designed, a solutions where a narrow voltage
    band force the sections to oscillate or accommodate for a continuous
    solution as input.
    For LinearShuntConpensator the value shall be between zero and ShuntCompensator.maximumSections.
    At value zero the shunt compensator conductance and admittance is zero.
    Linear interpolation of conductance and admittance between the previous
    and next integer section is applied in case of non-integer values.
    For NonlinearShuntCompensator(-s) shall only be set to one of the NonlinearShuntCompenstorPoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompenstorPoint(-s).
    '''

    aVRDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An automatic voltage regulation delay (AVRDelay) which is the time delay
            from a change in voltage to when the capacitor is allowed to change state.
            This filters out temporary changes in voltage.
            '''

        })
    '''
    An automatic voltage regulation delay (AVRDelay) which is the time
    delay from a change in voltage to when the capacitor is allowed to
    change state. This filters out temporary changes in voltage.
    '''

    nomU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage at which the nominal reactive power may be calculated. This
            should normally be within 10% of the voltage at which the capacitor is
            connected to the network.
            '''

        })
    '''
    The voltage at which the nominal reactive power may be calculated.
    This should normally be within 10% of the voltage at which the capacitor
    is connected to the network.
    '''

    voltageSensitivity: Optional[ float | VoltagePerReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage sensitivity required for the device to regulate the bus voltage,
            in voltage/reactive power.
            '''

        })
    '''
    Voltage sensitivity required for the device to regulate the bus voltage,
    in voltage/reactive power.
    '''

    phaseConnection: Optional[PhaseShuntConnectionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of phase connection, such as wye or delta.
            '''

        })
    '''
    The type of phase connection, such as wye or delta.
    '''

    ShuntCompensatorAction: Optional[ShuntCompensatorAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorAction.ShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ShuntCompensatorDynamics: Optional[ShuntCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorDynamics.ShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shunt compensator dynamics model used to describe dynamic behaviour of
            this shunt compensator.
            '''

        })
    '''
    Shunt compensator dynamics model used to describe dynamic behaviour
    of this shunt compensator.
    '''

    StaticVarCompensatorSystemDynamics: Optional[StaticVarCompensatorSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensatorSystemDynamics.ShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Static Var Compensator system dynamics model used to describe dynamic behaviour
            of this Static Var Compensator system.
            '''

        })
    '''
    Static Var Compensator system dynamics model used to describe dynamic
    behaviour of this Static Var Compensator system.
    '''

    ShuntCompensatorPhase: list[ShuntCompensatorPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShuntCompensatorPhase.ShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The individual phases models for the shunt compensator.
            '''

        })
    '''
    The individual phases models for the shunt compensator.
    '''

    SvShuntCompensatorSections: list[SvShuntCompensatorSections] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvShuntCompensatorSections.ShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The state for the number of shunt compensator sections in service.
            '''

        })
    '''
    The state for the number of shunt compensator sections in service.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class LinearShuntCompensator(ShuntCompensator):
    '''
    A linear shunt compensator has banks or sections with equal admittance
    values.
    '''

    b0PerSection: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) susceptance per section.
            '''

        })
    '''
    Zero sequence shunt (charging) susceptance per section.
    '''

    bPerSection: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance per section.
    '''

    g0PerSection: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Zero sequence shunt (charging) conductance per section.
    '''

    gPerSection: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance per section.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class NonlinearShuntCompensator(ShuntCompensator):
    '''
    A non linear shunt compensator has bank or section admittance values that
    differ. The attributes gTotal, bTotal, g0Total and b0Total of the associated
    NonlinearShuntCompensatorPoint describe the total conductance and admittance
    of a NonlinearShuntCompensatorPoint at a section number specified by NonlinearShuntCompensatorPoint.sectionNumber.
    '''

    NonlinearShuntCompensatorPoints: list[NonlinearShuntCompensatorPoint] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NonlinearShuntCompensatorPoint.NonlinearShuntCompensator',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All points of the non-linear shunt compensator.
            '''

        })
    '''
    All points of the non-linear shunt compensator.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VariableShuntCompensator(NonlinearShuntCompensator):
    '''
    A variable shunt compensator (VSR) is an oil-filled reactor with discrete
    on-line regulation of reactive power. The regulation range typically varies
    between 30% and 100% of the rated reactive power. When energized VSR cannot
    have a reactive output of 0 Mvar, so minimal valid section number is 1
    with reactive power output at either 100% or at minimal reactive power
    output. Note that reactive power can increase or decrease with increasing
    of the section number (NonlinearShuntCompensatorPoint.sectionNumber).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExtendedWardEquivalent(ConductingEquipment):
    '''
    An extended ward equivalent is a combination of an impedance load, a PQ
    load and as voltage source with an internal impedance.
    '''

    ReactiveCapabilityCurve: list[ReactiveCapabilityCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReactiveCapabilityCurve.ExtendedWardEquivalent',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The reactive capability curve used by this extended ward equivalent.
            '''

        })
    '''
    The reactive capability curve used by this extended ward equivalent.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Ground(ConductingEquipment):
    '''
    A point where the system is grounded used for connecting conducting equipment
    to ground. The power system model can have any number of grounds.
    '''

    GroundAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.Ground',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this ground.
            '''

        })
    '''
    Action taken with this ground.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class PowerTransformer(ConductingEquipment):
    '''
    An electrical device consisting of two or more coupled windings, with or
    without a magnetic core, for introducing mutual coupling between electric
    circuits. Transformers can be used to control voltage and phase shift (active
    power flow).
    A power transformer may be composed of separate transformer tanks that
    need not be identical.
    A power transformer can be modelled with or without tanks and is intended
    for use in both balanced and unbalanced representations. A power transformer
    typically has two terminals, but may have one (grounding), three or more
    terminals.
    The inherited association ConductingEquipment.BaseVoltage should not be
    used. The association from TransformerEnd to BaseVoltage should be used
    instead.
    '''

    isPartOfGeneratorUnit: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether the machine is part of a power station unit. Used for
            short circuit data exchange according to IEC 60909. It has an impact on
            how the correction factors are calculated for transformers, since the transformer
            is not necessarily part of a synchronous machine and generating unit. It
            is not always possible to derive this information from the model. This
            is why the attribute is necessary.
            '''

        })
    '''
    Indicates whether the machine is part of a power station unit. Used
    for short circuit data exchange according to IEC 60909. It has an impact
    on how the correction factors are calculated for transformers, since
    the transformer is not necessarily part of a synchronous machine and
    generating unit. It is not always possible to derive this information
    from the model. This is why the attribute is necessary.
    '''

    operationalValuesConsidered: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            It is used to define if the data (other attributes related to short circuit
            data exchange) defines long term operational conditions or not. Used for
            short circuit data exchange according to IEC 60909.
            '''

        })
    '''
    It is used to define if the data (other attributes related to short
    circuit data exchange) defines long term operational conditions or
    not. Used for short circuit data exchange according to IEC 60909.
    '''

    vectorGroup: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Vector group of the transformer for protective relaying, e.g., Dyn1. For
            unbalanced transformers, this may not be simply determined from the constituent
            winding connections and phase angle displacements.
            The vectorGroup string consists of the following components in the order
            listed: high voltage winding connection, mid voltage winding connection
            (for three winding transformers), phase displacement clock number from
            0 to 11, low voltage winding connection
            phase displacement clock number from 0 to 11. The winding connections are
            D (delta), Y (wye), YN (wye with neutral), Z (zigzag), ZN (zigzag with
            neutral), A (auto transformer). Upper case means the high voltage, lower
            case mid or low. The high voltage winding always has clock position 0 and
            is not included in the vector group string. Some examples: YNy0 (two winding
            wye to wye with no phase displacement), YNd11 (two winding wye to delta
            with 330 degrees phase displacement), YNyn0d5 (three winding transformer
            wye with neutral high voltage, wye with neutral mid voltage and no phase
            displacement, delta low voltage with 150 degrees displacement).
            Phase displacement is defined as the angular difference between the phasors
            representing the voltages between the neutral point (real or imaginary)
            and the corresponding terminals of two windings, a positive sequence voltage
            system being applied to the high-voltage terminals, following each other
            in alphabetical sequence if they are lettered, or in numerical sequence
            if they are numbered: the phasors are assumed to rotate in a counter-clockwise
            sense.
            '''

        })
    '''
    Vector group of the transformer for protective relaying, e.g., Dyn1.
    For unbalanced transformers, this may not be simply determined from
    the constituent winding connections and phase angle displacements.
    The vectorGroup string consists of the following components in the
    order listed: high voltage winding connection, mid voltage winding
    connection (for three winding transformers), phase displacement clock
    number from 0 to 11, low voltage winding connection
    phase displacement clock number from 0 to 11. The winding connections
    are D (delta), Y (wye), YN (wye with neutral), Z (zigzag), ZN (zigzag
    with neutral), A (auto transformer). Upper case means the high voltage,
    lower case mid or low. The high voltage winding always has clock position
    0 and is not included in the vector group string. Some examples: YNy0
    (two winding wye to wye with no phase displacement), YNd11 (two winding
    wye to delta with 330 degrees phase displacement), YNyn0d5 (three winding
    transformer wye with neutral high voltage, wye with neutral mid voltage
    and no phase displacement, delta low voltage with 150 degrees displacement).
    Phase displacement is defined as the angular difference between the
    phasors representing the voltages between the neutral point (real or
    imaginary) and the corresponding terminals of two windings, a positive
    sequence voltage system being applied to the high-voltage terminals,
    following each other in alphabetical sequence if they are lettered,
    or in numerical sequence if they are numbered: the phasors are assumed
    to rotate in a counter-clockwise sense.
    '''

    beforeShCircuitHighestOperatingCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The highest operating current (Ib in IEC 60909-0) before short circuit
            (depends on network configuration and relevant reliability philosophy).
            It is used for calculation of the impedance correction factor KT defined
            in IEC 60909-0.
            '''

        })
    '''
    The highest operating current (Ib in IEC 60909-0) before short circuit
    (depends on network configuration and relevant reliability philosophy).
    It is used for calculation of the impedance correction factor KT defined
    in IEC 60909-0.
    '''

    beforeShCircuitHighestOperatingVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The highest operating voltage (Ub in IEC 60909-0) before short circuit.
            It is used for calculation of the impedance correction factor KT defined
            in IEC 60909-0. This is worst case voltage on the low side winding (3.7.1
            of IEC 60909:2001). Used to define operating conditions.
            '''

        })
    '''
    The highest operating voltage (Ub in IEC 60909-0) before short circuit.
    It is used for calculation of the impedance correction factor KT defined
    in IEC 60909-0. This is worst case voltage on the low side winding
    (3.7.1 of IEC 60909:2001). Used to define operating conditions.
    '''

    beforeShortCircuitAnglePf: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The angle of power factor before short circuit (phib in IEC 60909-0). It
            is used for calculation of the impedance correction factor KT defined in
            IEC 60909-0. This is the worst case power factor. Used to define operating
            conditions.
            '''

        })
    '''
    The angle of power factor before short circuit (phib in IEC 60909-0).
    It is used for calculation of the impedance correction factor KT defined
    in IEC 60909-0. This is the worst case power factor. Used to define
    operating conditions.
    '''

    highSideMinOperatingU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum operating voltage (uQmin in IEC 60909-0) at the high voltage
            side (Q side) of the unit transformer of the power station unit. A value
            well established from long-term operating experience of the system. It
            is used for calculation of the impedance correction factor KG defined in
            IEC 60909-0.
            '''

        })
    '''
    The minimum operating voltage (uQmin in IEC 60909-0) at the high voltage
    side (Q side) of the unit transformer of the power station unit. A
    value well established from long-term operating experience of the system.
    It is used for calculation of the impedance correction factor KG defined
    in IEC 60909-0.
    '''

    PowerTransformerEnd: list[PowerTransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerTransformerEnd.PowerTransformer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The ends of this power transformer.
            '''

        })
    '''
    The ends of this power transformer.
    '''

    TransformerTanks: list[TransformerTank] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerTank.PowerTransformer',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All transformers that belong to this bank.
            '''

        })
    '''
    All transformers that belong to this bank.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktPowerTransformer(PowerTransformer):
    '''
    Subclass of IEC61970:Wires:PowerTransformer.
    '''

    EndAFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktPowerTransformerEndAFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EndBFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktPowerTransformerEndBFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class SeriesCompensator(ConductingEquipment):
    '''
    A Series Compensator is a series capacitor or reactor or an AC transmission
    line without charging susceptance. It is a two terminal device.
    '''

    varistorPresent: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Describe if a metal oxide varistor (mov) for over voltage protection is
            configured in parallel with the series compensator. It is used for short
            circuit calculations.
            '''

        })
    '''
    Describe if a metal oxide varistor (mov) for over voltage protection
    is configured in parallel with the series compensator. It is used for
    short circuit calculations.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence resistance.
            '''

        })
    '''
    Positive sequence resistance.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence resistance.
            '''

        })
    '''
    Zero sequence resistance.
    '''

    varistorRatedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum current the varistor is designed to handle at specified duration.
            It is used for short circuit calculations and exchanged only if SeriesCompensator.varistorPresent
            is true.
            The attribute shall be a positive value.
            '''

        })
    '''
    The maximum current the varistor is designed to handle at specified
    duration. It is used for short circuit calculations and exchanged only
    if SeriesCompensator.varistorPresent is true.
    The attribute shall be a positive value.
    '''

    varistorVoltageThreshold: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC voltage at which the varistor starts conducting. It is used for
            short circuit calculations and exchanged only if SeriesCompensator.varistorPresent
            is true.
            '''

        })
    '''
    The DC voltage at which the varistor starts conducting. It is used
    for short circuit calculations and exchanged only if SeriesCompensator.varistorPresent
    is true.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence reactance.
            '''

        })
    '''
    Positive sequence reactance.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence reactance.
            '''

        })
    '''
    Zero sequence reactance.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@dataclass(repr=False)
class Switch(ConductingEquipment):
    '''
    A generic device designed to close, or open, or both, one or more electric
    circuits. All switches are two terminal devices including grounding switches.
    The ACDCTerminal.connected at the two sides of the switch shall not be
    considered for assessing switch connectivity, i.e. only Switch.open, .normalOpen
    and .locked are relevant.
    '''

    locked: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, the switch is locked. The resulting switch state is a combination
            of locked and Switch.open attributes as follows:
            <ul>
            <li>locked=true and Switch.open=true. The resulting state is open and locked;</li>
            <li>locked=false and Switch.open=true. The resulting state is open;</li>
            <li>locked=false and Switch.open=false. The resulting state is closed.</li>
            </ul>
            '''

        })
    '''
    If true, the switch is locked. The resulting switch state is a combination
    of locked and Switch.open attributes as follows:
    <ul>
    <li>locked=true and Switch.open=true. The resulting state is open and
    locked;</li>
    <li>locked=false and Switch.open=true. The resulting state is open;</li>
    <li>locked=false and Switch.open=false. The resulting state is closed.</li>
    </ul>
    '''

    normalOpen: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute is used in cases when no Measurement for the status value
            is present. If the Switch has a status measurement the Discrete.normalValue
            is expected to match with the Switch.normalOpen.
            '''

        })
    '''
    The attribute is used in cases when no Measurement for the status value
    is present. If the Switch has a status measurement the Discrete.normalValue
    is expected to match with the Switch.normalOpen.
    '''

    open: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute tells if the switch is considered open when used as input
            to topology processing.
            '''

        })
    '''
    The attribute tells if the switch is considered open when used as input
    to topology processing.
    '''

    retained: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Branch is retained in the topological solution. The flow through retained
            switches will normally be calculated in power flow.
            '''

        })
    '''
    Branch is retained in the topological solution. The flow through retained
    switches will normally be calculated in power flow.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum continuous current carrying capacity in amps governed by the
            device material and construction.
            The attribute shall be a positive value.
            '''

        })
    '''
    The maximum continuous current carrying capacity in amps governed by
    the device material and construction.
    The attribute shall be a positive value.
    '''

    CompositeSwitch: Optional[CompositeSwitch] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CompositeSwitch.Switches',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Composite switch to which this Switch belongs.
            '''

        })
    '''
    Composite switch to which this Switch belongs.
    '''

    SwitchAction: Optional[SwitchAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchAction.OperatedSwitch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action changing status of this switch.
            '''

        })
    '''
    Action changing status of this switch.
    '''

    SvSwitch: list[SvSwitch] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvSwitch.Switch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The switch state associated with the switch.
            '''

        })
    '''
    The switch state associated with the switch.
    '''

    SwitchPhase: list[SwitchPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchPhase.Switch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The individual switch phases for the switch.
            '''

        })
    '''
    The individual switch phases for the switch.
    '''

    SwitchSchedules: list[SwitchSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchSchedule.Switch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A Switch can be associated with SwitchSchedules.
            '''

        })
    '''
    A Switch can be associated with SwitchSchedules.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cut(Switch):
    '''
    A cut separates a line segment into two parts. The cut appears as a switch
    inserted between these two parts and connects them together. As the cut
    is normally open there is no galvanic connection between the two line segment
    parts. But it is possible to close the cut to get galvanic connection.
    The cut terminals are oriented towards the line segment terminals with
    the same sequence number. Hence the cut terminal with sequence number equal
    to 1 is oriented to the line segment's terminal with sequence number equal
    to 1.
    The cut terminals also act as connection points for jumpers and other equipment,
    e.g. a mobile generator. To enable this, connectivity nodes are placed
    at the cut terminals. Once the connectivity nodes are in place any conducting
    equipment can be connected at them.
    '''

    lengthFromTerminal1: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The length to the place where the cut is located starting from side one
            of the cut line segment, i.e. the line segment Terminal with sequenceNumber
            equal to 1.
            '''

        })
    '''
    The length to the place where the cut is located starting from side
    one of the cut line segment, i.e. the line segment Terminal with sequenceNumber
    equal to 1.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.Cut',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The line segment to which the cut is applied.
            '''

        })
    '''
    The line segment to which the cut is applied.
    '''

    CutAction: Optional[CutAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CutAction.Cut',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this cut.
            '''

        })
    '''
    Action taken with this cut.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Disconnector(Switch):
    '''
    A mechanical switching device which provides, in the open position, an
    isolating distance in accordance with specified requirements.
    A disconnector is capable of opening and closing a circuit when either
    negligible current is broken or made, or when no significant change in
    the voltage across the terminals of each of the poles of the disconnector
    occurs. It is also capable of carrying currents under normal circuit conditions
    and carrying for a specified time currents under abnormal conditions such
    as those of short circuit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EarthingSwitch(Switch):
    '''
    A mechanical switching device for earthing parts of a circuit, capable
    of withstanding for a specified time currents under abnormal conditions
    such as those of short circuit, but not required to carry current under
    normal conditions of the circuit.
    An earthing switch may have a short-circuit making capacity.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Fuse(Switch):
    '''
    An overcurrent protective device with a circuit opening fusible part that
    is heated and severed by the passage of overcurrent through it. A fuse
    is considered a switching device because it breaks current.
    '''

    MiinimumMeltCurve: Optional[FuseCharacteristicCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuseCharacteristicCurve.FuseMinimumMelt',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Curves that define the time-current operation of this fuse (Minimum Melt)
            '''

        })
    '''
    Curves that define the time-current operation of this fuse (Minimum
    Melt)
    '''

    TotalClearingTimeCurve: Optional[FuseCharacteristicCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuseCharacteristicCurve.FuseTotalClearing',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Curves that define the time-current operation of this fuse (Total Clearing
            Time Curves)
            '''

        })
    '''
    Curves that define the time-current operation of this fuse (Total Clearing
    Time Curves)
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GroundDisconnector(Switch):
    '''
    A manually operated or motor operated mechanical switching device used
    for isolating a circuit or equipment from ground.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Jumper(Switch):
    '''
    A short section of conductor with negligible impedance which can be manually
    removed and replaced if the circuit is de-energized. Note that zero-impedance
    branches can potentially be modelled by other equipment types.
    '''

    JumperAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.Jumper',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this jumper.
            '''

        })
    '''
    Action taken with this jumper.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectedSwitch(Switch):
    '''
    A ProtectedSwitch is a switching device that can be operated by ProtectionEquipment.
    '''

    breakingCapacity: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum fault current a breaking device can break safely under prescribed
            conditions of use.
            '''

        })
    '''
    The maximum fault current a breaking device can break safely under
    prescribed conditions of use.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class Breaker(ProtectedSwitch):
    '''
    A mechanical switching device capable of making, carrying, and breaking
    currents under normal circuit conditions and also making, carrying for
    a specified time, and breaking currents under specified abnormal circuit
    conditions e.g. those of short circuit.
    '''

    inTransitTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The transition time from open to close.
            '''

        })
    '''
    The transition time from open to close.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DisconnectingCircuitBreaker(Breaker):
    '''
    A circuit breaking device including disconnecting function, eliminating
    the need for separate disconnectors.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class LoadBreakSwitch(ProtectedSwitch):
    '''
    A mechanical switching device capable of making, carrying, and breaking
    currents under normal operating conditions.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Recloser(ProtectedSwitch):
    '''
    Pole-mounted fault interrupter with built-in phase and ground relays, current
    transformer (CT), and supplemental controls.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class Sectionaliser(Switch):
    '''
    Automatic switch that will lock open to isolate a faulted section. It may,
    or may not, have load breaking capability. Its primary purpose is to provide
    fault sectionalising at locations where the fault current is either too
    high, or too low, for proper coordination of fuses.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCConductingEquipment(Equipment):
    '''
    The parts of the DC power system that are designed to carry current or
    that are conductively connected through DC terminals.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum continuous current carrying capacity in amps governed by the
            device material and construction.
            The attribute shall be a positive value.
            '''

        })
    '''
    The maximum continuous current carrying capacity in amps governed by
    the device material and construction.
    The attribute shall be a positive value.
    '''

    ratedUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated DC device voltage. The attribute shall be a positive value. It is
            configuration data used in power flow.
            '''

        })
    '''
    Rated DC device voltage. The attribute shall be a positive value. It
    is configuration data used in power flow.
    '''

    DCTerminals: list[DCTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCTerminal.DCConductingEquipment',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A DC conducting equipment has DC terminals.
            '''

        })
    '''
    A DC conducting equipment has DC terminals.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCBusbar(DCConductingEquipment):
    '''
    A busbar within a DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCChopper(DCConductingEquipment):
    '''
    Low resistance equipment used in the internal DC circuit to balance voltages.
    It has typically positive and negative pole terminals and a ground.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCGround(DCConductingEquipment):
    '''
    A ground within a DC system.
    '''

    inductance: Optional[ float | Inductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductance to ground.
            '''

        })
    '''
    Inductance to ground.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance to ground.
            '''

        })
    '''
    Resistance to ground.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCLineSegment(DCConductingEquipment):
    '''
    A wire or combination of wires not insulated from one another, with consistent
    electrical characteristics, used to carry direct current between points
    in the DC region of the power system.
    '''

    capacitance: Optional[ float | Capacitance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitance of the DC line segment. Significant for cables only.
            '''

        })
    '''
    Capacitance of the DC line segment. Significant for cables only.
    '''

    inductance: Optional[ float | Inductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductance of the DC line segment. Negligible compared with DCSeriesDevice
            used for smoothing.
            '''

        })
    '''
    Inductance of the DC line segment. Negligible compared with DCSeriesDevice
    used for smoothing.
    '''

    length: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Segment length for calculating line section capabilities.
            '''

        })
    '''
    Segment length for calculating line section capabilities.
    '''

    resistance: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the DC line segment.
            '''

        })
    '''
    Resistance of the DC line segment.
    '''

    PerLengthParameter: Optional[PerLengthDCLineParameter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PerLengthDCLineParameter.DCLineSegments',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Set of per-length parameters for this line segment.
            '''

        })
    '''
    Set of per-length parameters for this line segment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSeriesDevice(DCConductingEquipment):
    '''
    A series device within the DC system, typically a reactor used for filtering
    or smoothing. Needed for transient and short circuit studies.
    '''

    inductance: Optional[ float | Inductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Inductance of the device.
            '''

        })
    '''
    Inductance of the device.
    '''

    resistance: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the DC device.
            '''

        })
    '''
    Resistance of the DC device.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCHarmonicFilter(DCSeriesDevice):
    '''
    DC harmonic filter (IEC 60633) is a filter which, in conjunction with the
    DC reactor(s) and with the DC surge capacitor(s), if any, serves the primary
    function of reducing (current or voltage) ripple on the DC transmission
    line and/or earth electrode line.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSmoothingReactor(DCSeriesDevice):
    '''
    Reactor (IEC 60633) connected in series with a converter unit or converter
    units on the DC side for the primary purpose of smoothing the direct current
    and reducing current transients.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSmoothingReactorArrester(DCSeriesDevice):
    '''
    Arrester (IEC 60633) connected between the terminals of a smoothing reactor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCShunt(DCConductingEquipment):
    '''
    A shunt device within the DC system, typically used for filtering. Needed
    for transient and short circuit studies.
    '''

    capacitance: Optional[ float | Capacitance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Capacitance of the DC shunt.
            '''

        })
    '''
    Capacitance of the DC shunt.
    '''

    resistance: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the DC device.
            '''

        })
    '''
    Resistance of the DC device.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCSwitch(DCConductingEquipment):
    '''
    A switch within the DC system.
    '''

    locked: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, the switch is locked. The resulting switch state is a combination
            of locked and DCSwitch.open attributes as follows:
            <ul>
            <li>locked=true and DCSwitch.open=true. The resulting state is open and
            locked;</li>
            <li>locked=false and DCSwitch.open=true. The resulting state is open;</li>
            <li>locked=false and DCSwitch.open=false. The resulting state is closed.</li>
            </ul>
            '''

        })
    '''
    If true, the switch is locked. The resulting switch state is a combination
    of locked and DCSwitch.open attributes as follows:
    <ul>
    <li>locked=true and DCSwitch.open=true. The resulting state is open
    and locked;</li>
    <li>locked=false and DCSwitch.open=true. The resulting state is open;</li>
    <li>locked=false and DCSwitch.open=false. The resulting state is closed.</li>
    </ul>
    '''

    normalOpen: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute is used in cases when no Measurement for the status value
            is present. If the DCSwitch has a status measurement the Discrete.normalValue
            is expected to match with the DCSwitch.normalOpen.
            '''

        })
    '''
    The attribute is used in cases when no Measurement for the status value
    is present. If the DCSwitch has a status measurement the Discrete.normalValue
    is expected to match with the DCSwitch.normalOpen.
    '''

    open: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute tells if the switch is considered open when used as input
            to topology processing.
            '''

        })
    '''
    The attribute tells if the switch is considered open when used as input
    to topology processing.
    '''

    retained: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Branch is retained in the topological solution. The flow through retained
            switches will normally be calculated in power flow.
            '''

        })
    '''
    Branch is retained in the topological solution. The flow through retained
    switches will normally be calculated in power flow.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCBreaker(DCSwitch):
    '''
    A breaker within a DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCDisconnector(DCSwitch):
    '''
    A disconnector within a DC system.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCHighSpeedSwitch(DCSwitch):
    '''
    High-speed DC switch (IEC 60633) is a type of switchgear used on a DC scheme,
    required to open or close rapidly (&lt; 1 s), including in some cases the
    need to commutate load current into a parallel conducting path, but with
    no requirement to interrupt fault or load current. DC switchgear is usually
    based on a single-phase unit of an AC circuit-breaker, appropriately modified
    for their DC applications. Their capabilities to perform faster opening
    and closing than disconnect switches are used but the function of breaking
    short-circuit currents is not required.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCBypassSwitch(DCHighSpeedSwitch):
    '''
    By-pass switch (IEC 60633) is a high-speed DC switch connected across each
    converter valve group in DC schemes using more than one independent converter
    per pole, designed to close rapidly to bypass a converter group that is
    being taken out of service and commutate the current back into a valve
    group that is being taken back in service. A by-pass switch may also be
    used for prolonged shunting of the bridge(s).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCCommutationSwitch(DCHighSpeedSwitch):
    '''
    DC commutation switch (IEC 60633) is a type of high-speed DC switch specifically
    designed to commutate load current into an alternative parallel current
    path.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCEarthReturnTransferSwitch(DCCommutationSwitch):
    '''
    Earth return transfer switch (IEC 60633) DC commutation switch used to
    transfer DC current from a metallic return path to an earth return path.
    In some applications, this function is performed by a by-pass switch. Although
    the term "earth return transfer breaker" has been widely used in the industry
    for many years, it is misleading since such switches have no ability to
    interrupt fault current.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCLineParallelingSwitch(DCCommutationSwitch):
    '''
    Line paralleling switch (IEC 60633) DC commutation switch placed in series
    with one or more high-voltage pole conductors, allowing two or more lines
    to be connected in parallel or to revert to single-line operation while
    conducting load current.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCMetalicReturnSwitch(DCCommutationSwitch):
    '''
    Metallic return transfer switch (IEC 60633) is a DC commutation switch
    used to transfer DC current from an earth return path to a metallic return
    path. Although the term "metallic return transfer breaker" has been widely
    used in the industry for many years, it is misleading since such switches
    have no ability to interrupt fault current.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCNeutralBusGroundingSwitch(DCCommutationSwitch):
    '''
    Neutral bus grounding switch (IEC 60633) or a neutral bus earthing switch
    is a DC commutation switch connected from the neutral bus to the station
    earth mat on a bipolar DC scheme, designed to provide a temporary earth
    connection in the event of an open circuit fault on the electrode line
    until the imbalance of current between the two poles can be reduced to
    a safe minimum level or the electrode line connection can be restored.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCNeutralBusSwitch(DCCommutationSwitch):
    '''
    Neutral bus switch (IEC 60633) is a DC commutation switch connected in
    series with the neutral bus on a bipolar DC scheme, designed to commutate
    current out of the pole conductor or neutral bus and into the electrode
    line or dedicated metallic return conductor or earth in response to a fault
    in a converter or neutral bus.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCConverterParallelingSwitch(DCHighSpeedSwitch):
    '''
    Converter paralleling switch (IEC 60633) is a high-speed DC switch connected
    in series with each converter at the DC terminal in DC schemes where two
    or more converters are connected in parallel onto a common pole conductor,
    designed to allow additional converter(s) to be connected in parallel or
    disconnected without affecting the load current in the other converter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class GeneratingUnit(Equipment):
    '''
    A single or set of synchronous machines for converting mechanical power
    into alternating-current power. For example, individual machines within
    a set may be defined for scheduling purposes while a single control signal
    is derived for the set. In this case there would be a GeneratingUnit for
    each member of the set and an additional GeneratingUnit corresponding to
    the set.
    '''

    longPF: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generating unit long term economic participation factor.
            '''

        })
    '''
    Generating unit long term economic participation factor.
    '''

    normalPF: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generating unit economic participation factor. The sum of the participation
            factors across generating units does not have to sum to one. It is used
            for representing distributed slack participation factor. The attribute
            shall be a positive value or zero.
            '''

        })
    '''
    Generating unit economic participation factor. The sum of the participation
    factors across generating units does not have to sum to one. It is
    used for representing distributed slack participation factor. The attribute
    shall be a positive value or zero.
    '''

    penaltyFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Defined as: 1 / ( 1 - Incremental Transmission Loss); with the Incremental
            Transmission Loss expressed as a plus or minus value. The typical range
            of penalty factors is (0.9 to 1.1).
            '''

        })
    '''
    Defined as: 1 / ( 1 - Incremental Transmission Loss); with the Incremental
    Transmission Loss expressed as a plus or minus value. The typical range
    of penalty factors is (0.9 to 1.1).
    '''

    shortPF: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generating unit short term economic participation factor.
            '''

        })
    '''
    Generating unit short term economic participation factor.
    '''

    tieLinePF: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generating unit economic participation factor.
            '''

        })
    '''
    Generating unit economic participation factor.
    '''

    allocSpinResP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The planned unused capacity (spinning reserve) which can be used to support
            emergency load.
            '''

        })
    '''
    The planned unused capacity (spinning reserve) which can be used to
    support emergency load.
    '''

    autoCntrlMarginP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The planned unused capacity which can be used to support automatic control
            overruns.
            '''

        })
    '''
    The planned unused capacity which can be used to support automatic
    control overruns.
    '''

    baseP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For dispatchable units, this value represents the economic active power
            basepoint, for units that are not dispatchable, this value represents the
            fixed generation value. The value shall be between the operating low and
            high limits.
            '''

        })
    '''
    For dispatchable units, this value represents the economic active power
    basepoint, for units that are not dispatchable, this value represents
    the fixed generation value. The value shall be between the operating
    low and high limits.
    '''

    controlDeadband: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Unit control error deadband. When a unit's desired active power change
            is less than this deadband, then no control pulses will be sent to the
            unit.
            '''

        })
    '''
    Unit control error deadband. When a unit's desired active power change
    is less than this deadband, then no control pulses will be sent to
    the unit.
    '''

    controlPulseHigh: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Pulse high limit which is the largest control pulse that the unit can respond
            to.
            '''

        })
    '''
    Pulse high limit which is the largest control pulse that the unit can
    respond to.
    '''

    controlPulseLow: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Pulse low limit which is the smallest control pulse that the unit can respond
            to.
            '''

        })
    '''
    Pulse low limit which is the smallest control pulse that the unit can
    respond to.
    '''

    controlResponseRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Unit response rate which specifies the active power change for a control
            pulse of one second in the most responsive loading level of the unit.
            '''

        })
    '''
    Unit response rate which specifies the active power change for a control
    pulse of one second in the most responsive loading level of the unit.
    '''

    efficiency: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The efficiency of the unit in converting mechanical energy, from the prime
            mover, into electrical energy.
            '''

        })
    '''
    The efficiency of the unit in converting mechanical energy, from the
    prime mover, into electrical energy.
    '''

    governorMPL: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Governor motor position limit.
            '''

        })
    '''
    Governor motor position limit.
    '''

    governorSCD: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Governor Speed Changer Droop. This is the change in generator power output
            divided by the change in frequency normalized by the nominal power of the
            generator and the nominal frequency and expressed in percent and negated.
            A positive value of speed change droop provides additional generator output
            upon a drop in frequency.
            '''

        })
    '''
    Governor Speed Changer Droop. This is the change in generator power
    output divided by the change in frequency normalized by the nominal
    power of the generator and the nominal frequency and expressed in percent
    and negated. A positive value of speed change droop provides additional
    generator output upon a drop in frequency.
    '''

    highControlLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            High limit for secondary (AGC) control.
            '''

        })
    '''
    High limit for secondary (AGC) control.
    '''

    initialP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Default initial active power which is used to store a powerflow result
            for the initial active power for this unit in this network configuration.
            '''

        })
    '''
    Default initial active power which is used to store a powerflow result
    for the initial active power for this unit in this network configuration.
    '''

    lowControlLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Low limit for secondary (AGC) control.
            '''

        })
    '''
    Low limit for secondary (AGC) control.
    '''

    lowerRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal maximum rate the generating unit active power output can be
            lowered by control actions.
            '''

        })
    '''
    The normal maximum rate the generating unit active power output can
    be lowered by control actions.
    '''

    maxEconomicP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum high economic active power limit, that should not exceed the maximum
            operating active power limit.
            '''

        })
    '''
    Maximum high economic active power limit, that should not exceed the
    maximum operating active power limit.
    '''

    maximumAllowableSpinningReserve: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowable spinning reserve. Spinning reserve will never be considered
            greater than this value regardless of the current operating point.
            '''

        })
    '''
    Maximum allowable spinning reserve. Spinning reserve will never be
    considered greater than this value regardless of the current operating
    point.
    '''

    maxOperatingP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the maximum operating active power limit the dispatcher can enter
            for this unit.
            '''

        })
    '''
    This is the maximum operating active power limit the dispatcher can
    enter for this unit.
    '''

    minEconomicP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Low economic active power limit that shall be greater than or equal to
            the minimum operating active power limit.
            '''

        })
    '''
    Low economic active power limit that shall be greater than or equal
    to the minimum operating active power limit.
    '''

    minimumOffTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum time interval between unit shutdown and startup.
            '''

        })
    '''
    Minimum time interval between unit shutdown and startup.
    '''

    minOperatingP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the minimum operating active power limit the dispatcher can enter
            for this unit.
            '''

        })
    '''
    This is the minimum operating active power limit the dispatcher can
    enter for this unit.
    '''

    modelDetail: Optional[ int | Classification ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Detail level of the generator model data.
            '''

        })
    '''
    Detail level of the generator model data.
    '''

    nominalP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The nominal power of the generating unit. Used to give precise meaning
            to percentage based attributes such as the governor speed change droop
            (governorSCD attribute).
            The attribute shall be a positive value equal to or less than RotatingMachine.ratedS.
            '''

        })
    '''
    The nominal power of the generating unit. Used to give precise meaning
    to percentage based attributes such as the governor speed change droop
    (governorSCD attribute).
    The attribute shall be a positive value equal to or less than RotatingMachine.ratedS.
    '''

    raiseRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal maximum rate the generating unit active power output can be
            raised by control actions.
            '''

        })
    '''
    The normal maximum rate the generating unit active power output can
    be raised by control actions.
    '''

    ratedGrossMaxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's gross rated maximum capacity (book value).
            The attribute shall be a positive value.
            '''

        })
    '''
    The unit's gross rated maximum capacity (book value).
    The attribute shall be a positive value.
    '''

    ratedGrossMinP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The gross rated minimum generation level which the unit can safely operate
            at while delivering power to the transmission grid.
            The attribute shall be a positive value.
            '''

        })
    '''
    The gross rated minimum generation level which the unit can safely
    operate at while delivering power to the transmission grid.
    The attribute shall be a positive value.
    '''

    ratedNetMaxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The net rated maximum capacity determined by subtracting the auxiliary
            power used to operate the internal plant machinery from the rated gross
            maximum capacity.
            The attribute shall be a positive value.
            '''

        })
    '''
    The net rated maximum capacity determined by subtracting the auxiliary
    power used to operate the internal plant machinery from the rated gross
    maximum capacity.
    The attribute shall be a positive value.
    '''

    startupCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The initial startup cost incurred for each start of the GeneratingUnit.
            '''

        })
    '''
    The initial startup cost incurred for each start of the GeneratingUnit.
    '''

    startupTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Time it takes to get the unit on-line, from the time that the prime mover
            mechanical power is applied.
            '''

        })
    '''
    Time it takes to get the unit on-line, from the time that the prime
    mover mechanical power is applied.
    '''

    totalEfficiency: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The efficiency of the unit in converting the fuel into electrical energy.
            '''

        })
    '''
    The efficiency of the unit in converting the fuel into electrical energy.
    '''

    variableCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The variable cost component of production per unit of ActivePower.
            '''

        })
    '''
    The variable cost component of production per unit of ActivePower.
    '''

    genControlMode: Optional[GeneratorControlMode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit control mode.
            '''

        })
    '''
    The unit control mode.
    '''

    genControlSource: Optional[GeneratorControlSource] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The source of controls for a generating unit. Defines the control status
            of the generating unit.
            '''

        })
    '''
    The source of controls for a generating unit. Defines the control status
    of the generating unit.
    '''

    GenUnitOpSchedule: Optional[GenUnitOpSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenUnitOpSchedule.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A generating unit may have an operating schedule, indicating the planned
            operation of the unit.
            '''

        })
    '''
    A generating unit may have an operating schedule, indicating the planned
    operation of the unit.
    '''

    ControlAreaGeneratingUnit: list[ControlAreaGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaGeneratingUnit.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            ControlArea specifications for this generating unit.
            '''

        })
    '''
    ControlArea specifications for this generating unit.
    '''

    GenUnitOpCostCurves: list[GenUnitOpCostCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GenUnitOpCostCurve.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A generating unit may have one or more cost curves, depending upon fuel
            mixture and fuel cost.
            '''

        })
    '''
    A generating unit may have one or more cost curves, depending upon
    fuel mixture and fuel cost.
    '''

    GenUnitOpSchedule: Optional[GenUnitOpSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenUnitOpSchedule.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A generating unit may have an operating schedule, indicating the planned
            operation of the unit.
            '''

        })
    '''
    A generating unit may have an operating schedule, indicating the planned
    operation of the unit.
    '''

    GrossToNetActivePowerCurves: list[GrossToNetActivePowerCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GrossToNetActivePowerCurve.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A generating unit may have a gross active power to net active power curve,
            describing the losses and auxiliary power requirements of the unit.
            '''

        })
    '''
    A generating unit may have a gross active power to net active power
    curve, describing the losses and auxiliary power requirements of the
    unit.
    '''

    RotatingMachine: list[RotatingMachine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RotatingMachine.GeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A synchronous machine may operate as a generator and as such becomes a
            member of a generating unit.
            '''

        })
    '''
    A synchronous machine may operate as a generator and as such becomes
    a member of a generating unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeothermalGeneratingUnit(GeneratingUnit):
    '''
    Generating unit that is generating electrical power from geothermal energy.
    '''

    kind: Optional[GeothermalUnitKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of geothermal generating unit.
            '''

        })
    '''
    Kind of geothermal generating unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class HydroGeneratingUnit(GeneratingUnit):
    '''
    A generating unit whose prime mover is a hydraulic turbine (e.g. Francis,
    Pelton, Kaplan).
    '''

    dropHeight: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The height water drops from the reservoir mid-point to the turbine.
            '''

        })
    '''
    The height water drops from the reservoir mid-point to the turbine.
    '''

    hydroUnitWaterCost: Optional[ float | CostPerVolume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The equivalent cost of water that drives the hydro turbine.
            '''

        })
    '''
    The equivalent cost of water that drives the hydro turbine.
    '''

    energyConversionCapability: Optional[HydroEnergyConversionKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Energy conversion capability for generating.
            '''

        })
    '''
    Energy conversion capability for generating.
    '''

    turbineType: Optional[HydroTurbineKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of turbine.
            '''

        })
    '''
    Type of turbine.
    '''

    HydroPowerPlant: Optional[HydroPowerPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPowerPlant.HydroGeneratingUnits',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro generating unit belongs to a hydro power plant.
            '''

        })
    '''
    The hydro generating unit belongs to a hydro power plant.
    '''

    PenstockLossCurve: Optional[PenstockLossCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PenstockLossCurve.HydroGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A hydro generating unit has a penstock loss curve.
            '''

        })
    '''
    A hydro generating unit has a penstock loss curve.
    '''

    HydroGeneratingEfficiencyCurves: list[HydroGeneratingEfficiencyCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HydroGeneratingEfficiencyCurve.HydroGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A hydro generating unit has an efficiency curve.
            '''

        })
    '''
    A hydro generating unit has an efficiency curve.
    '''

    PenstockLossCurve: Optional[PenstockLossCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PenstockLossCurve.HydroGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A hydro generating unit has a penstock loss curve.
            '''

        })
    '''
    A hydro generating unit has a penstock loss curve.
    '''

    TailbayLossCurve: list[TailbayLossCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TailbayLossCurve.HydroGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A hydro generating unit has a tailbay loss curve.
            '''

        })
    '''
    A hydro generating unit has a tailbay loss curve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktGeneratingUnit(GeneratingUnit):
    '''
    Subclass of IEC61970:Production:GeneratingUnit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NuclearGeneratingUnit(GeneratingUnit):
    '''
    A nuclear generating unit.
    '''

    reactorKind: Optional[NuclearReactorKind] = field(
        default=None,
        metadata={
        'type': 'NC enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://entsoe.eu/ns/nc#',
        'serialize': True,
        'docstring':
            '''
            Kind of nuclear reactor.
            '''

        })
    '''
    Kind of nuclear reactor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SolarGeneratingUnit(GeneratingUnit):
    '''
    A solar thermal generating unit, connected to the grid by means of a rotating
    machine. This class does not represent photovoltaic (PV) generation.
    '''

    SolarPowerPlant: Optional[SolarPowerPlant] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SolarPowerPlant.SolarGeneratingUnits',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            A solar power plant may have solar generating units.
            '''

        })
    '''
    A solar power plant may have solar generating units.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ThermalGeneratingUnit(GeneratingUnit):
    '''
    A generating unit whose prime mover could be a steam turbine, combustion
    turbine, or diesel engine.
    '''

    oMCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Operating and maintenance cost for the thermal unit.
            '''

        })
    '''
    Operating and maintenance cost for the thermal unit.
    '''

    CAESPlant: Optional[CAESPlant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CAESPlant.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may be a member of a compressed air energy storage
            plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a compressed air energy
    storage plant.
    '''

    CogenerationPlant: Optional[CogenerationPlant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CogenerationPlant.ThermalGeneratingUnits',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may be a member of a cogeneration plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a cogeneration plant.
    '''

    CombinedCyclePlant: Optional[CombinedCyclePlant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CombinedCyclePlant.ThermalGeneratingUnits',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may be a member of a combined cycle plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a combined cycle plant.
    '''

    HeatInputCurve: Optional[HeatInputCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HeatInputCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a heat input curve.
            '''

        })
    '''
    A thermal generating unit may have a heat input curve.
    '''

    HeatRateCurve: Optional[HeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HeatRateCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have a heat rate curve.
    '''

    IncrementalHeatRateCurve: Optional[IncrementalHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IncrementalHeatRateCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have an incremental heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have an incremental heat rate curve.
    '''

    ShutdownCurve: Optional[ShutdownCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShutdownCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a shutdown curve.
            '''

        })
    '''
    A thermal generating unit may have a shutdown curve.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a startup model.
            '''

        })
    '''
    A thermal generating unit may have a startup model.
    '''

    CAESPlant: Optional[CAESPlant] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CAESPlant.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may be a member of a compressed air energy storage
            plant.
            '''

        })
    '''
    A thermal generating unit may be a member of a compressed air energy
    storage plant.
    '''

    EmmissionAccounts: list[EmissionAccount] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EmissionAccount.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have one or more emission allowance accounts.
            '''

        })
    '''
    A thermal generating unit may have one or more emission allowance accounts.
    '''

    EmissionCurves: list[EmissionCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EmissionCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have one or more emission curves.
            '''

        })
    '''
    A thermal generating unit may have one or more emission curves.
    '''

    FossilFuels: list[FossilFuel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FossilFuel.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have one or more fossil fuels.
            '''

        })
    '''
    A thermal generating unit may have one or more fossil fuels.
    '''

    FuelAllocationSchedules: list[FuelAllocationSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FuelAllocationSchedule.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have one or more fuel allocation schedules.
            '''

        })
    '''
    A thermal generating unit may have one or more fuel allocation schedules.
    '''

    HeatInputCurve: Optional[HeatInputCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HeatInputCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a heat input curve.
            '''

        })
    '''
    A thermal generating unit may have a heat input curve.
    '''

    HeatRateCurve: Optional[HeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HeatRateCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have a heat rate curve.
    '''

    IncrementalHeatRateCurve: Optional[IncrementalHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IncrementalHeatRateCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have an incremental heat rate curve.
            '''

        })
    '''
    A thermal generating unit may have an incremental heat rate curve.
    '''

    ShutdownCurve: Optional[ShutdownCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShutdownCurve.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a shutdown curve.
            '''

        })
    '''
    A thermal generating unit may have a shutdown curve.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartupModel.ThermalGeneratingUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a startup model.
            '''

        })
    '''
    A thermal generating unit may have a startup model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGeneratingUnit(GeneratingUnit):
    '''
    A wind driven generating unit, connected to the grid by means of a rotating
    machine. May be used to represent a single turbine or an aggregation.
    '''

    windGenUnitType: Optional[WindGenUnitKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The kind of wind generating unit.
            '''

        })
    '''
    The kind of wind generating unit.
    '''

    WindPowerPlant: Optional[WindPowerPlant] = field(
        default=None,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPowerPlant.WindGeneratingUnits',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': True,
        'docstring':
            '''
            A wind power plant may have wind generating units.
            '''

        })
    '''
    A wind power plant may have wind generating units.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class HydroPump(Equipment):
    '''
    A synchronous motor-driven pump, typically associated with a pumped storage
    plant.
    '''

    pumpDischAtMaxHead: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The pumping discharge under maximum head conditions, usually at full gate.
            '''

        })
    '''
    The pumping discharge under maximum head conditions, usually at full
    gate.
    '''

    pumpDischAtMinHead: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The pumping discharge under minimum head conditions, usually at full gate.
            '''

        })
    '''
    The pumping discharge under minimum head conditions, usually at full
    gate.
    '''

    pumpPowerAtMaxHead: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The pumping power under maximum head conditions, usually at full gate.
            '''

        })
    '''
    The pumping power under maximum head conditions, usually at full gate.
    '''

    pumpPowerAtMinHead: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The pumping power under minimum head conditions, usually at full gate.
            '''

        })
    '''
    The pumping power under minimum head conditions, usually at full gate.
    '''

    HydroPowerPlant: Optional[HydroPowerPlant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPowerPlant.HydroPumps',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro pump may be a member of a pumped storage plant or a pump for
            distributing water.
            '''

        })
    '''
    The hydro pump may be a member of a pumped storage plant or a pump
    for distributing water.
    '''

    HydroPumpOpSchedule: Optional[HydroPumpOpSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPumpOpSchedule.HydroPump',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro pump has a pumping schedule over time, indicating when pumping
            is to occur.
            '''

        })
    '''
    The hydro pump has a pumping schedule over time, indicating when pumping
    is to occur.
    '''

    RotatingMachine: Optional[RotatingMachine] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RotatingMachine.HydroPump',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The synchronous machine drives the turbine which moves the water from a
            low elevation to a higher elevation. The direction of machine rotation
            for pumping may or may not be the same as for generating.
            '''

        })
    '''
    The synchronous machine drives the turbine which moves the water from
    a low elevation to a higher elevation. The direction of machine rotation
    for pumping may or may not be the same as for generating.
    '''

    HydroPumpOpSchedule: Optional[HydroPumpOpSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HydroPumpOpSchedule.HydroPump',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The hydro pump has a pumping schedule over time, indicating when pumping
            is to occur.
            '''

        })
    '''
    The hydro pump has a pumping schedule over time, indicating when pumping
    is to occur.
    '''

    RotatingMachine: Optional[RotatingMachine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RotatingMachine.HydroPump',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The synchronous machine drives the turbine which moves the water from a
            low elevation to a higher elevation. The direction of machine rotation
            for pumping may or may not be the same as for generating.
            '''

        })
    '''
    The synchronous machine drives the turbine which moves the water from
    a low elevation to a higher elevation. The direction of machine rotation
    for pumping may or may not be the same as for generating.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerElectronicsUnit(Equipment):
    '''
    A generating unit or battery or aggregation that connects to the AC network
    using power electronics rather than rotating machines.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum active power limit. This is the maximum (nameplate) limit for the
            unit.
            '''

        })
    '''
    Maximum active power limit. This is the maximum (nameplate) limit for
    the unit.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum active power limit. This is the minimum (nameplate) limit for the
            unit.
            '''

        })
    '''
    Minimum active power limit. This is the minimum (nameplate) limit for
    the unit.
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.PowerElectronicsUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A power electronics unit has a connection to the AC network.
            '''

        })
    '''
    A power electronics unit has a connection to the AC network.
    '''

    PowerElectronicsUnitController: Optional[PowerElectronicsUnitController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsUnitController.PowerElectronicsUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power electronics unit controller for this power electronics unit.
            '''

        })
    '''
    Power electronics unit controller for this power electronics unit.
    '''

    ControlAreaPowerElectronicsUnit: list[ControlAreaPowerElectronicsUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaPowerElectronicsUnit.PowerElectronicsUnit',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            ControlArea specifications for this power electronics unit.
            '''

        })
    '''
    ControlArea specifications for this power electronics unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class BatteryUnit(PowerElectronicsUnit):
    '''
    An electrochemical energy storage device.
    '''

    ratedE: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Full energy storage capacity of the battery. The attribute shall be a positive
            value.
            '''

        })
    '''
    Full energy storage capacity of the battery. The attribute shall be
    a positive value.
    '''

    storedE: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Amount of energy currently stored. The attribute shall be a positive value
            or zero and lower than BatteryUnit.ratedE.
            '''

        })
    '''
    Amount of energy currently stored. The attribute shall be a positive
    value or zero and lower than BatteryUnit.ratedE.
    '''

    batteryState: Optional[BatteryStateKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The current state of the battery (charging, full, etc.).
            '''

        })
    '''
    The current state of the battery (charging, full, etc.).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ChargingUnit(PowerElectronicsUnit):
    '''
    A unit that supplies electrical power for charging electrical non-stationary
    entities, e.g. electrical vehicle, trucks, buses, ferries, boats and airplanes.
    The characteristic is that the energy consumption is highly schedule dependent.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FlexibleEnergyUnit(PowerElectronicsUnit):
    '''
    Flexible consumer or embedded producer of energy. The unit cannot be a
    net producer.
    '''

    buffer: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power, that has the flexibility to operate as production and/or
            consumption. The buffer is bound. Example are heat pump, cooling system,
            embedded batteries including electric vehicle. Load sign convention is
            used, i.e. positive sign means flow out from a node.
            '''

        })
    '''
    The active power, that has the flexibility to operate as production
    and/or consumption. The buffer is bound. Example are heat pump, cooling
    system, embedded batteries including electric vehicle. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    '''

    timeShift: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power, that can be shifted from one pricing interval (market
            time unit) to another. It is expected to be a limited on the length of
            the shift. Example from household could be washing machine or dishwasher.
            Example from industry is the possible to shut down a machine for the relevant
            period. Load sign convention is used, i.e. positive sign means flow out
            from a node.
            '''

        })
    '''
    The active power, that can be shifted from one pricing interval (market
    time unit) to another. It is expected to be a limited on the length
    of the shift. Example from household could be washing machine or dishwasher.
    Example from industry is the possible to shut down a machine for the
    relevant period. Load sign convention is used, i.e. positive sign means
    flow out from a node.
    '''

    unconstrained: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power, that has the flexibility to operate as production without
            any bound by a buffer. Example are alternative heating (wood, gas, diesel
            etc) or power generators. Load sign convention is used, i.e. positive sign
            means flow out from a node.
            '''

        })
    '''
    The active power, that has the flexibility to operate as production
    without any bound by a buffer. Example are alternative heating (wood,
    gas, diesel etc) or power generators. Load sign convention is used,
    i.e. positive sign means flow out from a node.
    '''

    uncontrollable: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power, that forms the base consumption for the unit. This is
            measured and expected consumption. Load sign convention is used, i.e. positive
            sign means flow out from a node.
            '''

        })
    '''
    The active power, that forms the base consumption for the unit. This
    is measured and expected consumption. Load sign convention is used,
    i.e. positive sign means flow out from a node.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PhotoVoltaicUnit(PowerElectronicsUnit):
    '''
    A photovoltaic device or an aggregation of such devices.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerElectricalChemicalUnit(PowerElectronicsUnit):
    '''
    A unit capable of either generating electrical energy from chemical reactions
    or using electrical energy to cause chemical reactions.
    '''

    kind: Optional[PowerElectricalChemicalUnitKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of power electrical chemical unit.
            '''

        })
    '''
    Kind of power electrical chemical unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerElectronicsMarineUnit(PowerElectronicsUnit):
    '''
    A unit that capture energy from marine sources, e.g. waves, for generating
    electrical power.
    '''

    kind: Optional[MarineUnitKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of marine unit.
            '''

        })
    '''
    Kind of marine unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerElectronicsThermalUnit(PowerElectronicsUnit):
    '''
    A thermal unit that is connected via an inverter such as through a back-to-back
    converter
    '''

    FossilFuels: Optional[FossilFuel] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FossilFuel.PowerElectronicsThermalUnit',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://epri.com/gmdm/2025#'
    @property
    def __package__(self):
        return 'ProductionEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PowerElectronicsWindUnit(PowerElectronicsUnit):
    '''
    A wind generating unit that connects to the AC network with power electronics
    rather than rotating machines or an aggregation of such units.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class TransformerTank(Equipment):
    '''
    An assembly of two or more coupled windings that transform electrical power
    between voltage levels. These windings are bound on a common core and placed
    in the same tank. Transformer tank can be used to model both single-phase
    and 3-phase transformers.
    '''

    PowerTransformer: Optional[PowerTransformer] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerTransformer.TransformerTanks',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Bank this transformer belongs to.
            '''

        })
    '''
    Bank this transformer belongs to.
    '''

    TransformerTankInfo: Optional[TransformerTankInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerTankInfo.TransformerTanks',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransformerTankEnds: list[TransformerTankEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerTankEnd.TransformerTank',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All windings of this transformer.
            '''

        })
    '''
    All windings of this transformer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquipmentController(PowerSystemResource):
    '''
    Equipment controller is an automation function that can control one or
    multiple equipment function to achieve all the targets inside the given
    tolerance.
    '''

    RegulatingCondEq: list[RegulatingCondEq] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulatingCondEq.EquipmentController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All regulating conducting equipment that belongs to this equipment controller.
            '''

        })
    '''
    All regulating conducting equipment that belongs to this equipment
    controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACDCConverterController(EquipmentController):
    '''
    ACDC converter unit control. According to IEC 60633, it is the control
    system used for the controlling, monitoring and protection of a single
    converter unit.
    '''

    ACDCConverter: Optional[ACDCConverter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACDCConverter.ACDCConverterController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            ACDC converter controlled by the direct current controller.
            '''

        })
    '''
    ACDC converter controlled by the direct current controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DirectCurrentMasterController(EquipmentController):
    '''
    Direct current system control is a control system which governs the operation
    of an entire DC system consisting of more than one DC substation and performs
    those functions of controlling, monitoring and protection which require
    information from more than one substation. This can also be a multiterminal
    control which is a DC system control for more that two DC substations or
    a DC master control, which is a general concept for control coordination
    of a DC system. The DC master control may be implemented at the bipole
    and/or pole level as defined in IEC 60633.
    The DC system control/multiterminal control/master control is part of the
    hierarchical structure of an HVDC control system that has an integrated
    AC/DC system control as the highest level of control which governs the
    integrated operation of AC and DC systems of a power system. This control
    system is under the responsibility of the system operator.
    '''

    DCTieCorridor: Optional[DCTieCorridor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTieCorridor.DirectCurrentMasterController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DCTieCorridor controlled by this direct current master controller.
            '''

        })
    '''
    DCTieCorridor controlled by this direct current master controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DirectCurrentPoleController(EquipmentController):
    '''
    DC system pole control, which is the control system of a pole in accordance
    with IEC 60633.
    '''

    DCPole: Optional[DCPole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCPole.DirectCurrentPoleController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC pole that is controlled by a DC pole controller.
            '''

        })
    '''
    DC pole that is controlled by a DC pole controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DirectCurrentSubstationBipoleController(EquipmentController):
    '''
    Control system of a substation bipole (IEC 60633).
    '''

    DCSubstationBipole: Optional[DCSubstationBipole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCSubstationBipole.DirectCurrentSubstationBipoleController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC substation bipole that is controlled by a DC substation bipole controller.
            '''

        })
    '''
    DC substation bipole that is controlled by a DC substation bipole controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DirectCurrentSubstationPoleController(EquipmentController):
    '''
    Control system of a substation pole (IEC 60633).
    '''

    DCSubstationPole: Optional[DCSubstationPole] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCSubstationPole.DirectCurrentSubstationPoleController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            DC substation pole that is controlled by a DC substation pole controller.
            '''

        })
    '''
    DC substation pole that is controlled by a DC substation pole controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerElectronicsUnitController(EquipmentController):
    '''
    Power electronics unit controller is controlling the equipment to optimize
    the power electronics unit.
    '''

    PowerElectronicsUnit: list[PowerElectronicsUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerElectronicsUnit.PowerElectronicsUnitController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Power electronics unit that has this power electronics unit controller.
            '''

        })
    '''
    Power electronics unit that has this power electronics unit controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SSSCController(EquipmentController):
    '''
    The controller of a Static synchronous series compensator (SSSC).
    '''

    maxInjectionU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage that the device can inject.
            '''

        })
    '''
    Maximum voltage that the device can inject.
    '''

    maxLimitI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum operating current limit applied for the controller and used by
            any of the available control functions.
            '''

        })
    '''
    Maximum operating current limit applied for the controller and used
    by any of the available control functions.
    '''

    minInjectionU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage that the device can inject.
            '''

        })
    '''
    Minimum voltage that the device can inject.
    '''

    minLimitI: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum operating current limit applied for the controller and used by
            any of the available control functions.
            '''

        })
    '''
    Minimum operating current limit applied for the controller and used
    by any of the available control functions.
    '''

    mode: Optional[SSSCControlModeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Mode of the Static Synchronous Series compensator controller.
            '''

        })
    '''
    Mode of the Static Synchronous Series compensator controller.
    '''

    CurrentDroopOverride: Optional[CurrentDroopOverride] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CurrentDroopOverride.SSSCController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The current droop override for this SSSC controller. It is not used when
            the SSSC controller is in mode currentDroop.
            '''

        })
    '''
    The current droop override for this SSSC controller. It is not used
    when the SSSC controller is in mode currentDroop.
    '''

    SSSCSimulationSettings: Optional[SSSCSimulationSettings] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SSSCSimulationSettings.SSSCController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The simulation setings that apply for this controller.
            '''

        })
    '''
    The simulation setings that apply for this controller.
    '''

    CurrentDroopOverride: Optional[CurrentDroopOverride] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CurrentDroopOverride.SSSCController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The current droop override for this SSSC controller. It is not used when
            the SSSC controller is in mode currentDroop.
            '''

        })
    '''
    The current droop override for this SSSC controller. It is not used
    when the SSSC controller is in mode currentDroop.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerController(EquipmentController):
    '''
    Tap changer controller is an equipment controller that controls a tap changer,
    e.g. how the voltage at the end of a line varies with the load level and
    compensation of the voltage drop by tap adjustment.
    '''

    TapChanger: list[TapChanger] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TapChanger.TapChangeController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All tap changers controlled by this controller.
            '''

        })
    '''
    All tap changers controlled by this controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Flowgate(PowerSystemResource):
    '''
    A flowgate, is single or group of transmission elements intended to model
    MW flow impact relating to transmission limitations and transmission service
    usage.
    '''

    MktTerminal: list[MktTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktTerminal.Flowgate',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FuelStorage(PowerSystemResource):
    '''
    Fuel storage. e.g. pile of coal that can be shared between multiple thermal
    generating units.
    '''

    energyStorage: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Amount of energy available in the storage.
            '''

        })
    '''
    Amount of energy available in the storage.
    '''

    FossilFuel: list[FossilFuel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FossilFuel.FuelStorage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Fossil fuel stored in a fuel storage.
            '''

        })
    '''
    Fossil fuel stored in a fuel storage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HostControlArea(PowerSystemResource):
    '''
    A HostControlArea has a set of tie points and a set of generator controls
    (i.e., AGC). It also has a total load, including transmission and distribution
    losses.
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.HostControlArea',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class HydroPowerPlant(PowerSystemResource):
    '''
    A hydro power station which can generate or pump. When generating, the
    generator turbines receive water from an upper reservoir. When pumping,
    the pumps receive their water from a lower reservoir.
    '''

    penstockType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type and configuration of hydro plant penstock(s).
            '''

        })
    '''
    Type and configuration of hydro plant penstock(s).
    '''

    surgeTankCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A code describing the type (or absence) of surge tank that is associated
            with the hydro power plant.
            '''

        })
    '''
    A code describing the type (or absence) of surge tank that is associated
    with the hydro power plant.
    '''

    dischargeTravelDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Water travel delay from tailbay to next downstream hydro power station.
            '''

        })
    '''
    Water travel delay from tailbay to next downstream hydro power station.
    '''

    genRatedP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro plant's generating rating active power for rated head conditions.
            The attribute shall be a positive value.
            '''

        })
    '''
    The hydro plant's generating rating active power for rated head conditions.
    The attribute shall be a positive value.
    '''

    plantDischargeCapacity: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total plant discharge capacity.
            '''

        })
    '''
    Total plant discharge capacity.
    '''

    plantRatedHead: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The plant's rated gross head.
            The attribute shall be a positive value.
            '''

        })
    '''
    The plant's rated gross head.
    The attribute shall be a positive value.
    '''

    pumpRatedP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The hydro plant's pumping rating active power for rated head conditions.
            The attribute shall be a positive value.
            '''

        })
    '''
    The hydro plant's pumping rating active power for rated head conditions.
    The attribute shall be a positive value.
    '''

    surgeTankCrestLevel: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The level at which the surge tank spills.
            '''

        })
    '''
    The level at which the surge tank spills.
    '''

    hydroPlantStorageType: Optional[HydroPlantStorageKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of hydro power plant water storage.
            '''

        })
    '''
    The type of hydro power plant water storage.
    '''

    GenSourcePumpDischargeReservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.UpstreamFromHydroPowerPlants',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generators are supplied water from or pumps discharge water to an upstream
            reservoir.
            '''

        })
    '''
    Generators are supplied water from or pumps discharge water to an upstream
    reservoir.
    '''

    Reservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.HydroPowerPlants',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Generators discharge water to or pumps are supplied water from a downstream
            reservoir.
            '''

        })
    '''
    Generators discharge water to or pumps are supplied water from a downstream
    reservoir.
    '''

    HydroGeneratingUnits: list[HydroGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HydroGeneratingUnit.HydroPowerPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The hydro generating unit belongs to a hydro power plant.
            '''

        })
    '''
    The hydro generating unit belongs to a hydro power plant.
    '''

    HydroPumps: list[HydroPump] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HydroPump.HydroPowerPlant',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The hydro pump may be a member of a pumped storage plant or a pump for
            distributing water.
            '''

        })
    '''
    The hydro pump may be a member of a pumped storage plant or a pump
    for distributing water.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class PowerCutZone(PowerSystemResource):
    '''
    An area or zone of the power system which is used for load shedding purposes.
    '''

    cutLevel1: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            First level (amount) of load to cut as a percentage of total zone load.
            '''

        })
    '''
    First level (amount) of load to cut as a percentage of total zone load.
    '''

    cutLevel2: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Second level (amount) of load to cut as a percentage of total zone load.
            '''

        })
    '''
    Second level (amount) of load to cut as a percentage of total zone
    load.
    '''

    EnergyConsumers: list[EnergyConsumer] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyConsumer.PowerCutZone',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Energy consumer is assigned to the power cut zone.
            '''

        })
    '''
    Energy consumer is assigned to the power cut zone.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PowerElectronicsConnectionPhase(PowerSystemResource):
    '''
    A single phase of a power electronics connection.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power injection. Load sign convention is used, i.e. positive sign
            means flow into the equipment from the network.
            '''

        })
    '''
    Active power injection. Load sign convention is used, i.e. positive
    sign means flow into the equipment from the network.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power injection. Load sign convention is used, i.e. positive sign
            means flow into the equipment from the network.
            '''

        })
    '''
    Reactive power injection. Load sign convention is used, i.e. positive
    sign means flow into the equipment from the network.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this energy producer component. If the energy producer is wye
            connected, the connection is from the indicated phase to the central ground
            or neutral point. If the energy producer is delta connected, the phase
            indicates an energy producer connected from the indicated phase to the
            next logical non-neutral phase.
            '''

        })
    '''
    Phase of this energy producer component. If the energy producer is
    wye connected, the connection is from the indicated phase to the central
    ground or neutral point. If the energy producer is delta connected,
    the phase indicates an energy producer connected from the indicated
    phase to the next logical non-neutral phase.
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.PowerElectronicsConnectionPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Power electronics connection of this power electronics connection phase.
            '''

        })
    '''
    Power electronics connection of this power electronics connection phase.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerFrequencyController(PowerSystemResource):
    '''
    Power frequency controller is controlling the active power balance as typically
    done by the secondary control. If an unbalance between the scheduled active
    power values of each generation unit and the loads plus losses occurs,
    primary control will adapt (increase/decrease) the active power production
    of each unit (depending on the power shift key strategy), leading to an
    over- or under-frequency situation. The secondary frequency controller
    will then control the frequency back to its nominal value, re- establishing
    a cost-efficient generation delivered by each unit.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.PowerFrequencyController',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Control area which has a power frequency controller.
            '''

        })
    '''
    Control area which has a power frequency controller.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Control'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredResource(PowerSystemResource):
    '''
    A resource that is registered through the market participant registration
    system. Examples include generating unit, load, and non-physical generator
    or load.
    '''

    commercialOpDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resource Commercial Operation Date.
            '''

        })
    '''
    Resource Commercial Operation Date.
    '''

    dispatchable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Dispatchable: indicates whether the resource is dispatchable. This implies
            that the resource intends to submit Energy bids/offers or Ancillary Services
            bids/offers, or self-provided schedules.
            '''

        })
    '''
    Dispatchable: indicates whether the resource is dispatchable. This
    implies that the resource intends to submit Energy bids/offers or Ancillary
    Services bids/offers, or self-provided schedules.
    '''

    lastModified: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication of the last time this item was modified/versioned.
            '''

        })
    '''
    Indication of the last time this item was modified/versioned.
    '''

    maxBaseSelfSchedQty: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum base self schedule quantity.
            '''

        })
    '''
    Maximum base self schedule quantity.
    '''

    maxOnTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum on time after start up.
            '''

        })
    '''
    Maximum on time after start up.
    '''

    minOffTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum off time after shut down.
            '''

        })
    '''
    Minimum off time after shut down.
    '''

    minOnTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum on time after start up.
            '''

        })
    '''
    Minimum on time after start up.
    '''

    minDispatchTime: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum number of consecutive hours a resource shall be dispatched if bid
            is accepted.
            '''

        })
    '''
    Minimum number of consecutive hours a resource shall be dispatched
    if bid is accepted.
    '''

    ACAFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that this resource is associated with an Adjacent Control Area.
            '''

        })
    '''
    Indication that this resource is associated with an Adjacent Control
    Area.
    '''

    ASSPOptimizationFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that the resource participates in the optimization process by
            default.
            '''

        })
    '''
    Indication that the resource participates in the optimization process
    by default.
    '''

    contingencyAvailFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Contingent operating reserve availiability (Yes/No). Resource is availiable
            to participate with capacity in contingency dispatch.
            '''

        })
    '''
    Contingent operating reserve availiability (Yes/No). Resource is availiable
    to participate with capacity in contingency dispatch.
    '''

    ECAFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that this resource is associated with an Embedded Control area.
            '''

        })
    '''
    Indication that this resource is associated with an Embedded Control
    area.
    '''

    flexibleOfferFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flexible offer flag (Y/N).
            '''

        })
    '''
    Flexible offer flag (Y/N).
    '''

    hourlyPredispatch: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indicates need to dispatch before the start of the operating hour. Only
            relevant in Real-Time Market. Applies to generation, intertie and participating
            load resource. Value (Y/N).
            '''

        })
    '''
    Indicates need to dispatch before the start of the operating hour.
    Only relevant in Real-Time Market. Applies to generation, intertie
    and participating load resource. Value (Y/N).
    '''

    isAggregatedRes: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A flag to indicate if a resource is an aggregated resource.
            '''

        })
    '''
    A flag to indicate if a resource is an aggregated resource.
    '''

    LMPMFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            LMPM flag: indicates whether the resource is subject to the LMPM test (Yes/No).
            '''

        })
    '''
    LMPM flag: indicates whether the resource is subject to the LMPM test
    (Yes/No).
    '''

    marketParticipationFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Market Participation flag: indicates whether the resource participate in
            the market.
            '''

        })
    '''
    Market Participation flag: indicates whether the resource participate
    in the market.
    '''

    mustOfferFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Must offer flag: indicates whether the unit is subject to the must offer
            provisions (Y/N).
            '''

        })
    '''
    Must offer flag: indicates whether the unit is subject to the must
    offer provisions (Y/N).
    '''

    nonMarket: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate that the Resource is not participating in the Market Operations.
            '''

        })
    '''
    Flag to indicate that the Resource is not participating in the Market
    Operations.
    '''

    pointOfDeliveryFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that the registered resource is a Point of Delivery (YES) resource
            which implies there is a POD Loss Factor.
            '''

        })
    '''
    Indication that the registered resource is a Point of Delivery (YES)
    resource which implies there is a POD Loss Factor.
    '''

    priceSetFlagDA: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Price setting flag: indicates whether a resource is capable of setting
            the Market Clearing Price (Y) for the DA market, and if not, indicates
            whether the resource shall submit bids for energy at $ 0 (S) or not (N).
            Initially in the RegisteredGenerator class. It was moved to the RegisteredResource
            class for the participating load dispatch purpose.
            '''

        })
    '''
    Price setting flag: indicates whether a resource is capable of setting
    the Market Clearing Price (Y) for the DA market, and if not, indicates
    whether the resource shall submit bids for energy at $ 0 (S) or not
    (N).
    Initially in the RegisteredGenerator class. It was moved to the RegisteredResource
    class for the participating load dispatch purpose.
    '''

    priceSetFlagRT: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Price setting flag: indicates whether a resource is capable of setting
            the Market Clearing Price (Y) for the RT market, and if not, indicates
            whether the resource shall submit bids for energy at $ 0 (S) or not (N).
            Initially in the RegisteredGenerator class. It was moved to the RegisteredResource
            class for the participating load dispatch purpose.
            '''

        })
    '''
    Price setting flag: indicates whether a resource is capable of setting
    the Market Clearing Price (Y) for the RT market, and if not, indicates
    whether the resource shall submit bids for energy at $ 0 (S) or not
    (N).
    Initially in the RegisteredGenerator class. It was moved to the RegisteredResource
    class for the participating load dispatch purpose.
    '''

    registrationStatus: Optional[ResourceRegistrationStatus] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Current state of the resource registration which describes the lifecycle
            from initial design through to eventual decommissioning.
            '''

        })
    '''
    Current state of the resource registration which describes the lifecycle
    from initial design through to eventual decommissioning.
    '''

    resourceAdequacyFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Indication that this resource participates in the resource adequacy function.
            '''

        })
    '''
    Indication that this resource participates in the resource adequacy
    function.
    '''

    SMPMFlag: Optional[YesNo] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            SMPM flag: indicates whether the resource is subject to the SMPM test (Yes/No).
            '''

        })
    '''
    SMPM flag: indicates whether the resource is subject to the SMPM test
    (Yes/No).
    '''

    AdjacentCASet: Optional[AdjacentCASet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AdjacentCASet.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An AggregateNode may be associated with up to many RegisteredResources.
            '''

        })
    '''
    An AggregateNode may be associated with up to many RegisteredResources.
    '''

    ConnectivityNode: Optional[ConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNode.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultBid: Optional[DefaultBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBid.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketParticipant: Optional[MarketParticipant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketParticipant.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.RegisteredResources',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A registered resource injects power at one or more connectivity nodes related
            to a pnode
            '''

        })
    '''
    A registered resource injects power at one or more connectivity nodes
    related to a pnode
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.RegisteredResource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class RegulatingControl(PowerSystemResource):
    '''
    Specifies a set of equipment that works together to control a power system
    quantity such as voltage or flow.
    Remote bus voltage control is possible by specifying the controlled terminal
    located at some place remote from the controlling equipment.
    The specified terminal shall be associated with the connectivity node of
    the controlled point. The most specific subtype of RegulatingControl shall
    be used in case such equipment participate in the control, e.g. TapChangerControl
    for tap changers.
    For flow control, load sign convention is used, i.e. positive sign means
    flow out from a TopologicalNode (bus) into the conducting equipment.
    The attribute minAllowedTargetValue and maxAllowedTargetValue are required
    in the following cases:
    - For a power generating module operated in power factor control mode to
    specify maximum and minimum power factor values;
    - Whenever it is necessary to have an off center target voltage for the
    tap changer regulator. For instance, due to long cables to off shore wind
    farms and the need to have a simpler setup at the off shore transformer
    platform, the voltage is controlled from the land at the connection point
    for the off shore wind farm. Since there usually is a voltage rise along
    the cable, there is typical and overvoltage of up 3 to 4 kV compared to
    the on shore station. Thus in normal operation the tap changer on the on
    shore station is operated with a target set point, which is in the lower
    parts of the dead band.
    The attributes minAllowedTargetValue and maxAllowedTargetValue are not
    related to the attribute targetDeadband and thus they are not treated as
    an alternative of the targetDeadband. They are needed due to limitations
    in the local substation controller. The attribute targetDeadband is used
    to prevent the power flow from moving the tap position in circles (hunting)
    that is to be used regardless of the attributes minAllowedTargetValue and
    maxAllowedTargetValue.
    '''

    discrete: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, indicates that regulation is performed in the simulation in a
            discrete mode. If false, indicates that non-discrete regulation is used
            in the simulation. This applies to equipment with discrete controls, e.g.
            tap changers and shunt compensators.
            '''

        })
    '''
    If true, indicates that regulation is performed in the simulation in
    a discrete mode. If false, indicates that non-discrete regulation is
    used in the simulation. This applies to equipment with discrete controls,
    e.g. tap changers and shunt compensators.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The flag tells if regulation is enabled.
            '''

        })
    '''
    The flag tells if regulation is enabled.
    '''

    maxAllowedTargetValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed target value. See also RegulatingControl description.
            '''

        })
    '''
    Maximum allowed target value. See also RegulatingControl description.
    '''

    minAllowedTargetValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum allowed target value. See also RegulatingControl description.
            '''

        })
    '''
    Minimum allowed target value. See also RegulatingControl description.
    '''

    targetDeadband: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This is the deadband set on the controller. It is used with discrete control
            to avoid excessive tap changes in tap changers and state changes in shunt
            compensator banks while regulating. The units in which deadband is expressed
            are based on RegulatingControl.mode. The attribute shall be a positive
            value or zero. If RegulatingControl.discrete is set to "false", the RegulatingControl.targetDeadband
            is to be ignored in simulations. If TapChanger.ctRatio or TapChanger.ptRatio
            are populated, deadband shall be expressed in secondary units.
            Note that for instance, if the targetValue is 100 kV and the targetDeadband
            is 2 kV the range is from 99 to 101 kV.
            '''

        })
    '''
    This is the deadband set on the controller. It is used with discrete
    control to avoid excessive tap changes in tap changers and state changes
    in shunt compensator banks while regulating. The units in which deadband
    is expressed are based on RegulatingControl.mode. The attribute shall
    be a positive value or zero. If RegulatingControl.discrete is set to
    "false", the RegulatingControl.targetDeadband is to be ignored in simulations.
    If TapChanger.ctRatio or TapChanger.ptRatio are populated, deadband
    shall be expressed in secondary units.
    Note that for instance, if the targetValue is 100 kV and the targetDeadband
    is 2 kV the range is from 99 to 101 kV.
    '''

    targetValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The target value set on the controller. It is the starting value for a
            steady state solution. This value can be used for the target value without
            the use of schedules. The value has the units appropriate to the mode attribute.
            If used for a TapChangerControl and if TapChanger.ctRatio or TapChanger.ptRatio
            are populated, the target value shall be expressed in secondary units.
            As an example, with PT ratio of 60 on a 12.47 KV distribution system, a
            phase to ground PT has a ratio of 7200 volts primary to 120 volts secondary.
            If the required primary target is 7128 volts for a single phase tap changer
            then the value of targetValue would equal 118.8 volts secondary (7128/60).
            '''

        })
    '''
    The target value set on the controller. It is the starting value for
    a steady state solution. This value can be used for the target value
    without the use of schedules. The value has the units appropriate to
    the mode attribute.
    If used for a TapChangerControl and if TapChanger.ctRatio or TapChanger.ptRatio
    are populated, the target value shall be expressed in secondary units.
    As an example, with PT ratio of 60 on a 12.47 KV distribution system,
    a phase to ground PT has a ratio of 7200 volts primary to 120 volts
    secondary. If the required primary target is 7128 volts for a single
    phase tap changer then the value of targetValue would equal 118.8 volts
    secondary (7128/60).
    '''

    mode: Optional[RegulatingControlModeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The regulating control mode presently available. This specification allows
            for determining the kind of regulation without need for obtaining the units
            from a schedule.
            '''

        })
    '''
    The regulating control mode presently available. This specification
    allows for determining the kind of regulation without need for obtaining
    the units from a schedule.
    '''

    monitoredPhase: Optional[PhaseCode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase voltage controlling this regulator, measured at regulator location.
            '''

        })
    '''
    Phase voltage controlling this regulator, measured at regulator location.
    '''

    targetValueUnitMultiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the multiplier used for the targetValue, targetDeadband, .maxAllowedTargetValue,
            .minAllowedTargetValue as well as TapChangerControl.maxLimitVoltage and
            TapChangerControl.minLimitVoltage.
            '''

        })
    '''
    Specifies the multiplier used for the targetValue, targetDeadband,
    .maxAllowedTargetValue, .minAllowedTargetValue as well as TapChangerControl.maxLimitVoltage
    and TapChangerControl.minLimitVoltage.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.RegulatingControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal associated with this regulating control. The terminal is associated
            instead of a node, since the terminal could connect into either a topological
            node or a connectivity node. Sometimes it is useful to model regulation
            at a terminal of a bus bar object.
            '''

        })
    '''
    The terminal associated with this regulating control. The terminal
    is associated instead of a node, since the terminal could connect into
    either a topological node or a connectivity node. Sometimes it is useful
    to model regulation at a terminal of a bus bar object.
    '''

    RegulatingCondEq: list[RegulatingCondEq] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulatingCondEq.RegulatingControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The equipment that participates in this regulating control scheme.
            '''

        })
    '''
    The equipment that participates in this regulating control scheme.
    '''

    RegulationSchedule: list[RegulationSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulationSchedule.RegulatingControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Schedule for this regulating control.
            '''

        })
    '''
    Schedule for this regulating control.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ShuntCompensatorControl(RegulatingControl):
    '''
    Distribution capacitor bank control settings.
    '''

    ShuntCompensatorInfo: Optional[ShuntCompensatorInfo] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorInfo.ShuntCompensatorControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfWiresExt'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerControl(RegulatingControl):
    '''
    Describes behaviour specific to tap changers, e.g. how the voltage at the
    end of a line varies with the load level and compensation of the voltage
    drop by tap adjustment. When TapChanger.ctRatio and .ptRatio are present,
    RegulatingControl.targetVoltage RegulatingControl.targetDeadband, RegulatingControl.maxAllowedTargetValue,
    RegulatingControl.minAllowedTargetValue as well as TapChangerControl.maxLimitVoltage
    and TapChangerControl.minLimitVoltage shall be expressed in terms of secondary
    CT currents and PT voltages.
    '''

    lineDropCompensation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If true, the line drop compensation is to be applied.
            '''

        })
    '''
    If true, the line drop compensation is to be applied.
    '''

    reverseToNeutral: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    reversible: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    lineDropR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator resistance setting for normal (forward) power flow.
            '''

        })
    '''
    Line drop compensator resistance setting for normal (forward) power
    flow.
    '''

    lineDropX: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator reactance setting for normal (forward) power flow.
            '''

        })
    '''
    Line drop compensator reactance setting for normal (forward) power
    flow.
    '''

    maxLimitVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed regulated voltage on the PT secondary. This is the locally
            measured secondary voltage, including the effect of any line drop compensation.
            Typically used for distribution circuit voltage regulator. Sometimes referred
            to as first-house protection. If utilized, then TapChanger.ptRatio must
            be supplied.
            '''

        })
    '''
    Maximum allowed regulated voltage on the PT secondary. This is the
    locally measured secondary voltage, including the effect of any line
    drop compensation. Typically used for distribution circuit voltage
    regulator. Sometimes referred to as first-house protection. If utilized,
    then TapChanger.ptRatio must be supplied.
    '''

    minLimitVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum allowed regulated voltage on the PT secondary. This is the locally
            measured secondary voltage, including the effect of any line drop compensation.
            Typically used for distribution circuit voltage regulator. Sometimes referred
            to as last-house protection. If utilized, then TapChanger.ptRatio must
            be supplied.
            '''

        })
    '''
    Minimum allowed regulated voltage on the PT secondary. This is the
    locally measured secondary voltage, including the effect of any line
    drop compensation. Typically used for distribution circuit voltage
    regulator. Sometimes referred to as last-house protection. If utilized,
    then TapChanger.ptRatio must be supplied.
    '''

    reverseLineDropR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator resistance setting for reverse power flow.
            '''

        })
    '''
    Line drop compensator resistance setting for reverse power flow.
    '''

    reverseLineDropX: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator reactance setting for reverse power flow.
            '''

        })
    '''
    Line drop compensator reactance setting for reverse power flow.
    '''

    reverseTargetDeadband: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    reverseTargetValue: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    reversingDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    reversingPowerThreshold: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TapChanger: list[TapChanger] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TapChanger.TapChangerControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The tap changers that participates in this regulating tap control scheme.
            '''

        })
    '''
    The tap changers that participates in this regulating tap control scheme.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class Reservoir(PowerSystemResource):
    '''
    A water storage facility within a hydro system, including: ponds, lakes,
    lagoons, and rivers. The storage is usually behind some type of dam.
    '''

    energyStorageRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reservoir's energy storage rating in energy for given head conditions.
            '''

        })
    '''
    The reservoir's energy storage rating in energy for given head conditions.
    '''

    riverOutletWorks: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            River outlet works for riparian right releases or other purposes.
            '''

        })
    '''
    River outlet works for riparian right releases or other purposes.
    '''

    spillwayCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The flow capacity of the spillway in cubic meters per second.
            '''

        })
    '''
    The flow capacity of the spillway in cubic meters per second.
    '''

    spillWayGateType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of spillway gate, including parameters.
            '''

        })
    '''
    Type of spillway gate, including parameters.
    '''

    activeStorageCapacity: Optional[ float | Volume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Storage volume between the full supply level and the normal minimum operating
            level.
            '''

        })
    '''
    Storage volume between the full supply level and the normal minimum
    operating level.
    '''

    energyStorage: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'NC Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://entsoe.eu/ns/nc#',
        'serialize': True,
        'docstring':
            '''
            Amount of energy available in the storage.
            '''

        })
    '''
    Amount of energy available in the storage.
    '''

    fullSupplyLevel: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Full supply level, above which water will spill. This can be the spillway
            crest level or the top of closed gates.
            '''

        })
    '''
    Full supply level, above which water will spill. This can be the spillway
    crest level or the top of closed gates.
    '''

    grossCapacity: Optional[ float | Volume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total capacity of reservoir.
            '''

        })
    '''
    Total capacity of reservoir.
    '''

    normalMinOperateLevel: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal minimum operating level below which the penstocks will draw air.
            '''

        })
    '''
    Normal minimum operating level below which the penstocks will draw
    air.
    '''

    spillTravelDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The spillway water travel delay to the next downstream reservoir.
            '''

        })
    '''
    The spillway water travel delay to the next downstream reservoir.
    '''

    spillwayCrestLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The length of the spillway crest.
            '''

        })
    '''
    The length of the spillway crest.
    '''

    spillwayCrestLevel: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Spillway crest level above which water will spill.
            '''

        })
    '''
    Spillway crest level above which water will spill.
    '''

    SpillsFromReservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Reservoir.SpillsIntoReservoirs',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reservoir may spill into a downstream reservoir.
            '''

        })
    '''
    A reservoir may spill into a downstream reservoir.
    '''

    TargetLevelSchedule: Optional[TargetLevelSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TargetLevelSchedule.Reservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A reservoir may have a water level target schedule.
            '''

        })
    '''
    A reservoir may have a water level target schedule.
    '''

    UpstreamFromHydroPowerPlants: list[HydroPowerPlant] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HydroPowerPlant.GenSourcePumpDischargeReservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Generators are supplied water from or pumps discharge water to an upstream
            reservoir.
            '''

        })
    '''
    Generators are supplied water from or pumps discharge water to an upstream
    reservoir.
    '''

    HydroPowerPlants: list[HydroPowerPlant] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HydroPowerPlant.Reservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Generators discharge water to or pumps are supplied water from a downstream
            reservoir.
            '''

        })
    '''
    Generators discharge water to or pumps are supplied water from a downstream
    reservoir.
    '''

    InflowForecasts: list[InflowForecast] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InflowForecast.Reservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A reservoir may have a "natural" inflow forecast.
            '''

        })
    '''
    A reservoir may have a "natural" inflow forecast.
    '''

    LevelVsVolumeCurves: list[LevelVsVolumeCurve] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LevelVsVolumeCurve.Reservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A reservoir may have a level versus volume relationship.
            '''

        })
    '''
    A reservoir may have a level versus volume relationship.
    '''

    SpillsIntoReservoirs: list[Reservoir] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Reservoir.SpillsFromReservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A reservoir may spill into a downstream reservoir.
            '''

        })
    '''
    A reservoir may spill into a downstream reservoir.
    '''

    TargetLevelSchedule: Optional[TargetLevelSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TargetLevelSchedule.Reservoir',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A reservoir may have a water level target schedule.
            '''

        })
    '''
    A reservoir may have a water level target schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorPhase(PowerSystemResource):
    '''
    Single phase of a multi-phase shunt compensator when its attributes might
    be different per phase.
    '''

    maximumSections: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum number of sections that may be switched in for this phase.
            '''

        })
    '''
    The maximum number of sections that may be switched in for this phase.
    '''

    normalSections: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For the capacitor phase, the normal number of sections switched in. The
            value shall be between zero and ShuntCompensatorPhase.maximumSections.
            '''

        })
    '''
    For the capacitor phase, the normal number of sections switched in.
    The value shall be between zero and ShuntCompensatorPhase.maximumSections.
    '''

    sections: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shunt compensator sections in use. Starting value for steady state solution.
            The attribute shall be a positive value or zero. Non integer values are
            allowed to support continuous variables. The reasons for continuous value
            are to support study cases where no discrete shunt compensators has yet
            been designed, a solutions where a narrow voltage band force the sections
            to oscillate or accommodate for a continuous solution as input.
            For LinearShuntConpensator the value shall be between zero and ShuntCompensatorPhase.maximumSections.
            At value zero the shunt compensator conductance and admittance is zero.
            Linear interpolation of conductance and admittance between the previous
            and next integer section is applied in case of non-integer values.
            For NonlinearShuntCompensator-s shall only be set to one of the NonlinearShuntCompenstorPhasePoint.sectionNumber.
            There is no interpolation between NonlinearShuntCompenstorPhasePoint-s.
            '''

        })
    '''
    Shunt compensator sections in use. Starting value for steady state
    solution. The attribute shall be a positive value or zero. Non integer
    values are allowed to support continuous variables. The reasons for
    continuous value are to support study cases where no discrete shunt
    compensators has yet been designed, a solutions where a narrow voltage
    band force the sections to oscillate or accommodate for a continuous
    solution as input.
    For LinearShuntConpensator the value shall be between zero and ShuntCompensatorPhase.maximumSections.
    At value zero the shunt compensator conductance and admittance is zero.
    Linear interpolation of conductance and admittance between the previous
    and next integer section is applied in case of non-integer values.
    For NonlinearShuntCompensator-s shall only be set to one of the NonlinearShuntCompenstorPhasePoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompenstorPhasePoint-s.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this shunt compensator component. If the shunt compensator is
            wye connected, the connection is from the indicated phase to the central
            ground or neutral point. If the shunt compensator is delta connected, the
            phase indicates a shunt compensator connected from the indicated phase
            to the next logical non-neutral phase.
            '''

        })
    '''
    Phase of this shunt compensator component. If the shunt compensator
    is wye connected, the connection is from the indicated phase to the
    central ground or neutral point. If the shunt compensator is delta
    connected, the phase indicates a shunt compensator connected from the
    indicated phase to the next logical non-neutral phase.
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shunt compensator of this shunt compensator phase.
            '''

        })
    '''
    Shunt compensator of this shunt compensator phase.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class LinearShuntCompensatorPhase(ShuntCompensatorPhase):
    '''
    A per phase linear shunt compensator has banks or sections with equal admittance
    values.
    '''

    bPerSection: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Susceptance per section of the phase if shunt compensator is wye connected.
            Susceptance per section phase to phase if shunt compensator is delta connected.
            '''

        })
    '''
    Susceptance per section of the phase if shunt compensator is wye connected.
    Susceptance per section phase to phase if shunt compensator is delta
    connected.
    '''

    gPerSection: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductance per section for this phase if shunt compensator is wye connected.
            Conductance per section phase to phase if shunt compensator is delta connected.
            '''

        })
    '''
    Conductance per section for this phase if shunt compensator is wye
    connected. Conductance per section phase to phase if shunt compensator
    is delta connected.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class NonlinearShuntCompensatorPhase(ShuntCompensatorPhase):
    '''
    A per phase non linear shunt compensator has bank or section admittance
    values that differ. The attributes gTotal and bTotal of the associated
    NonlinearShuntCompensatorPhasePoint describe the total conductance and
    admittance of a NonlinearShuntCompensatorPhasePoint at a section number
    specified by NonlinearShuntCompensatorPhasePoint.sectionNumber.
    '''

    NonlinearShuntCompensatorPhasePoints: list[NonlinearShuntCompensatorPhasePoint] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NonlinearShuntCompensatorPhasePoint.NonlinearShuntCompensatorPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All points of the non-linear shunt compensator phase.
            '''

        })
    '''
    All points of the non-linear shunt compensator phase.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.European)
@dataclass(repr=False)
class SolarPowerPlant(PowerSystemResource):
    '''
    Solar power plant.
    '''

    SolarGeneratingUnits: list[SolarGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SolarGeneratingUnit.SolarPowerPlant',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': False,
        'docstring':
            '''
            A solar generating unit or units may be a member of a solar power plant.
            '''

        })
    '''
    A solar generating unit or units may be a member of a solar power plant.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100-European#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class SwitchPhase(PowerSystemResource):
    '''
    Single phase of a multi-phase switch when its attributes might be different
    per phase.
    '''

    closed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute tells if the switch is considered closed when used as input
            to topology processing.
            '''

        })
    '''
    The attribute tells if the switch is considered closed when used as
    input to topology processing.
    '''

    normalOpen: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Used in cases when no Measurement for the status value is present. If the
            SwitchPhase has a status measurement the Discrete.normalValue is expected
            to match with this value.
            '''

        })
    '''
    Used in cases when no Measurement for the status value is present.
    If the SwitchPhase has a status measurement the Discrete.normalValue
    is expected to match with this value.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum continuous current carrying capacity in amps governed by the
            device material and construction.
            The attribute shall be a positive value.
            '''

        })
    '''
    The maximum continuous current carrying capacity in amps governed by
    the device material and construction.
    The attribute shall be a positive value.
    '''

    phaseSide1: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this SwitchPhase on the side with terminal sequence number equal
            to 1. Should be a phase contained in that terminal's phases attribute.
            '''

        })
    '''
    Phase of this SwitchPhase on the side with terminal sequence number
    equal to 1. Should be a phase contained in that terminal's phases attribute.
    '''

    phaseSide2: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase of this SwitchPhase on the side with terminal sequence number equal
            to 2. Should be a phase contained in that terminal's Terminal.phases attribute.
            '''

        })
    '''
    Phase of this SwitchPhase on the side with terminal sequence number
    equal to 2. Should be a phase contained in that terminal's Terminal.phases
    attribute.
    '''

    Switch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchPhase',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The switch of the switch phase.
            '''

        })
    '''
    The switch of the switch phase.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChanger(PowerSystemResource):
    '''
    Mechanism for changing transformer winding tap positions.
    '''

    controlEnabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the regulation status of the equipment. True is regulating, false
            is not regulating.
            '''

        })
    '''
    Specifies the regulation status of the equipment. True is regulating,
    false is not regulating.
    '''

    ctRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ctRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Built-in current transformer ratio. If a value is specified, then RegulatingControl.targetValue
            (and RegulatingControl.targetDeadband, RegulatingControl.maxAllowedTargetValue
            and RegulatingControl.minAllowedTargetValue) are expressed in secondary
            units.
            '''

        })
    '''
    Built-in current transformer ratio. If a value is specified, then RegulatingControl.targetValue
    (and RegulatingControl.targetDeadband, RegulatingControl.maxAllowedTargetValue
    and RegulatingControl.minAllowedTargetValue) are expressed in secondary
    units.
    '''

    highStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Highest possible tap step position, advance from neutral.
            The attribute shall be greater than lowStep.
            '''

        })
    '''
    Highest possible tap step position, advance from neutral.
    The attribute shall be greater than lowStep.
    '''

    lowStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Lowest possible tap step position, retard from neutral.
            '''

        })
    '''
    Lowest possible tap step position, retard from neutral.
    '''

    ltcFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies whether or not a TapChanger has load tap changing capabilities.
            '''

        })
    '''
    Specifies whether or not a TapChanger has load tap changing capabilities.
    '''

    neutralStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The neutral tap step position for this winding.
            The attribute shall be equal to or greater than lowStep and equal or less
            than highStep.
            It is the step position where the voltage is neutralU when the other terminals
            of the transformer are at the ratedU. If there are other tap changers on
            the transformer those taps are kept constant at their neutralStep.
            '''

        })
    '''
    The neutral tap step position for this winding.
    The attribute shall be equal to or greater than lowStep and equal or
    less than highStep.
    It is the step position where the voltage is neutralU when the other
    terminals of the transformer are at the ratedU. If there are other
    tap changers on the transformer those taps are kept constant at their
    neutralStep.
    '''

    normalStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap step position used in "normal" network operation for this winding.
            For a "Fixed" tap changer indicates the current physical tap setting.
            The attribute shall be equal to or greater than lowStep and equal to or
            less than highStep.
            '''

        })
    '''
    The tap step position used in "normal" network operation for this winding.
    For a "Fixed" tap changer indicates the current physical tap setting.
    The attribute shall be equal to or greater than lowStep and equal to
    or less than highStep.
    '''

    ptRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Built-in potential (voltage) transformer ratio. If a value is specified,
            then RegulatingControl.targetValue (and RegulatingControl.targetDeadband,
            RegulatingControl.maxAllowedTargetValue, RegulatingControl.minAllowedTargetValue
            as well as TapChangerControl.maxLimitVoltage and TapChangerControl.minLimitVoltage)
            are expressed in secondary units.
            '''

        })
    '''
    Built-in potential (voltage) transformer ratio. If a value is specified,
    then RegulatingControl.targetValue (and RegulatingControl.targetDeadband,
    RegulatingControl.maxAllowedTargetValue, RegulatingControl.minAllowedTargetValue
    as well as TapChangerControl.maxLimitVoltage and TapChangerControl.minLimitVoltage)
    are expressed in secondary units.
    '''

    step: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap changer position.
            Starting step for a steady state solution. Non integer values are allowed
            to support continuous tap variables. The reasons for continuous value are
            to support study cases where no discrete tap changer has yet been designed,
            a solution where a narrow voltage band forces the tap step to oscillate
            or to accommodate for a continuous solution as input.
            The attribute shall be equal to or greater than lowStep and equal to or
            less than highStep.
            '''

        })
    '''
    Tap changer position.
    Starting step for a steady state solution. Non integer values are allowed
    to support continuous tap variables. The reasons for continuous value
    are to support study cases where no discrete tap changer has yet been
    designed, a solution where a narrow voltage band forces the tap step
    to oscillate or to accommodate for a continuous solution as input.
    The attribute shall be equal to or greater than lowStep and equal to
    or less than highStep.
    '''

    initialDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For an LTC, the delay for initial tap changer operation (first step change).
            '''

        })
    '''
    For an LTC, the delay for initial tap changer operation (first step
    change).
    '''

    neutralU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage at which the winding operates at the neutral tap setting. It is
            the voltage at the terminal of the PowerTransformerEnd associated with
            the tap changer when all tap changers on the transformer are at their neutralStep
            position. Normally neutralU of the tap changer is the same as ratedU of
            the PowerTransformerEnd, but it can differ in special cases such as when
            the tapping mechanism is separate from the winding more common on lower
            voltage transformers.
            This attribute is not relevant for PhaseTapChangerAsymmetrical, PhaseTapChangerSymmetrical
            and PhaseTapChangerLinear.
            '''

        })
    '''
    Voltage at which the winding operates at the neutral tap setting. It
    is the voltage at the terminal of the PowerTransformerEnd associated
    with the tap changer when all tap changers on the transformer are at
    their neutralStep position. Normally neutralU of the tap changer is
    the same as ratedU of the PowerTransformerEnd, but it can differ in
    special cases such as when the tapping mechanism is separate from the
    winding more common on lower voltage transformers.
    This attribute is not relevant for PhaseTapChangerAsymmetrical, PhaseTapChangerSymmetrical
    and PhaseTapChangerLinear.
    '''

    subsequentDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            For an LTC, the delay for subsequent tap changer operation (second and
            later step changes).
            '''

        })
    '''
    For an LTC, the delay for subsequent tap changer operation (second
    and later step changes).
    '''

    SvTapStep: Optional[SvTapStep] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SvTapStep.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap step state associated with the tap changer.
            '''

        })
    '''
    The tap step state associated with the tap changer.
    '''

    TapChangeController: Optional[TapChangerController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChangerController.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap changer controller that controls this TapChanger.
            '''

        })
    '''
    The tap changer controller that controls this TapChanger.
    '''

    TapChangerControl: Optional[TapChangerControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChangerControl.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The regulating control scheme in which this tap changer participates.
            '''

        })
    '''
    The regulating control scheme in which this tap changer participates.
    '''

    StepOperationalLimitTable: list[StepOperationalLimitTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StepOperationalLimitTable.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The step operational limit table for this tap changer.
            '''

        })
    '''
    The step operational limit table for this tap changer.
    '''

    SvTapStep: Optional[SvTapStep] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SvTapStep.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The tap step state associated with the tap changer.
            '''

        })
    '''
    The tap step state associated with the tap changer.
    '''

    TapSchedules: list[TapSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TapSchedule.TapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A TapChanger can have TapSchedules.
            '''

        })
    '''
    A TapChanger can have TapSchedules.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ImpedanceTapChangerTabular(TapChanger):
    '''
    Describes a tap changer with a table defining the relation between the
    tap step and the impedance difference across the windings of a three winding
    transformer.
    '''

    ImpedanceTapChangerTable: Optional[ImpedanceTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ImpedanceTapChangerTable.ImpedanceTapChangerTabular',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The impedance tap changer table for this impedance tap changer.
            '''

        })
    '''
    The impedance tap changer table for this impedance tap changer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChanger(TapChanger):
    '''
    A transformer phase shifting tap model that controls the phase angle difference
    across the power transformer and potentially the active power flow through
    the power transformer. This phase tap model may also impact the voltage
    magnitude.
    '''

    TransformerEnd: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.PhaseTapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end to which this phase tap changer belongs.
            '''

        })
    '''
    Transformer end to which this phase tap changer belongs.
    '''

    TransformerEnd: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.PhaseTapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Transformer end to which this phase tap changer belongs.
            '''

        })
    '''
    Transformer end to which this phase tap changer belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerLinear(PhaseTapChanger):
    '''
    Describes a tap changer with a linear relation between the tap step and
    the phase angle difference across the transformer. This is a mathematical
    model that is an approximation of a real phase tap changer.
    The phase angle is computed as stepPhaseShiftIncrement times the tap position.
    The voltage magnitude of both sides is the same.
    '''

    stepPhaseShiftIncrement: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase shift per step position. A positive value indicates a positive angle
            variation from the Terminal at the PowerTransformerEnd, where the TapChanger
            is located, into the transformer.
            The actual phase shift increment might be more accurately computed from
            the symmetrical or asymmetrical models or a tap step table lookup if those
            are available.
            '''

        })
    '''
    Phase shift per step position. A positive value indicates a positive
    angle variation from the Terminal at the PowerTransformerEnd, where
    the TapChanger is located, into the transformer.
    The actual phase shift increment might be more accurately computed
    from the symmetrical or asymmetrical models or a tap step table lookup
    if those are available.
    '''

    xMax: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactance depends on the tap position according to a "u" shaped curve.
            The maximum reactance (xMax) appears at the low and high tap positions.
            Depending on the "u" curve the attribute can be either higher or lower
            than PowerTransformerEnd.x.
            '''

        })
    '''
    The reactance depends on the tap position according to a "u" shaped
    curve. The maximum reactance (xMax) appears at the low and high tap
    positions. Depending on the "u" curve the attribute can be either higher
    or lower than PowerTransformerEnd.x.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerNonLinear(PhaseTapChanger):
    '''
    The non-linear phase tap changer describes the non-linear behaviour of
    a phase tap changer. This is a base class for the symmetrical and asymmetrical
    phase tap changer models. The details of these models can be found in IEC
    61970-301.
    '''

    voltageStepIncrement: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage step increment on the out of phase winding (the PowerTransformerEnd
            where the TapChanger is located) specified in percent of rated voltage
            of the PowerTransformerEnd. A positive value means a positive voltage variation
            from the Terminal at the PowerTransformerEnd, where the TapChanger is located,
            into the transformer.
            When the increment is negative, the voltage decreases when the tap step
            increases.
            '''

        })
    '''
    The voltage step increment on the out of phase winding (the PowerTransformerEnd
    where the TapChanger is located) specified in percent of rated voltage
    of the PowerTransformerEnd. A positive value means a positive voltage
    variation from the Terminal at the PowerTransformerEnd, where the TapChanger
    is located, into the transformer.
    When the increment is negative, the voltage decreases when the tap
    step increases.
    '''

    xMax: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactance depends on the tap position according to a "u" shaped curve.
            The maximum reactance (xMax) appears at the low and high tap positions.
            Depending on the "u" curve the attribute can be either higher or lower
            than PowerTransformerEnd.x.
            '''

        })
    '''
    The reactance depends on the tap position according to a "u" shaped
    curve. The maximum reactance (xMax) appears at the low and high tap
    positions. Depending on the "u" curve the attribute can be either higher
    or lower than PowerTransformerEnd.x.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConnectionAngleTapChanger(PhaseTapChangerNonLinear):
    '''
    Describes the tap model for an asymmetrical phase shifting transformer
    in which the difference voltage vector adds to the in-phase winding. The
    out-of-phase winding is the transformer end where the tap changer is located.
    The angle between the in-phase and out-of-phase windings is named the winding
    connection angle. The phase shift depends on both the difference voltage
    magnitude and the winding connection angle. The winding connection angle
    can be changed for different operating conditions while energized.
    The following options are supported:
    <ol>
    <li>Modelling of tap changer using ConnectionAngleTapChanger without ConnectionAngleTapChangerTable.
    Equations for asymmetrical transformer defined in IEC 61970-301 are used.
    The supported winding connection angle range is defined by the maximum
    winding connection angle and the minimum winding connection angle. The
    connection angle step size is used to define the allowed winding connection
    angles for the tap changer.</li>
    <li>Modelling of tap changer using ConnectionAngleTapChanger with ConnectionAngleTapChangerTable.
    There shall be different tables that relate to different winding connection
    angles that are supported by the tap changer. There is no need to provide
    information on winding connection angle range and connection angle step
    size as the allowed winding connection angles are defined by the table.
    The usage of the table is recommended in cases where the equations for
    asymmetrical transformer defined in IEC 61970-301 cannot fully describe
    the tap changer or in cases where it is exchange the data for different
    tap steps in an explicit way as a table.</li>
    </ol>
    '''

    connectionAngleStepSize: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The supported winding connection angle range is defined by the maximum
            winding connection angle and the minimum winding connection angle. The
            connection angle step size is used to define the allowed winding connection
            angles for the tap changer. The attribute shall be a positive value and
            can only be multiples of 30 degrees. For example, if the tap changer has
            maximum winding connection angle equal to 60 degrees, minimum winding connection
            angle equal to -60 degrees and the connection angle step size is equal
            to 60, the allowed winding connection angle that can be used for this tap
            changer are -60 degrees, 0 degrees and -60 degrees. When using connection
            angle tap changer table there is no need to provide information on winding
            connection angle range and connection angle step size as the allowed winding
            connection angles are defined by the table.
            '''

        })
    '''
    The supported winding connection angle range is defined by the maximum
    winding connection angle and the minimum winding connection angle.
    The connection angle step size is used to define the allowed winding
    connection angles for the tap changer. The attribute shall be a positive
    value and can only be multiples of 30 degrees. For example, if the
    tap changer has maximum winding connection angle equal to 60 degrees,
    minimum winding connection angle equal to -60 degrees and the connection
    angle step size is equal to 60, the allowed winding connection angle
    that can be used for this tap changer are -60 degrees, 0 degrees and
    -60 degrees. When using connection angle tap changer table there is
    no need to provide information on winding connection angle range and
    connection angle step size as the allowed winding connection angles
    are defined by the table.
    '''

    maxWindingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The maximum phase angle between the in-phase winding and the out-of -phase
            winding used for creating phase shift. The attribute can be positive, negative
            or zero and can only be multiples of 30 degrees. When 0 degree is used
            the asymmetrical phase tap changer acts as ratio tap changer controlling
            voltage. The maximum winding connection angle shall be greater than the
            minimum winding connection angle. When using connection angle tap changer
            table there is no need to provide information on winding connection angle
            range and connection angle step size as the allowed winding connection
            angles are defined by the table.
            '''

        })
    '''
    The maximum phase angle between the in-phase winding and the out-of
    -phase winding used for creating phase shift. The attribute can be
    positive, negative or zero and can only be multiples of 30 degrees.
    When 0 degree is used the asymmetrical phase tap changer acts as ratio
    tap changer controlling voltage. The maximum winding connection angle
    shall be greater than the minimum winding connection angle. When using
    connection angle tap changer table there is no need to provide information
    on winding connection angle range and connection angle step size as
    the allowed winding connection angles are defined by the table.
    '''

    minWindingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum phase angle between the in-phase winding and the out-of -phase
            winding used for creating phase shift. The attribute can be positive, negative
            or zero and can only be multiples of 30 degrees. When 0 degree is used
            the asymmetrical phase tap changer acts as ratio tap changer controlling
            voltage. When using connection angle tap changer table there is no need
            to provide information on winding connection angle range and connection
            angle step size as the allowed winding connection angles are defined by
            the table.
            '''

        })
    '''
    The minimum phase angle between the in-phase winding and the out-of
    -phase winding used for creating phase shift. The attribute can be
    positive, negative or zero and can only be multiples of 30 degrees.
    When 0 degree is used the asymmetrical phase tap changer acts as ratio
    tap changer controlling voltage. When using connection angle tap changer
    table there is no need to provide information on winding connection
    angle range and connection angle step size as the allowed winding connection
    angles are defined by the table.
    '''

    normalWindingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The normal phase angle between the in-phase winding and the out-of -phase
            winding used for creating phase shift. The out-of-phase winding produces
            what is known as the difference voltage. Setting this angle to 90 degrees
            is not the same as a symmetrical transformer. In this scenario you will
            still treat the 90-degree angle as a phase shifting transformer. The attribute
            can only be multiples of 30 degrees. When 0 degree is used the asymmetrical
            phase tap changer acts as ratio tap changer controlling voltage.
            '''

        })
    '''
    The normal phase angle between the in-phase winding and the out-of
    -phase winding used for creating phase shift. The out-of-phase winding
    produces what is known as the difference voltage. Setting this angle
    to 90 degrees is not the same as a symmetrical transformer. In this
    scenario you will still treat the 90-degree angle as a phase shifting
    transformer. The attribute can only be multiples of 30 degrees. When
    0 degree is used the asymmetrical phase tap changer acts as ratio tap
    changer controlling voltage.
    '''

    windingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The operating phase angle between the in-phase winding and the out-of -phase
            winding used for creating phase shift. The out-of-phase winding produces
            what is known as the difference voltage. Setting this angle to 90 degrees
            is not the same as a symmetrical transformer. In this scenario you will
            still treat the 90-degree angle as a phase shifting transformer. The attribute
            can only be multiples of 30 degrees. When 0 degree is used the asymmetrical
            phase tap changer acts as ratio tap changer controlling voltage.
            '''

        })
    '''
    The operating phase angle between the in-phase winding and the out-of
    -phase winding used for creating phase shift. The out-of-phase winding
    produces what is known as the difference voltage. Setting this angle
    to 90 degrees is not the same as a symmetrical transformer. In this
    scenario you will still treat the 90-degree angle as a phase shifting
    transformer. The attribute can only be multiples of 30 degrees. When
    0 degree is used the asymmetrical phase tap changer acts as ratio tap
    changer controlling voltage.
    '''

    ConnectionAngleTapChangerTable: list[ConnectionAngleTapChangerTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConnectionAngleTapChangerTable.ConnectionAngleTapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The connection angle tap changer table that is applied to this connection
            angle tap changer.
            '''

        })
    '''
    The connection angle tap changer table that is applied to this connection
    angle tap changer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerAsymmetrical(PhaseTapChangerNonLinear):
    '''
    Describes the tap model for an asymmetrical phase shifting transformer
    in which the difference voltage vector adds to the in-phase winding. The
    out-of-phase winding is the transformer end where the tap changer is located.
    The angle between the in-phase and out-of-phase windings is named the winding
    connection angle. The phase shift depends on both the difference voltage
    magnitude and the winding connection angle.
    '''

    windingConnectionAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The phase angle between the in-phase winding and the out-of -phase winding
            used for creating phase shift. The out-of-phase winding produces what is
            known as the difference voltage. Setting this angle to 90 degrees is not
            the same as a symmetrical transformer. The attribute can only be multiples
            of 30 degrees. The allowed range is -150 degrees to 150 degrees excluding
            0.
            '''

        })
    '''
    The phase angle between the in-phase winding and the out-of -phase
    winding used for creating phase shift. The out-of-phase winding produces
    what is known as the difference voltage. Setting this angle to 90 degrees
    is not the same as a symmetrical transformer. The attribute can only
    be multiples of 30 degrees. The allowed range is -150 degrees to 150
    degrees excluding 0.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerSymmetrical(PhaseTapChangerNonLinear):
    '''
    Describes a symmetrical phase shifting transformer tap model in which the
    voltage magnitude of both sides is the same. The difference voltage magnitude
    is the base in an equal-sided triangle where the sides corresponds to the
    primary and secondary voltages. The phase angle difference corresponds
    to the top angle and can be expressed as twice the arctangent of half the
    total difference voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerTabular(PhaseTapChanger):
    '''
    Describes a tap changer with a table defining the relation between the
    tap step and the phase angle difference across the transformer.
    '''

    PhaseTapChangerTable: Optional[PhaseTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhaseTapChangerTable.PhaseTapChangerTabular',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The phase tap changer table for this phase tap changer.
            '''

        })
    '''
    The phase tap changer table for this phase tap changer.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class RatioTapChanger(TapChanger):
    '''
    A tap changer that changes the voltage ratio impacting the voltage magnitude
    but not the phase angle across the transformer.
    Angle sign convention (general): Positive value indicates a positive phase
    shift from the winding where the tap is located to the other winding (for
    a two-winding transformer).
    '''

    stepVoltageIncrement: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step increment, in per cent of rated voltage of the power transformer
            end, per step position.
            When the increment is negative, the voltage decreases when the tap step
            increases.
            '''

        })
    '''
    Tap step increment, in per cent of rated voltage of the power transformer
    end, per step position.
    When the increment is negative, the voltage decreases when the tap
    step increases.
    '''

    RatioTapChangerTable: Optional[RatioTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChangerTable.RatioTapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap ratio table for this ratio tap changer.
            '''

        })
    '''
    The tap ratio table for this ratio tap changer.
    '''

    TransformerEnd: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.RatioTapChanger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end to which this ratio tap changer belongs.
            '''

        })
    '''
    Transformer end to which this ratio tap changer belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TieCorridor(PowerSystemResource):
    '''
    A collection of one or more tie-lines or direct current poles that connect
    two different control areas.
    '''

    maxRegulatingReserveRamp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum authorized ramp for regulating reserve.
            '''

        })
    '''
    Maximum authorized ramp for regulating reserve.
    '''

    delayRegulatingReserve: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A positive number that is a multiple of Automatic Generation Control (AGC)
            run cycles that describes the delay in adapting imbalance of the tie corridor.
            '''

        })
    '''
    A positive number that is a multiple of Automatic Generation Control
    (AGC) run cycles that describes the delay in adapting imbalance of
    the tie corridor.
    '''

    thresholdRegulatingReserve: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Regulating reserve threshold.
            '''

        })
    '''
    Regulating reserve threshold.
    '''

    TieFlow: list[TieFlow] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieFlow.TieCorridor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Tie flow which belongs to the tie corridor.
            '''

        })
    '''
    Tie flow which belongs to the tie corridor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACTieCorridor(TieCorridor):
    '''
    A collection of one or more AC tie lines that connect two different control
    areas.
    '''

    Line: list[Line] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Line.ACTieCorridor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Line that is part of the ACTieCorridor.
            '''

        })
    '''
    Line that is part of the ACTieCorridor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DCTieCorridor(TieCorridor):
    '''
    A collection of one or more direct current poles that connect two different
    control areas.
    '''

    maxRegulatingReserve: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum regulating reserve.
            '''

        })
    '''
    Maximum regulating reserve.
    '''

    minRegulatingReserve: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minimum regulating reserve.
            '''

        })
    '''
    Minimum regulating reserve.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Active power at the point of common coupling. Load sign convention is used,
            i.e. positive sign means flow out from a node.
            Starting value for a steady state solution in the case a simplified power
            flow model is used.
            '''

        })
    '''
    Active power at the point of common coupling. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    Starting value for a steady state solution in the case a simplified
    power flow model is used.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactive power at the point of common coupling. Load sign convention is
            used, i.e. positive sign means flow out from a node.
            Starting value for a steady state solution in the case a simplified power
            flow model is used.
            '''

        })
    '''
    Reactive power at the point of common coupling. Load sign convention
    is used, i.e. positive sign means flow out from a node.
    Starting value for a steady state solution in the case a simplified
    power flow model is used.
    '''

    rampingKind: Optional[RampingPrincipleKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Ramping principle is used to define a transition from one scheduled value
            to next one.
            '''

        })
    '''
    Ramping principle is used to define a transition from one scheduled
    value to next one.
    '''

    DirectCurrentMasterController: Optional[DirectCurrentMasterController] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DirectCurrentMasterController.DCTieCorridor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Direct current master controller for this DCTieCorridor.
            '''

        })
    '''
    Direct current master controller for this DCTieCorridor.
    '''

    DCPole: list[DCPole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCPole.DCTieCorridor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DCPole which is part of the DC corridor.
            '''

        })
    '''
    The DCPole which is part of the DC corridor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TransmissionRightOfWay(PowerSystemResource):
    '''
    A collection of transmission lines that are close proximity to each other.
    '''

    MktLine: list[MktLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktLine.TransmissionRightOfWay',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class VoltageControlZone(PowerSystemResource):
    '''
    An area of the power system network which is defined for secondary voltage
    control purposes. A voltage control zone consists of a collection of substations
    with a designated bus bar section whose voltage will be controlled.
    '''

    BusbarSection: Optional[BusbarSection] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BusbarSection.VoltageControlZone',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A VoltageControlZone is controlled by a designated BusbarSection.
            '''

        })
    '''
    A VoltageControlZone is controlled by a designated BusbarSection.
    '''

    RegulationSchedule: Optional[RegulationSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulationSchedule.VoltageControlZones',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A VoltageControlZone may have a voltage regulation schedule.
            '''

        })
    '''
    A VoltageControlZone may have a voltage regulation schedule.
    '''

    BusbarSection: Optional[BusbarSection] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BusbarSection.VoltageControlZone',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A VoltageControlZone is controlled by a designated BusbarSection.
            '''

        })
    '''
    A VoltageControlZone is controlled by a designated BusbarSection.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.European)
@dataclass(repr=False)
class WindPowerPlant(PowerSystemResource):
    '''
    Wind power plant.
    '''

    WindGeneratingUnits: list[WindGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'European',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindGeneratingUnit.WindPowerPlant',
        'namespace': 'http://iec.ch/TC57/CIM100-European#',
        'serialize': False,
        'docstring':
            '''
            A wind generating unit or units may be a member of a wind power plant.
            '''

        })
    '''
    A wind generating unit or units may be a member of a wind power plant.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100-European#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WireSegmentPhase(PowerSystemResource):
    '''
    Represents a single wire of an alternating current wire segment.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number designation for this wire segment phase. Each wire segment phase
            within a wire segment should have a unique sequence number.
            '''

        })
    '''
    Number designation for this wire segment phase. Each wire segment phase
    within a wire segment should have a unique sequence number.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The phase connection of the wire at both ends.
            '''

        })
    '''
    The phase connection of the wire at both ends.
    '''

    WireSegment: Optional[WireSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireSegment.WireSegmentPhases',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The wire segment to which the phase belongs.
            '''

        })
    '''
    The wire segment to which the phase belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProductAssetModel(IdentifiedObject):
    '''
    Asset model by a specific manufacturer.
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ProductAssetModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Asset information (nameplate) for this product asset model.
            '''

        })
    '''
    Asset information (nameplate) for this product asset model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RatioTapChangerTable(IdentifiedObject):
    '''
    Describes a curve for how the voltage magnitude and impedance varies with
    the tap step.
    '''

    RatioTapChanger: list[RatioTapChanger] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RatioTapChanger.RatioTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The ratio tap changer of this tap ratio table.
            '''

        })
    '''
    The ratio tap changer of this tap ratio table.
    '''

    RatioTapChangerTablePoint: list[RatioTapChangerTablePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RatioTapChangerTablePoint.RatioTapChangerTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Points of this table.
            '''

        })
    '''
    Points of this table.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemoteControl(IdentifiedObject):
    '''
    Remote controls are outputs that are sent by the remote unit to actuators
    in the process.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Control.RemoteControl',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Control for the RemoteControl point.
            '''

        })
    '''
    The Control for the RemoteControl point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemoteSource(IdentifiedObject):
    '''
    Remote sources are state variables that are telemetered or calculated within
    the remote unit.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.RemoteSource',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Link to the physical telemetered point associated with this measurement.
            '''

        })
    '''
    Link to the physical telemetered point associated with this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReportingGroup(IdentifiedObject):
    '''
    A reporting group is used for various ad-hoc groupings used for reporting.
    '''

    ReportingSuperGroup: Optional[ReportingSuperGroup] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReportingSuperGroup.ReportingGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reporting super group to which this reporting group belongs.
            '''

        })
    '''
    Reporting super group to which this reporting group belongs.
    '''

    BusNameMarker: list[BusNameMarker] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BusNameMarker.ReportingGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The bus name markers that belong to this reporting group.
            '''

        })
    '''
    The bus name markers that belong to this reporting group.
    '''

    TopologicalNode: list[TopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TopologicalNode.ReportingGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The topological nodes that belong to the reporting group.
            '''

        })
    '''
    The topological nodes that belong to the reporting group.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ReportingSuperGroup(IdentifiedObject):
    '''
    A reporting super group, groups reporting groups for a higher level report.
    '''

    ReportingGroup: list[ReportingGroup] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReportingGroup.ReportingSuperGroup',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Reporting groups that are grouped under this super group.
            '''

        })
    '''
    Reporting groups that are grouped under this super group.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledEvent(IdentifiedObject):
    '''
    An event to trigger one or more activities, such as reading a meter, recalculating
    a bill, requesting work, when generating units must be scheduled for maintenance,
    when a transformer is scheduled to be refurbished, etc.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of scheduled event.
            '''

        })
    '''
    Type of scheduled event.
    '''

    duration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Duration of the scheduled event, for example, the time to ramp between
            values.
            '''

        })
    '''
    Duration of the scheduled event, for example, the time to ramp between
    values.
    '''

    ScheduledEventData: Optional[ScheduledEventData] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ScheduledEventData.ScheduledEvents',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specification for this scheduled event.
            '''

        })
    '''
    Specification for this scheduled event.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of the scheduled event.
            '''

        })
    '''
    Status of the scheduled event.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Season(IdentifiedObject):
    '''
    A specified time period of the year.
    '''

    endDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date season ends.
            '''

        })
    '''
    Date season ends.
    '''

    startDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date season starts.
            '''

        })
    '''
    Date season starts.
    '''

    SeasonDayTypeSchedules: list[SeasonDayTypeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SeasonDayTypeSchedule.Season',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Schedules that use this Season.
            '''

        })
    '''
    Schedules that use this Season.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceCategory(IdentifiedObject):
    '''
    Category of service provided to the customer.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedServiceCategory',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this service category.
            '''

        })
    '''
    All configuration events created for this service category.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorDynamics(IdentifiedObject):
    '''
    Shunt compensator whose behaviour is described by reference to a standard
    model <font color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Shunt compensator to which shunt compensator dynamics model applies.
            '''

        })
    '''
    Shunt compensator to which shunt compensator dynamics model applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ShuntCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class StartupModel(IdentifiedObject):
    '''
    Unit start up characteristics depending on how long the unit has been off
    line.
    '''

    startupDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The date and time of the most recent generating unit startup.
            '''

        })
    '''
    The date and time of the most recent generating unit startup.
    '''

    startupPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Startup priority within control area where lower numbers indicate higher
            priorities. More than one unit in an area may be assigned the same priority.
            '''

        })
    '''
    Startup priority within control area where lower numbers indicate higher
    priorities. More than one unit in an area may be assigned the same
    priority.
    '''

    fixedMaintCost: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Fixed maintenance cost.
            '''

        })
    '''
    Fixed maintenance cost.
    '''

    hotStandbyHeat: Optional[ float | HeatRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The amount of heat input per time unit required for hot standby operation.
            '''

        })
    '''
    The amount of heat input per time unit required for hot standby operation.
    '''

    incrementalMaintCost: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Incremental maintenance cost.
            '''

        })
    '''
    Incremental maintenance cost.
    '''

    minimumDownTime: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum number of hours the unit must be down before restart.
            '''

        })
    '''
    The minimum number of hours the unit must be down before restart.
    '''

    minimumRunTime: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The minimum number of hours the unit must be operating before being allowed
            to shut down.
            '''

        })
    '''
    The minimum number of hours the unit must be operating before being
    allowed to shut down.
    '''

    riskFactorCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The opportunity cost associated with the return in monetary unit. This
            represents the restart's "share" of the unit depreciation and risk of an
            event which would damage the unit.
            '''

        })
    '''
    The opportunity cost associated with the return in monetary unit. This
    represents the restart's "share" of the unit depreciation and risk
    of an event which would damage the unit.
    '''

    startupCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total miscellaneous start up costs.
            '''

        })
    '''
    Total miscellaneous start up costs.
    '''

    stbyAuxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's auxiliary active power consumption to maintain standby mode.
            '''

        })
    '''
    The unit's auxiliary active power consumption to maintain standby mode.
    '''

    StartIgnFuelCurve: Optional[StartIgnFuelCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartIgnFuelCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup ignition fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup ignition fuel curve.
    '''

    StartMainFuelCurve: Optional[StartMainFuelCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartMainFuelCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup main fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup main fuel curve.
    '''

    StartRampCurve: Optional[StartRampCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartRampCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The unit's startup model may have a startup ramp curve.
            '''

        })
    '''
    The unit's startup model may have a startup ramp curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A thermal generating unit may have a startup model.
            '''

        })
    '''
    A thermal generating unit may have a startup model.
    '''

    StartIgnFuelCurve: Optional[StartIgnFuelCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartIgnFuelCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup ignition fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup ignition fuel curve.
    '''

    StartMainFuelCurve: Optional[StartMainFuelCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartMainFuelCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup main fuel curve.
            '''

        })
    '''
    The unit's startup model may have a startup main fuel curve.
    '''

    StartRampCurve: Optional[StartRampCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartRampCurve.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The unit's startup model may have a startup ramp curve.
            '''

        })
    '''
    The unit's startup model may have a startup ramp curve.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.StartupModel',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A thermal generating unit may have a startup model.
            '''

        })
    '''
    A thermal generating unit may have a startup model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StatcomDynamics(IdentifiedObject):
    '''
    STATCOM whose behaviour is described by reference to a standard model <font
    color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.StatcomDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The power electronics connection associated with this statcom dynamics
            model.
            '''

        })
    '''
    The power electronics connection associated with this statcom dynamics
    model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StatcomDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticVarCompensatorDynamics(IdentifiedObject):
    '''
    Static var compensator whose behaviour is described by reference to a standard
    model <font color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    StaticVarCompensator: Optional[StaticVarCompensator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensator.StaticVarCompensatorDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Static Var Compensator to which Static Var Compensator dynamics model applies.
            '''

        })
    '''
    Static Var Compensator to which Static Var Compensator dynamics model
    applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StaticVarCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticVarCompensatorSystemDynamics(StaticVarCompensatorDynamics):
    '''
    Static var compensator system whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    ShuntCompensator: list[ShuntCompensator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShuntCompensator.StaticVarCompensatorSystemDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Shunt Compensator to which Static Var Compensator system dynamics model
            applies.
            '''

        })
    '''
    Shunt Compensator to which Static Var Compensator system dynamics model
    applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StaticVarCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SVSMO4(StaticVarCompensatorSystemDynamics):
    '''
    Hybrid STATCOM type SVSMO4 static var system, which has at most only one
    TSC and one TSR. It also has voltage source converter (VSC). Note this
    model is not final hence some changes are expected in the next editions
    of the standard.
    Reference: WECC Hybrid STATCOM.
    '''

    FromTerminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasFromTerminalSVSMO4',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The FromTerminal for this SVSMO4 model.
            '''

        })
    '''
    The FromTerminal for this SVSMO4 model.
    '''

    ToTerminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasToTerminalSVSMO4',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The ToTerminal for this SVSMO4 model.
            '''

        })
    '''
    The ToTerminal for this SVSMO4 model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StaticVarCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StepOperationalLimitTable(IdentifiedObject):
    '''
    Describes a tabular curve for how the operational limit varies with the
    tap step.
    '''

    TapChanger: Optional[TapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChanger.StepOperationalLimitTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap changer that has a step operational limit table.
            '''

        })
    '''
    The tap changer that has a step operational limit table.
    '''

    OperationalLimit: list[OperationalLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimit.StepOperationalLimitTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The operational limit for this table.
            '''

        })
    '''
    The operational limit for this table.
    '''

    StepLimitTablePoint: list[StepLimitTablePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StepLimitTablePoint.StepOperationalLimitTable',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The points of this table.
            '''

        })
    '''
    The points of this table.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class SubGeographicalRegion(IdentifiedObject):
    '''
    A subset of a geographical region of a power system network model.
    '''

    Region: Optional[GeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeographicalRegion.Regions',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The geographical region which this sub-geographical region is within.
            '''

        })
    '''
    The geographical region which this sub-geographical region is within.
    '''

    DCLines: list[DCLine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCLine.Region',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The DC lines in this sub-geographical region.
            '''

        })
    '''
    The DC lines in this sub-geographical region.
    '''

    Lines: list[Line] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Line.Region',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The lines within the sub-geographical region.
            '''

        })
    '''
    The lines within the sub-geographical region.
    '''

    Substations: list[Substation] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Substation.Region',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The substations in this sub-geographical region.
            '''

        })
    '''
    The substations in this sub-geographical region.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingAction(IdentifiedObject):
    '''
    Atomic switching action.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.SwitchingAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ClampAction(SwitchingAction):
    '''
    Action on Clamp as a switching step
    '''

    Clamp: Optional[Clamp] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Clamp.ClampAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ControlAction(SwitchingAction):
    '''
    Control executed as a switching step.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Control.ControlAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CutAction(SwitchingAction):
    '''
    Action on cut as a switching step.
    '''

    Cut: Optional[Cut] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cut.CutAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Cut on which this action is taken.
            '''

        })
    '''
    Cut on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyConsumerAction(SwitchingAction):
    '''
    Action to connect or disconnect the Energy Consumer from its Terminal
    '''

    EnergyConsumer: Optional[EnergyConsumer] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumer.EnergyConsumerAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergySourceAction(SwitchingAction):
    '''
    Action on energy source as a switching step.
    '''

    EnergySource: Optional[EnergySource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySource.EnergySourceAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Energy source on which this action is taken.
            '''

        })
    '''
    Energy source on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GroundAction(SwitchingAction):
    '''
    Action on ground as a switching step.
    '''

    AlongACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineGroundingAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The line segment that this ground action will affect. This is the only
            way to access relationship to clamp in case the ground needs to be placed
            along the line segment.
            '''

        })
    '''
    The line segment that this ground action will affect. This is the only
    way to access relationship to clamp in case the ground needs to be
    placed along the line segment.
    '''

    GroundedEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.GroundingAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Equipment being grounded with this operation. In case of placing a ground
            anywhere along a line segment, you must use the clamp (to get the distance
            from one terminal), so use the explicit relation with line segment. In
            all other cases (including placing the ground at a line segment terminal),
            reference to one or more conducting equipment is sufficient.
            '''

        })
    '''
    Equipment being grounded with this operation. In case of placing a
    ground anywhere along a line segment, you must use the clamp (to get
    the distance from one terminal), so use the explicit relation with
    line segment. In all other cases (including placing the ground at a
    line segment terminal), reference to one or more conducting equipment
    is sufficient.
    '''

    Ground: Optional[Ground] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Ground.GroundAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Ground on which this action is taken.
            '''

        })
    '''
    Ground on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class JumperAction(SwitchingAction):
    '''
    Action on jumper as a switching step.
    '''

    ACLineSegments: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.LineJumpingAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The line segment that this jumper action will affect. This is the only
            way to access relationship to clamp in case the jumper needs to connect
            along the line segment.
            '''

        })
    '''
    The line segment that this jumper action will affect. This is the only
    way to access relationship to clamp in case the jumper needs to connect
    along the line segment.
    '''

    Clamp: Optional[Clamp] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Clamp.JumperAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    JumpedEquipments: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.JumpingAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Conducting equipment is affected when the jumper action connects one or
            both ends of a jumper to the conducting equipment. If the jumper action
            involves placing one or both ends of a jumper anywhere along a line segment,
            you must use the clamp (to get the distance from one terminal), using the
            explicit relation with clamp. In the case of placing one or both ends of
            the jumper at a line segment terminal, reference to one or more line segments
            is sufficient.
            '''

        })
    '''
    Conducting equipment is affected when the jumper action connects one
    or both ends of a jumper to the conducting equipment. If the jumper
    action involves placing one or both ends of a jumper anywhere along
    a line segment, you must use the clamp (to get the distance from one
    terminal), using the explicit relation with clamp. In the case of placing
    one or both ends of the jumper at a line segment terminal, reference
    to one or more line segments is sufficient.
    '''

    Jumper: Optional[Jumper] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Jumper.JumperAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Jumper on which this action is taken.
            '''

        })
    '''
    Jumper on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeasurementAction(SwitchingAction):
    '''
    Measurement taken as a switching step.
    '''

    Measurement: Optional[Measurement] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Measurement.MeasurementAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorAction(SwitchingAction):
    '''
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchAction(SwitchingAction):
    '''
    Action on switch as a switching step.
    '''

    OperatedSwitch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchAction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Switch that is the object of this switch action.
            '''

        })
    '''
    Switch that is the object of this switch action.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineDynamics(IdentifiedObject):
    '''
    Synchronous machine whose behaviour is described by reference to a standard
    model expressed in one of the following forms:
    - simplified (or classical), where a group of generators or motors is not
    modelled in detail;
    - detailed, in equivalent circuit form;
    - detailed, in time constant reactance form; or
    <font color="#0f0f0f">- by definition of a user-defined model.</font>
    <font color="#0f0f0f">It is a common practice to represent small generators
    by a negative load rather than by a dynamic generator model when performing
    dynamics simulations. In this case, a SynchronousMachine in the static
    model is not represented by anything in the dynamics model, instead it
    is treated as an ordinary load.</font>
    <font color="#0f0f0f">Parameter details:</font>
    <ol>
    <li><font color="#0f0f0f">Synchronous machine parameters such as <i>Xl,
    Xd, Xp</i> etc. are actually used as inductances in the models,</font>
    but are commonly referred to as reactances since, at nominal frequency,
    the PU values are the same. However, some references use the symbol <i>L</i>
    instead of <i>X</i>.</li>
    </ol>
    '''

    SynchronousMachine: Optional[SynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachine.SynchronousMachineDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machine to which synchronous machine dynamics model applies.
            '''

        })
    '''
    Synchronous machine to which synchronous machine dynamics model applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class TelephoneNumber(IdentifiedObject):
    '''
    Telephone number information.
    '''

    areaCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Area or region code.
            '''

        })
    '''
    (if applicable) Area or region code.
    '''

    cityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            City code.
            '''

        })
    '''
    City code.
    '''

    countryCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Country code.
            '''

        })
    '''
    Country code.
    '''

    dialOut: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Dial out code, for instance to call outside an enterprise.
            '''

        })
    '''
    (if applicable) Dial out code, for instance to call outside an enterprise.
    '''

    extension: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Extension for this telephone number.
            '''

        })
    '''
    (if applicable) Extension for this telephone number.
    '''

    internationalPrefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Prefix used when calling an international number.
            '''

        })
    '''
    (if applicable) Prefix used when calling an international number.
    '''

    ituPhone: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phone number according to International Telecommunication Union (ITU) E.164.
            '''

        })
    '''
    Phone number according to International Telecommunication Union (ITU)
    E.164.
    '''

    localNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Main (local) part of this telephone number.
            '''

        })
    '''
    Main (local) part of this telephone number.
    '''

    telephoneNumberKindOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description of the kind of telephone number when the enumeration is other.
            '''

        })
    '''
    Description of the kind of telephone number when the enumeration is
    other.
    '''

    telephoneNumberPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Order in which phone number should be used.
            '''

        })
    '''
    Order in which phone number should be used.
    '''

    telephonyKindOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    kind: Optional[TelephoneNumberKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The intended use for the telephone number.
            '''

        })
    '''
    The intended use for the telephone number.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class TieFlow(IdentifiedObject):
    '''
    Defines the structure (in terms of location and direction) of the net interchange
    constraint for a control area. This constraint may be used by either AGC
    or power flow.
    '''

    positiveFlowIn: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Specifies the sign of the tie flow associated with a control area. True
            if positive flow into the terminal (load convention) is also positive flow
            into the control area. See the description of ControlArea for further explanation
            of how TieFlow.positiveFlowIn is used.
            '''

        })
    '''
    Specifies the sign of the tie flow associated with a control area.
    True if positive flow into the terminal (load convention) is also positive
    flow into the control area. See the description of ControlArea for
    further explanation of how TieFlow.positiveFlowIn is used.
    '''

    ControlArea: Optional[ControlArea] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlArea.TieFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The control area of the tie flows.
            '''

        })
    '''
    The control area of the tie flows.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.TieFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal to which this tie flow belongs.
            '''

        })
    '''
    The terminal to which this tie flow belongs.
    '''

    TieCorridor: Optional[TieCorridor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TieCorridor.TieFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tie corridor which has the tie flow.
            '''

        })
    '''
    Tie corridor which has the tie flow.
    '''

    AltTieMeas: list[AltTieMeas] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AltTieMeas.TieFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The primary and alternate tie flow measurements associated with the tie
            flow.
            '''

        })
    '''
    The primary and alternate tie flow measurements associated with the
    tie flow.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TiePoint(IdentifiedObject):
    '''
    Site of an interface between interchange areas. The tie point can be a
    network branch (e.g., transmission line or transformer) or a switching
    device. For transmission lines, the interchange area boundary is usually
    at a designated point such as the middle of the line. Line end metering
    is then corrected for line losses.
    '''

    ByMktMeasurement: list[MktMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktMeasurement.ByTiePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A measurement is made on the B side of a tie point
            '''

        })
    '''
    A measurement is made on the B side of a tie point
    '''

    ForMktMeasurement: list[MktMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktMeasurement.ForTiePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A measurement is made on the A side of a tie point
            '''

        })
    '''
    A measurement is made on the A side of a tie point
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfReservation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TimePoint(IdentifiedObject):
    '''
    A point in time within a sequence of points in time relative to a time
    schedule.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Absolute date and time for this time point. For calendar-based time point,
            it is typically manually entered, while for interval-based or sequence-based
            time point it is derived.
            '''

        })
    '''
    Absolute date and time for this time point. For calendar-based time
    point, it is typically manually entered, while for interval-based or
    sequence-based time point it is derived.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if sequence-based) Relative sequence number for this time point.
            '''

        })
    '''
    (if sequence-based) Relative sequence number for this time point.
    '''

    relativeTimeInterval: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if interval-based) A point in time relative to scheduled start time in
            'TimeSchedule.scheduleInterval.start'.
            '''

        })
    '''
    (if interval-based) A point in time relative to scheduled start time
    in 'TimeSchedule.scheduleInterval.start'.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of this time point.
            '''

        })
    '''
    Status of this time point.
    '''

    TimeSchedule: Optional[TimeSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TimeSchedule.TimePoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Time schedule owning this time point.
            '''

        })
    '''
    Time schedule owning this time point.
    '''

    window: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Interval defining the window of time for which this time point is valid.
            '''

        })
    '''
    Interval defining the window of time for which this time point is valid.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class TopologicalIsland(IdentifiedObject):
    '''
    An electrically connected subset of the network. Topological islands can
    change as the current network state changes, e.g. due to:
    - disconnect switches or breakers changing state in a SCADA/EMS.
    - manual creation, change or deletion of topological nodes in a planning
    tool.
    Only energised TopologicalNode-s shall be part of the topological island.
    '''

    AngleRefTopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.AngleRefTopologicalIsland',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The angle reference for the island. Normally there is one TopologicalNode
            that is selected as the angle reference for each island. Other reference
            schemes exist, so the association is typically optional.
            '''

        })
    '''
    The angle reference for the island. Normally there is one TopologicalNode
    that is selected as the angle reference for each island. Other reference
    schemes exist, so the association is typically optional.
    '''

    AngleRefTopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.AngleRefTopologicalIsland',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The angle reference for the island. Normally there is one TopologicalNode
            that is selected as the angle reference for each island. Other reference
            schemes exist, so the association is typically optional.
            '''

        })
    '''
    The angle reference for the island. Normally there is one TopologicalNode
    that is selected as the angle reference for each island. Other reference
    schemes exist, so the association is typically optional.
    '''

    TopologicalNodes: list[TopologicalNode] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TopologicalNode.TopologicalIsland',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A topological node belongs to a topological island.
            '''

        })
    '''
    A topological node belongs to a topological island.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Topology'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class TopologicalNode(IdentifiedObject):
    '''
    For a detailed substation model a topological node is a set of connectivity
    nodes that, in the current network state, are connected together through
    any type of closed switches, including jumpers. Topological nodes change
    as the current network state changes (i.e., switches, breakers, etc. change
    state).
    For a planning model, switch statuses are not used to form topological
    nodes. Instead they are manually created or deleted in a model builder
    tool. Topological nodes maintained this way are also called "busses".
    '''

    pInjection: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power injected into the bus at this location in addition to
            injections from equipment. Positive sign means injection into the TopologicalNode
            (bus).
            Starting value for a steady state solution.
            '''

        })
    '''
    The active power injected into the bus at this location in addition
    to injections from equipment. Positive sign means injection into the
    TopologicalNode (bus).
    Starting value for a steady state solution.
    '''

    qInjection: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactive power injected into the bus at this location in addition to
            injections from equipment. Positive sign means injection into the TopologicalNode
            (bus).
            Starting value for a steady state solution.
            '''

        })
    '''
    The reactive power injected into the bus at this location in addition
    to injections from equipment. Positive sign means injection into the
    TopologicalNode (bus).
    Starting value for a steady state solution.
    '''

    AngleRefTopologicalIsland: Optional[TopologicalIsland] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalIsland.AngleRefTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The island for which the node is an angle reference. Normally there is
            one angle reference node for each island.
            '''

        })
    '''
    The island for which the node is an angle reference. Normally there
    is one angle reference node for each island.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The base voltage of the topological node.
            '''

        })
    '''
    The base voltage of the topological node.
    '''

    ConnectivityNodeContainer: Optional[ConnectivityNodeContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNodeContainer.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The connectivity node container to which the topological node belongs.
            '''

        })
    '''
    The connectivity node container to which the topological node belongs.
    '''

    ReportingGroup: Optional[ReportingGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReportingGroup.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reporting group to which the topological node belongs.
            '''

        })
    '''
    The reporting group to which the topological node belongs.
    '''

    TopologicalIsland: Optional[TopologicalIsland] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalIsland.TopologicalNodes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A topological node belongs to a topological island.
            '''

        })
    '''
    A topological node belongs to a topological island.
    '''

    BusNameMarker: list[BusNameMarker] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BusNameMarker.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            BusnameMarkers that may refer to a pre defined TopologicalNode.
            '''

        })
    '''
    BusnameMarkers that may refer to a pre defined TopologicalNode.
    '''

    ConnectivityNodes: list[ConnectivityNode] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConnectivityNode.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The connectivity nodes combine together to form this topological node.
            May depend on the current state of switches in the network.
            '''

        })
    '''
    The connectivity nodes combine together to form this topological node.
    May depend on the current state of switches in the network.
    '''

    SvInjection: list[SvInjection] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvInjection.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The injection flows state variables associated with the topological node.
            '''

        })
    '''
    The injection flows state variables associated with the topological
    node.
    '''

    SvVoltage: list[SvVoltage] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvVoltage.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The state voltage associated with the topological node.
            '''

        })
    '''
    The state voltage associated with the topological node.
    '''

    Terminal: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.TopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The terminals associated with the topological node. This can be used as
            an alternative to the connectivity node path to terminal, thus making it
            unnecessary to model connectivity nodes in some cases. Note that if connectivity
            nodes are in the model, this association would probably not be used as
            an input specification.
            '''

        })
    '''
    The terminals associated with the topological node. This can be used
    as an alternative to the connectivity node path to terminal, thus making
    it unnecessary to model connectivity nodes in some cases. Note that
    if connectivity nodes are in the model, this association would probably
    not be used as an input specification.
    '''

    AngleRefTopologicalIsland: Optional[TopologicalIsland] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalIsland.AngleRefTopologicalNode',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The island for which the node is an angle reference. Normally there is
            one angle reference node for each island.
            '''

        })
    '''
    The island for which the node is an angle reference. Normally there
    is one angle reference node for each island.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Topology'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Transaction(IdentifiedObject):
    '''
    The record of details of payment for service or token sale.
    '''

    UserAttributes: list[UserAttribute] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UserAttribute.Transaction',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All snapshots of meter parameters recorded at the time of this transaction.
            Use 'name' and 'value.value' attributes to specify name and value of a
            parameter from meter.
            '''

        })
    '''
    All snapshots of meter parameters recorded at the time of this transaction.
    Use 'name' and 'value.value' attributes to specify name and value of
    a parameter from meter.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerCoreAdmittance(IdentifiedObject):
    '''
    The transformer core admittance. Used to specify the core admittance of
    a transformer in a manner that can be shared among power transformers.
    '''

    b: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing branch susceptance (B mag). The value can be positive or negative.
            '''

        })
    '''
    Magnetizing branch susceptance (B mag). The value can be positive or
    negative.
    '''

    b0: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence magnetizing branch susceptance.
            '''

        })
    '''
    Zero sequence magnetizing branch susceptance.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing branch conductance (G mag).
            '''

        })
    '''
    Magnetizing branch conductance (G mag).
    '''

    g0: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence magnetizing branch conductance.
            '''

        })
    '''
    Zero sequence magnetizing branch conductance.
    '''

    TransformerEndInfo: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.CoreAdmittance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end datasheet used to calculate this core admittance.
            '''

        })
    '''
    Transformer end datasheet used to calculate this core admittance.
    '''

    TransformerEnd: list[TransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEnd.CoreAdmittance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All transformer ends having this core admittance.
            '''

        })
    '''
    All transformer ends having this core admittance.
    '''

    TransformerEndInfo: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.CoreAdmittance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Transformer end datasheet used to calculate this core admittance.
            '''

        })
    '''
    Transformer end datasheet used to calculate this core admittance.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerEnd(IdentifiedObject):
    '''
    A conducting connection point of a power transformer. It corresponds to
    a physical transformer winding terminal. In earlier CIM versions, the TransformerWinding
    class served a similar purpose, but this class is more flexible because
    it associates to terminal but is not a specialization of ConductingEquipment.
    '''

    endNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number for this transformer end, corresponding to the end's order in the
            power transformer vector group or phase angle clock number. Highest voltage
            winding should be 1. Each end within a power transformer should have a
            unique subsequent end number. Note the transformer end number need not
            match the terminal sequence number.
            '''

        })
    '''
    Number for this transformer end, corresponding to the end's order in
    the power transformer vector group or phase angle clock number. Highest
    voltage winding should be 1. Each end within a power transformer should
    have a unique subsequent end number. Note the transformer end number
    need not match the terminal sequence number.
    '''

    grounded: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Used only for Yn and Zn connections indicated by PowerTransformerEnd.connectionKind.
            If true, the neutral is grounded and attributes TransformerEnd.rground
            and TransformerEnd.xground are required. If false, the attributes TransformerEnd.rground
            and TransformerEnd.xground are not considered.
            '''

        })
    '''
    Used only for Yn and Zn connections indicated by PowerTransformerEnd.connectionKind.
    If true, the neutral is grounded and attributes TransformerEnd.rground
    and TransformerEnd.xground are required. If false, the attributes TransformerEnd.rground
    and TransformerEnd.xground are not considered.
    '''

    bmagSat: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Core shunt magnetizing susceptance in the saturation region.
            '''

        })
    '''
    Core shunt magnetizing susceptance in the saturation region.
    '''

    magBaseU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reference voltage at which the magnetizing saturation measurements
            were made.
            '''

        })
    '''
    The reference voltage at which the magnetizing saturation measurements
    were made.
    '''

    magSatFlux: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Core magnetizing saturation curve knee flux level.
            '''

        })
    '''
    Core magnetizing saturation curve knee flux level.
    '''

    rground: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance part of neutral impedance. Zero indicates solidly grounded or
            grounded through a reactor.
            '''

        })
    '''
    Resistance part of neutral impedance. Zero indicates solidly grounded
    or grounded through a reactor.
    '''

    xground: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance part of neutral impedance. Zero indicates solidly grounded or
            grounded through a reactor.
            '''

        })
    '''
    Reactance part of neutral impedance. Zero indicates solidly grounded
    or grounded through a reactor.
    '''

    AdditionalRatioTapChanger: Optional[RatioTapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChanger.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An additional ratio tap changer for this transformer end.
            '''

        })
    '''
    An additional ratio tap changer for this transformer end.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.TransformerEnds',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Base voltage of the transformer end. This is essential for PU calculation.
            '''

        })
    '''
    Base voltage of the transformer end. This is essential for PU calculation.
    '''

    CoreAdmittance: Optional[TransformerCoreAdmittance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerCoreAdmittance.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Core admittance of this transformer end, representing magnetising current
            and core losses. The full values of the transformer should be supplied
            for one transformer end only.
            '''

        })
    '''
    Core admittance of this transformer end, representing magnetising current
    and core losses. The full values of the transformer should be supplied
    for one transformer end only.
    '''

    PhaseTapChanger: Optional[PhaseTapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhaseTapChanger.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase tap changer associated with this transformer end.
            '''

        })
    '''
    Phase tap changer associated with this transformer end.
    '''

    RatioTapChanger: Optional[RatioTapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChanger.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Ratio tap changer associated with this transformer end.
            '''

        })
    '''
    Ratio tap changer associated with this transformer end.
    '''

    StarImpedance: Optional[TransformerStarImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerStarImpedance.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (accurate for 2- or 3-winding transformers only) Pi-model impedances of
            this transformer end. By convention, for a two winding transformer, the
            full values of the transformer should be entered on the high voltage end
            (endNumber=1).
            '''

        })
    '''
    (accurate for 2- or 3-winding transformers only) Pi-model impedances
    of this transformer end. By convention, for a two winding transformer,
    the full values of the transformer should be entered on the high voltage
    end (endNumber=1).
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Terminal of the power transformer to which this transformer end belongs.
            '''

        })
    '''
    Terminal of the power transformer to which this transformer end belongs.
    '''

    PhaseTapChanger: Optional[PhaseTapChanger] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhaseTapChanger.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Phase tap changer associated with this transformer end.
            '''

        })
    '''
    Phase tap changer associated with this transformer end.
    '''

    RatioTapChanger: Optional[RatioTapChanger] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChanger.TransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Ratio tap changer associated with this transformer end.
            '''

        })
    '''
    Ratio tap changer associated with this transformer end.
    '''

    FromMeshImpedance: list[TransformerMeshImpedance] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerMeshImpedance.FromTransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All mesh impedances between this 'to' and other 'from' transformer ends.
            '''

        })
    '''
    All mesh impedances between this 'to' and other 'from' transformer
    ends.
    '''

    ToMeshImpedance: list[TransformerMeshImpedance] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerMeshImpedance.ToTransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All mesh impedances between this 'from' and other 'to' transformer ends.
            '''

        })
    '''
    All mesh impedances between this 'from' and other 'to' transformer
    ends.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PowerTransformerEnd(TransformerEnd):
    '''
    A PowerTransformerEnd is associated with each Terminal of a PowerTransformer.
    The impedance values r, r0, x, and x0 of a PowerTransformerEnd represents
    a star equivalent as follows.
    1) two PowerTransformerEnd-s shall be defined for a two Terminal PowerTransformer
    even if the two PowerTransformerEnd-s have the same rated voltage. The
    high voltage PowerTransformerEnd (TransformerEnd.endNumber=1) is the one
    used to exchange resistances (r, r0) and reactances (x, x0) of the PowerTransformer
    while the low voltage PowerTransformerEnd (TransformerEnd.endNumber=2)
    shall have zero impedance values.
    2) for a three Terminal PowerTransformer the three PowerTransformerEnds
    represent a star equivalent with each leg in the star represented by r,
    r0, x, and x0 values.
    3) For a three Terminal transformer each PowerTransformerEnd shall have
    g, g0, b and b0 values corresponding to the no load losses distributed
    on the three PowerTransformerEnds. The total no load loss shunt impedances
    may also be placed at one of the PowerTransformerEnds, preferably the end
    numbered 1, having the shunt values on end 1. This is the preferred way.
    4) for a PowerTransformer with more than three Terminals the PowerTransformerEnd
    impedance values cannot be used. Instead use the TransformerMeshImpedance
    or split the transformer into multiple PowerTransformers.
    Each PowerTransformerEnd must be contained by a PowerTransformer. Because
    a PowerTransformerEnd (or any other object) can not be contained by more
    than one parent, a PowerTransformerEnd can not have an association to an
    EquipmentContainer (Substation, VoltageLevel, etc).
    '''

    phaseAngleClock: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Terminal voltage phase angle displacement where 360 degrees are represented
            with clock hours. The valid values are 0 to 11. For example, for the secondary
            side end of a transformer with vector group code of 'Dyn11', specify the
            connection kind as wye with neutral and specify the phase angle of the
            clock as 11. The clock value of the transformer end number specified as
            1, is assumed to be zero. Note the transformer end number is not assumed
            to be the same as the terminal sequence number.
            '''

        })
    '''
    Terminal voltage phase angle displacement where 360 degrees are represented
    with clock hours. The valid values are 0 to 11. For example, for the
    secondary side end of a transformer with vector group code of 'Dyn11',
    specify the connection kind as wye with neutral and specify the phase
    angle of the clock as 11. The clock value of the transformer end number
    specified as 1, is assumed to be zero. Note the transformer end number
    is not assumed to be the same as the terminal sequence number.
    '''

    b: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing branch susceptance (B mag). The value can be positive or negative.
            '''

        })
    '''
    Magnetizing branch susceptance (B mag). The value can be positive or
    negative.
    '''

    b0: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence magnetizing branch susceptance.
            '''

        })
    '''
    Zero sequence magnetizing branch susceptance.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing branch conductance.
            '''

        })
    '''
    Magnetizing branch conductance.
    '''

    g0: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence magnetizing branch conductance (star-model).
            '''

        })
    '''
    Zero sequence magnetizing branch conductance (star-model).
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance (star-model) of the transformer end.
            The attribute shall be equal to or greater than zero for non-equivalent
            transformers.
            '''

        })
    '''
    Resistance (star-model) of the transformer end.
    The attribute shall be equal to or greater than zero for non-equivalent
    transformers.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance (star-model) of the transformer end.
            '''

        })
    '''
    Zero sequence series resistance (star-model) of the transformer end.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Normal apparent power rating.
            The attribute shall be a positive value. For a two-winding transformer
            the values for the high and low voltage sides shall be identical.
            '''

        })
    '''
    Normal apparent power rating.
    The attribute shall be a positive value. For a two-winding transformer
    the values for the high and low voltage sides shall be identical.
    '''

    ratedU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage: phase-phase for three-phase windings, and either phase-phase
            or phase-neutral for single-phase windings.
            A high voltage side, as given by TransformerEnd.endNumber, shall have a
            ratedU that is greater than or equal to ratedU for the lower voltage sides.
            The attribute shall be a positive value.
            '''

        })
    '''
    Rated voltage: phase-phase for three-phase windings, and either phase-phase
    or phase-neutral for single-phase windings.
    A high voltage side, as given by TransformerEnd.endNumber, shall have
    a ratedU that is greater than or equal to ratedU for the lower voltage
    sides.
    The attribute shall be a positive value.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance (star-model) of the transformer end.
            '''

        })
    '''
    Positive sequence series reactance (star-model) of the transformer
    end.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance of the transformer end.
            '''

        })
    '''
    Zero sequence series reactance of the transformer end.
    '''

    connectionKind: Optional[WindingConnection] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of connection.
            '''

        })
    '''
    Kind of connection.
    '''

    PowerTransformer: Optional[PowerTransformer] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerTransformer.PowerTransformerEnd',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power transformer of this power transformer end.
            '''

        })
    '''
    The power transformer of this power transformer end.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class TransformerTankEnd(TransformerEnd):
    '''
    Transformer tank end represents an individual winding for unbalanced models
    or for transformer tanks connected into a bank (and bank is modelled with
    the PowerTransformer).
    '''

    orderedPhases: Optional[OrderedPhaseCodeKind] = field(
        default=None,
        metadata={
        'type': 'gmdm enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    phases: Optional[PhaseCode] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Describes the phases carried by a conducting equipment.
            '''

        })
    '''
    Describes the phases carried by a conducting equipment.
    '''

    TransformerTank: Optional[TransformerTank] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerTank.TransformerTankEnds',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer this winding belongs to.
            '''

        })
    '''
    Transformer this winding belongs to.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class TransformerMeshImpedance(IdentifiedObject):
    '''
    Transformer mesh impedance (Delta-model) between transformer ends.
    The typical case is that this class describes the impedance between two
    transformer ends pair-wise, i.e. the cardinalities at both transformer
    end associations are 1. However, in cases where two or more transformer
    ends are modelled the cardinalities are larger than 1.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance between the 'from' and the 'to' end, seen from the 'from' end.
            '''

        })
    '''
    Resistance between the 'from' and the 'to' end, seen from the 'from'
    end.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero-sequence resistance between the 'from' and the 'to' end, seen from
            the 'from' end.
            '''

        })
    '''
    Zero-sequence resistance between the 'from' and the 'to' end, seen
    from the 'from' end.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance between the 'from' and the 'to' end, seen from the 'from' end.
            '''

        })
    '''
    Reactance between the 'from' and the 'to' end, seen from the 'from'
    end.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero-sequence reactance between the 'from' and the 'to' end, seen from
            the 'from' end.
            '''

        })
    '''
    Zero-sequence reactance between the 'from' and the 'to' end, seen from
    the 'from' end.
    '''

    FromTransformerEnd: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.FromMeshImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            From end this mesh impedance is connected to. It determines the voltage
            reference.
            '''

        })
    '''
    From end this mesh impedance is connected to. It determines the voltage
    reference.
    '''

    FromTransformerEndInfo: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.FromMeshImpedances',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            'from' transformer end datasheet this mesh impedance is calculated from.
            It determines the voltage reference.
            '''

        })
    '''
    'from' transformer end datasheet this mesh impedance is calculated
    from. It determines the voltage reference.
    '''

    ToTransformerEnd: list[TransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEnd.ToMeshImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            All transformer ends this mesh impedance is connected to.
            '''

        })
    '''
    All transformer ends this mesh impedance is connected to.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class TransformerStarImpedance(IdentifiedObject):
    '''
    Transformer star impedance (Pi-model) that accurately reflects impedance
    for transformers with 2 or 3 windings. For transformers with 4 or more
    windings, TransformerMeshImpedance class shall be used.
    For transmission networks use PowerTransformerEnd impedances (r, r0, x,
    x0, b, b0, g and g0).
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the transformer end.
            '''

        })
    '''
    Resistance of the transformer end.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance of the transformer end.
            '''

        })
    '''
    Zero sequence series resistance of the transformer end.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance of the transformer end.
            '''

        })
    '''
    Positive sequence series reactance of the transformer end.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance of the transformer end.
            '''

        })
    '''
    Zero sequence series reactance of the transformer end.
    '''

    TransformerEndInfo: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.TransformerStarImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end datasheet used to calculate this transformer star impedance.
            '''

        })
    '''
    Transformer end datasheet used to calculate this transformer star impedance.
    '''

    TransformerEnd: list[TransformerEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEnd.StarImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All transformer ends having this star impedance.
            '''

        })
    '''
    All transformer ends having this star impedance.
    '''

    TransformerEndInfo: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.TransformerStarImpedance',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Transformer end datasheet used to calculate this transformer star impedance.
            '''

        })
    '''
    Transformer end datasheet used to calculate this transformer star impedance.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerTest(IdentifiedObject):
    '''
    Test result for transformer ends, such as short-circuit, open-circuit (excitation)
    or no-load test.
    '''

    basePower: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Base power at which the tests are conducted, usually equal to the rateds
            of one of the involved transformer ends.
            '''

        })
    '''
    Base power at which the tests are conducted, usually equal to the rateds
    of one of the involved transformer ends.
    '''

    temperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Temperature at which the test is conducted.
            '''

        })
    '''
    Temperature at which the test is conducted.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class NoLoadTest(TransformerTest):
    '''
    No-load test results determine core admittance parameters. They include
    exciting current and core loss measurements from applying voltage to one
    winding. The excitation may be positive sequence or zero sequence. The
    test may be repeated at different voltages to measure saturation.
    '''

    energisedEndVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage applied to the winding (end) during test.
            '''

        })
    '''
    Voltage applied to the winding (end) during test.
    '''

    excitingCurrent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exciting current measured from a positive-sequence or single-phase excitation
            test.
            '''

        })
    '''
    Exciting current measured from a positive-sequence or single-phase
    excitation test.
    '''

    excitingCurrentZero: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Exciting current measured from a zero-sequence open-circuit excitation
            test.
            '''

        })
    '''
    Exciting current measured from a zero-sequence open-circuit excitation
    test.
    '''

    loss: Optional[ float | KiloActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Losses measured from a positive-sequence or single-phase excitation test.
            '''

        })
    '''
    Losses measured from a positive-sequence or single-phase excitation
    test.
    '''

    lossZero: Optional[ float | KiloActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Losses measured from a zero-sequence excitation test.
            '''

        })
    '''
    Losses measured from a zero-sequence excitation test.
    '''

    EnergisedEnd: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.EnergisedEndNoLoadTests',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end that current is applied to in this no-load test.
            '''

        })
    '''
    Transformer end that current is applied to in this no-load test.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class OpenCircuitTest(TransformerTest):
    '''
    Open-circuit test results verify winding turn ratios and phase shifts.
    They include induced voltage and phase shift measurements on open-circuit
    windings, with voltage applied to the energised end. For three-phase windings,
    the excitation can be a positive sequence (the default) or a zero sequence.
    '''

    energisedEndStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step number for the energised end of the test pair.
            '''

        })
    '''
    Tap step number for the energised end of the test pair.
    '''

    openEndStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step number for the open end of the test pair.
            '''

        })
    '''
    Tap step number for the open end of the test pair.
    '''

    energisedEndVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage applied to the winding (end) during test.
            '''

        })
    '''
    Voltage applied to the winding (end) during test.
    '''

    openEndVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage measured at the open-circuited end, with the energised end set
            to rated voltage and all other ends open.
            '''

        })
    '''
    Voltage measured at the open-circuited end, with the energised end
    set to rated voltage and all other ends open.
    '''

    phaseShift: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase shift measured at the open end with the energised end set to rated
            voltage and all other ends open.
            '''

        })
    '''
    Phase shift measured at the open end with the energised end set to
    rated voltage and all other ends open.
    '''

    EnergisedEnd: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.EnergisedEndOpenCircuitTests',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end that current is applied to in this open-circuit test.
            '''

        })
    '''
    Transformer end that current is applied to in this open-circuit test.
    '''

    OpenEnd: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.OpenEndOpenCircuitTests',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end measured for induced voltage and angle in this open-circuit
            test.
            '''

        })
    '''
    Transformer end measured for induced voltage and angle in this open-circuit
    test.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class ShortCircuitTest(TransformerTest):
    '''
    Short-circuit test results determine mesh impedance parameters. They include
    load losses and leakage impedances. For three-phase windings, the excitation
    can be a positive sequence (the default) or a zero sequence. There shall
    be at least one grounded winding.
    '''

    energisedEndStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step number for the energised end of the test pair.
            '''

        })
    '''
    Tap step number for the energised end of the test pair.
    '''

    groundedEndStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Tap step number for the grounded end of the test pair.
            '''

        })
    '''
    Tap step number for the grounded end of the test pair.
    '''

    current: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Short circuit current..
            '''

        })
    '''
    Short circuit current..
    '''

    leakageImpedance: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Leakage impedance measured from a positive-sequence or single-phase short-circuit
            test.
            '''

        })
    '''
    Leakage impedance measured from a positive-sequence or single-phase
    short-circuit test.
    '''

    leakageImpedanceZero: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Leakage impedance measured from a zero-sequence short-circuit test.
            '''

        })
    '''
    Leakage impedance measured from a zero-sequence short-circuit test.
    '''

    loss: Optional[ float | KiloActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Load losses from a positive-sequence or single-phase short-circuit test.
            '''

        })
    '''
    Load losses from a positive-sequence or single-phase short-circuit
    test.
    '''

    lossZero: Optional[ float | KiloActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Load losses from a zero-sequence short-circuit test.
            '''

        })
    '''
    Load losses from a zero-sequence short-circuit test.
    '''

    power: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Short circuit apparent power.
            '''

        })
    '''
    Short circuit apparent power.
    '''

    voltage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Short circuit voltage..
            '''

        })
    '''
    Short circuit voltage..
    '''

    EnergisedEnd: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.EnergisedEndShortCircuitTests',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transformer end that voltage is applied to in this short-circuit test.
            The test voltage is chosen to induce rated current in the energised end.
            '''

        })
    '''
    Transformer end that voltage is applied to in this short-circuit test.
    The test voltage is chosen to induce rated current in the energised
    end.
    '''

    GroundedEnds: list[TransformerEndInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEndInfo.GroundedEndShortCircuitTests',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            All ends short-circuited in this short-circuit test.
            '''

        })
    '''
    All ends short-circuited in this short-circuit test.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UsagePoint(IdentifiedObject):
    '''
    Logical or physical point in the network to which readings or events may
    be attributed. Used at the place where a physical or virtual meter may
    be located; however, it is not required that a meter be present.
    '''

    phaseCode: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase code. Number of wires and specific nominal phases can be deduced
            from enumeration literal values. For example, ABCN is three-phase, four-wire,
            s12n (splitSecondary12N) is single-phase, three-wire, and s1n and s2n are
            single-phase, two-wire.
            '''

        })
    '''
    Phase code. Number of wires and specific nominal phases can be deduced
    from enumeration literal values. For example, ABCN is three-phase,
    four-wire, s12n (splitSecondary12N) is single-phase, three-wire, and
    s1n and s2n are single-phase, two-wire.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.UsagePoint',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedUsagePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this usage point.
            '''

        })
    '''
    All configuration events created for this usage point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VSCDynamics(IdentifiedObject):
    '''
    VSC function block whose behaviour is described by reference to a standard
    model <font color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    VsConverter: Optional[VsConverter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VsConverter.VSCDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Voltage source converter to which voltage source converter dynamics model
            applies.
            '''

        })
    '''
    Voltage source converter to which voltage source converter dynamics
    model applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ValueAliasSet(IdentifiedObject):
    '''
    Describes the translation of a set of values into a name and is intendend
    to facilitate custom translations. Each ValueAliasSet has a name, description
    etc. A specific Measurement may represent a discrete state like Open, Closed,
    Intermediate etc. This requires a translation from the MeasurementValue.value
    number to a string, e.g. 0-&gt;"Invalid", 1-&gt;"Open", 2-&gt;"Closed",
    3-&gt;"Intermediate". Each ValueToAlias member in ValueAliasSet.Value describe
    a mapping for one particular value to a name.
    '''

    Commands: list[Command] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Command.ValueAliasSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Commands using the set for translation.
            '''

        })
    '''
    The Commands using the set for translation.
    '''

    Discretes: list[Discrete] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Discrete.ValueAliasSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Measurements using the set for translation.
            '''

        })
    '''
    The Measurements using the set for translation.
    '''

    RaiseLowerCommands: list[RaiseLowerCommand] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RaiseLowerCommand.ValueAliasSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Commands using the set for translation.
            '''

        })
    '''
    The Commands using the set for translation.
    '''

    Values: list[ValueToAlias] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ValueToAlias.ValueAliasSet',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The ValueToAlias mappings included in the set.
            '''

        })
    '''
    The ValueToAlias mappings included in the set.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ValueToAlias(IdentifiedObject):
    '''
    Describes the translation of one particular value into a name, e.g. 1 as
    "Open".
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The value that is mapped.
            '''

        })
    '''
    The value that is mapped.
    '''

    ValueAliasSet: Optional[ValueAliasSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ValueAliasSet.Values',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The ValueAliasSet having the ValueToAlias mappings.
            '''

        })
    '''
    The ValueAliasSet having the ValueToAlias mappings.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VisibilityLayer(IdentifiedObject):
    '''
    Layers are typically used for grouping diagram objects according to themes
    and scales. Themes are used to display or hide certain information (e.g.,
    lakes, borders), while scales are used for hiding or displaying information
    depending on the current zoom level (hide text when it is too small to
    be read, or when it exceeds the screen size). This is also called de-cluttering.
    CIM based graphics exchange supports an m:n relationship between diagram
    objects and layers. The importing system shall convert an m:n case into
    an appropriate 1:n representation if the importing system does not support
    m:n.
    '''

    drawingOrder: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The drawing order for this layer. The higher the number, the later the
            layer and the objects within it are rendered.
            '''

        })
    '''
    The drawing order for this layer. The higher the number, the later
    the layer and the objects within it are rendered.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageInjectionControlFunction(IdentifiedObject):
    '''
    Voltage injection control function is a function block that calculates
    the operating point of the controlled equipment to achieve the target voltage
    injection. The controlled point is the Terminal with sequenceNumber =1.
    '''

    targetValue: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Target value for the voltage that the control function is calculating to
            achieve by adjusting the operational setting to the controlled equipment.
            '''

        })
    '''
    Target value for the voltage that the control function is calculating
    to achieve by adjusting the operational setting to the controlled equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WeccREPCC(IdentifiedObject):
    '''
    WECC Plant controller model (REPC_C).
    Reference: WECC REMWG, Proposal for new features for the renewable energy
    system generic models, 2021.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.WeccREPCC',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Terminal where the frequency is measured.
            '''

        })
    '''
    The Terminal where the frequency is measured.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'WECCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WeccWTGIBFFRA(IdentifiedObject):
    '''
    WECC WTGIBFFR_A model. Auxiliary control model representing the so-called
    inertial-based fast-frequency response (IBFFR) controls.
    Reference: WECC REMWG, Proposal for new features for the renewable energy
    system generic models, 2021.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.WeccWTGIBFFRA',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The Terminal where the frequency is measured.
            '''

        })
    '''
    The Terminal where the frequency is measured.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'WECCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPlantDynamics(IdentifiedObject):
    '''
    Parent class supporting relationships to wind turbines type 3 and type
    4 and wind plant IEC and user-defined wind plants including their control
    models.
    '''

    PointOfConnection: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.WindPlantDynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Point of connection for this wind plant.
            '''

        })
    '''
    Point of connection for this wind plant.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType3or4Dynamics(IdentifiedObject):
    '''
    Parent class supporting relationships to wind turbines type 3 and type
    4 and wind plant including their control models.
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.WindTurbineType3or4Dynamics',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The power electronics connection associated with this wind turbine type
            3 or type 4 dynamics model.
            '''

        })
    '''
    The power electronics connection associated with this wind turbine
    type 3 or type 4 dynamics model.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WirePosition(IdentifiedObject):
    '''
    Identification, spacing and configuration of the wires of a conductor with
    respect to a structure.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Numbering for wires on a WireSpacingInfo. Neutrals should be numbered last.
            '''

        })
    '''
    Numbering for wires on a WireSpacingInfo. Neutrals should be numbered
    last.
    '''

    xCoord: Optional[ float | Displacement ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Signed horizontal distance from the wire at this position to a common reference
            point.
            '''

        })
    '''
    Signed horizontal distance from the wire at this position to a common
    reference point.
    '''

    yCoord: Optional[ float | Displacement ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Signed vertical distance from the wire at this position: above ground (positive
            value) or burial depth below ground (negative value).
            '''

        })
    '''
    Signed vertical distance from the wire at this position: above ground
    (positive value) or burial depth below ground (negative value).
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute add',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The phase connection of the wire at both ends.
            '''

        })
    '''
    The phase connection of the wire at both ends.
    '''

    WireSpacingInfo: Optional[WireSpacingInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireSpacingInfo.WirePositions',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Wire spacing data this wire position belongs to.
            '''

        })
    '''
    Wire spacing data this wire position belongs to.
    '''

    WirePhaseInfo: list[WirePhaseInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePhaseInfo.WirePosition',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            Wire phase information for this wire position.
            '''

        })
    '''
    Wire phase information for this wire position.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkCapability(IdentifiedObject):
    '''
    A capability of a crew that is required in order to perform a specified
    task.
    Examples include:
    <ul>
    <li>Hot Construction - High Voltage</li>
    <li>Hot Construction - Medium Voltage</li>
    <li>Hot Construction - Low Voltage</li>
    <li>Cold Construction</li>
    <li>Overhead Construction</li>
    <li>Underground Construction</li>
    <li>Cable Pulling</li>
    </ul>
    Examples may be broken down into lower level abilities, depending on the
    needs of the particular utility.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.WorkCapability',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ImpedanceTapChangerTablePoint(Identity):
    '''
    Describes each tap step in the impedance tap changer tabular curve.
    '''

    ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage at the tap step divided by rated voltage of the transformer
            end having the tap changer. Hence this is a value close to one. For example,
            if the ratio at step 1 is 1.01, and the rated voltage of the transformer
            end is 110kV, then the voltage obtained by setting the tap changer to step
            1 to is 111.1kV.
            '''

        })
    '''
    The voltage at the tap step divided by rated voltage of the transformer
    end having the tap changer. Hence this is a value close to one. For
    example, if the ratio at step 1 is 1.01, and the rated voltage of the
    transformer end is 110kV, then the voltage obtained by setting the
    tap changer to step 1 to is 111.1kV.
    '''

    step: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap step.
            '''

        })
    '''
    The tap step.
    '''

    angle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The angle difference in degrees. A positive value indicates a positive
            angle variation from the Terminal at the PowerTransformerEnd, where the
            TapChanger is located, into the transformer.
            '''

        })
    '''
    The angle difference in degrees. A positive value indicates a positive
    angle variation from the Terminal at the PowerTransformerEnd, where
    the TapChanger is located, into the transformer.
    '''

    rEnd1: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The resistance deviation as a percentage of nominal value, r(nominal),
            for the winding with TransformerEnd.endNumber equal to 1. The actual reactance
            is calculated as follows: calculated resistance = r(nominal) * (1 + r(from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The resistance deviation as a percentage of nominal value, r(nominal),
    for the winding with TransformerEnd.endNumber equal to 1. The actual
    reactance is calculated as follows: calculated resistance = r(nominal)
    * (1 + r(from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    rEnd2: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The resistance deviation as a percentage of nominal value, r(nominal),
            for the winding with TransformerEnd.endNumber equal to 2. The actual reactance
            is calculated as follows: calculated resistance = r(nominal) * (1 + r(from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The resistance deviation as a percentage of nominal value, r(nominal),
    for the winding with TransformerEnd.endNumber equal to 2. The actual
    reactance is calculated as follows: calculated resistance = r(nominal)
    * (1 + r(from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    rEnd3: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The resistance deviation as a percentage of nominal value, r(nominal),
            for the winding with TransformerEnd.endNumber equal to 3. The actual reactance
            is calculated as follows: calculated resistance = r(nominal) * (1 + r(from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The resistance deviation as a percentage of nominal value, r(nominal),
    for the winding with TransformerEnd.endNumber equal to 3. The actual
    reactance is calculated as follows: calculated resistance = r(nominal)
    * (1 + r(from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    xEnd1: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The series reactance deviation as a percentage of nominal value, x(nominal),
            for the winding with TransformerEnd.endNumber equal to 1. The actual reactance
            is calculated as follows: calculated reactance = x(nominal) * (1 + x (from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The series reactance deviation as a percentage of nominal value, x(nominal),
    for the winding with TransformerEnd.endNumber equal to 1. The actual
    reactance is calculated as follows: calculated reactance = x(nominal)
    * (1 + x (from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    xEnd2: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The series reactance deviation as a percentage of nominal value, x(nominal),
            for the winding with TransformerEnd.endNumber equal to 2. The actual reactance
            is calculated as follows: calculated reactance = x(nominal) * (1 + x(from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The series reactance deviation as a percentage of nominal value, x(nominal),
    for the winding with TransformerEnd.endNumber equal to 2. The actual
    reactance is calculated as follows: calculated reactance = x(nominal)
    * (1 + x(from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    xEnd3: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The series reactance deviation as a percentage of nominal value, x(nominal),
            for the winding with TransformerEnd.endNumber equal to 3. The actual reactance
            is calculated as follows: calculated reactance = x(nominal) * (1 + x(from
            this class)/100). This model assumes the star impedance (pi model) form.
            Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The series reactance deviation as a percentage of nominal value, x(nominal),
    for the winding with TransformerEnd.endNumber equal to 3. The actual
    reactance is calculated as follows: calculated reactance = x(nominal)
    * (1 + x(from this class)/100). This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    ImpedanceTapChangerTable: Optional[ImpedanceTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ImpedanceTapChangerTable.ImpedanceTapChangerTablePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The table of this point.
            '''

        })
    '''
    The table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InverterCapabilities(Identity):
    '''
    Based on IEEE 1547-2018 Table 28:
    <i>Supported control mode functions</i>
    Indication of support for each control mode function
    '''

    isModeCapableActivePowerReactivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating in Active Power
            - Reactive Power (PQ) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating in Active Power
    - Reactive Power (PQ) mode.
    '''

    isModeCapableConstantPowerFactor: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating in Constant Power
            Factor (PF) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating in Constant
    Power Factor (PF) mode.
    '''

    isModeCapableConstantReactivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating in Constant Reactive
            Power (Q) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating in Constant
    Reactive Power (Q) mode.
    '''

    isModeCapableFrequencyActivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of Frequency Droop protection,
            also known as Frequency - Active Power (FP) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of Frequency Droop protection,
    also known as Frequency - Active Power (FP) mode.
    '''

    isModeCapableVoltageActivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating in Voltage - Active
            Power (VP) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating in Voltage -
    Active Power (VP) mode.
    '''

    isModeCapableVoltageReactivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating in Voltage - Reactive
            Power (VQ) mode.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating in Voltage -
    Reactive Power (VQ) mode.
    '''

    isProtectionCapableEnterServiceAfterTrip: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of Enter Service After Trip protection.
            '''

        })
    '''
    Flag to identify if the Device is capable of Enter Service After Trip
    protection.
    '''

    isProtectionCapableFrequencyTrip: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of Frequency Trip protection.
            '''

        })
    '''
    Flag to identify if the Device is capable of Frequency Trip protection.
    '''

    isProtectionCapableLimitActivePower: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of Limit Maximum Active Power
            protection.
            '''

        })
    '''
    Flag to identify if the Device is capable of Limit Maximum Active Power
    protection.
    '''

    isProtectionCapableMomentaryCessation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of Momentary Cessation (also
            known as Voltage Ride-Through) protection.
            '''

        })
    '''
    Flag to identify if the Device is capable of Momentary Cessation (also
    known as Voltage Ride-Through) protection.
    '''

    isProtectionCapableVoltageTrip: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Flag to identify if the Device is capable of operating with Voltage Trip
            protection.
            '''

        })
    '''
    Flag to identify if the Device is capable of operating with Voltage
    Trip protection.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    IntervalInfo: list[InverterInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InverterInfo.InverterCapabilites',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class IrregularTimePoint(Identity):
    '''
    TimePoints for a schedule where the time between the points varies.
    '''

    value1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The first value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The first value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    value2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The second value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The second value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    value3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The third value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The third value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    time: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time is relative to the schedule starting time.
            '''

        })
    '''
    The time is relative to the schedule starting time.
    '''

    IntervalSchedule: Optional[IrregularIntervalSchedule] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IrregularIntervalSchedule.TimePoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            An IrregularTimePoint belongs to an IrregularIntervalSchedule.
            '''

        })
    '''
    An IrregularTimePoint belongs to an IrregularIntervalSchedule.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadDistributionFactor(Identity):
    '''
    This class models the load distribution factors. This class should be used
    in one of two ways:
    Use it along with the AggregatedPnode and the IndividualPnode to show the
    distriubtion of each individual party
    OR
    Use it with Mkt_EnergyConsumer to represent the current MW/Mvar distribution
    within it's parnet load group.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.LoadDistributionFactor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class LocationAccess(Identity):
    '''
    Location access refers to the physical means or pathways by which a site,
    building, building space or other property can be reached from the road
    network. It typically including roads, driveways, entrances, or adjacent
    properties.
    '''

    access: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            General availability and functionality of pathways, roads, or other means
            that enable entry to and exit from a site, regardless of seasonal or environmental
            conditions.
            '''

        })
    '''
    General availability and functionality of pathways, roads, or other
    means that enable entry to and exit from a site, regardless of seasonal
    or environmental conditions.
    '''

    accessHazard: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Problems previously encountered when visiting or performing work at this
            location. Examples include: bad dog, violent customer, verbally abusive
            occupant, obstructions, safety hazards, etc.
            '''

        })
    '''
    Problems previously encountered when visiting or performing work at
    this location. Examples include: bad dog, violent customer, verbally
    abusive occupant, obstructions, safety hazards, etc.
    '''

    accessMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Method for the service person to access this usage point location. For
            example, a description of where to obtain a key if the facility is unmanned
            and secured.
            '''

        })
    '''
    Method for the service person to access this usage point location.
    For example, a description of where to obtain a key if the facility
    is unmanned and secured.
    '''

    accessSummer: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Accessibility of a site specifically during the summer months, considering
            weather conditions, terrain, and maintenance schedules that may enhance
            or limit entry.
            '''

        })
    '''
    Accessibility of a site specifically during the summer months, considering
    weather conditions, terrain, and maintenance schedules that may enhance
    or limit entry.
    '''

    accessWinter: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Accessibility of a site during the winter months, accounting for seasonal
            challenges such as snow, ice, or reduced maintenance of pathways
            '''

        })
    '''
    Accessibility of a site during the winter months, accounting for seasonal
    challenges such as snow, ice, or reduced maintenance of pathways
    '''

    BuildingSpace: Optional[BuildingSpace] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BuildingSpace.LocationAccess',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.LocationAccess',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    BuildingSpace: Optional[BuildingSpace] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BuildingSpace.LocationAccess',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.LocationAccess',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MarketInvoice(Identity):
    '''
    A roll up of invoice line items. The whole invoice has a due date and amount
    to be paid, with information such as customer, banks etc. being obtained
    through associations. The invoice roll up is based on individual line items
    that each contain amounts and descriptions for specific services or products.
    '''

    dueDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Calculated date upon which the Invoice amount is due.
            '''

        })
    '''
    Calculated date upon which the Invoice amount is due.
    '''

    mailedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date on which the customer billing statement/invoice was printed/mailed.
            '''

        })
    '''
    Date on which the customer billing statement/invoice was printed/mailed.
    '''

    proForma: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if payment is to be paid by a Customer to accept a particular ErpQuote
            (with associated Design) and have work initiated, at which time an associated
            ErpInvoice should automatically be generated. EprPayment.subjectStatus
            satisfies terms specificed in the ErpQuote.
            '''

        })
    '''
    True if payment is to be paid by a Customer to accept a particular
    ErpQuote (with associated Design) and have work initiated, at which
    time an associated ErpInvoice should automatically be generated. EprPayment.subjectStatus
    satisfies terms specificed in the ErpQuote.
    '''

    referenceNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of an invoice to be reference by this invoice.
            '''

        })
    '''
    Number of an invoice to be reference by this invoice.
    '''

    transactionDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time when the invoice is issued.
            '''

        })
    '''
    Date and time when the invoice is issued.
    '''

    transferType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of invoice transfer.
            '''

        })
    '''
    Type of invoice transfer.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total amount due on this invoice based on line items and applicable adjustments.
            '''

        })
    '''
    Total amount due on this invoice based on line items and applicable
    adjustments.
    '''

    billMediaKind: Optional[MktBillMediaKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of media by which the CustomerBillingInfo was delivered.
            '''

        })
    '''
    Kind of media by which the CustomerBillingInfo was delivered.
    '''

    kind: Optional[MktAccountKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of invoice (default is 'sales').
            '''

        })
    '''
    Kind of invoice (default is 'sales').
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MarketInvoiceLineItems: list[MarketInvoiceLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketInvoiceLineItem.MarketInvoice',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MarketInvoiceLineItem(Identity):
    '''
    An individual line item on an invoice.
    '''

    glAccount: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            General Ledger account code, shall be a valid combination.
            '''

        })
    '''
    General Ledger account code, shall be a valid combination.
    '''

    glDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time line item will be posted to the General Ledger.
            '''

        })
    '''
    Date and time line item will be posted to the General Ledger.
    '''

    lineAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Amount due for this line item.
            '''

        })
    '''
    Amount due for this line item.
    '''

    lineNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Line item number on invoice statement.
            '''

        })
    '''
    Line item number on invoice statement.
    '''

    lineVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Version number of the bill run.
            '''

        })
    '''
    Version number of the bill run.
    '''

    netAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Net line item charge amount.
            '''

        })
    '''
    Net line item charge amount.
    '''

    previousAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Previous line item charge amount.
            '''

        })
    '''
    Previous line item charge amount.
    '''

    kind: Optional[MktInvoiceLineItemKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of line item.
            '''

        })
    '''
    Kind of line item.
    '''

    billPeriod: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Bill period for the line item.
            '''

        })
    '''
    Bill period for the line item.
    '''

    ContainerMarketInvoiceLineItem: Optional[MarketInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketInvoiceLineItem.ComponentMarketInvoiceLineItems',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketInvoice: Optional[MarketInvoice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketInvoice.MarketInvoiceLineItems',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    ComponentMarketInvoiceLineItems: list[MarketInvoiceLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketInvoiceLineItem.ContainerMarketInvoiceLineItem',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MarketLedger(Identity):
    '''
    In accounting transactions, a ledger is a book containing accounts to which
    debits and credits are posted from journals, where transactions are initially
    recorded. Journal entries are periodically posted to the ledger. Ledger
    actual represents actual amounts by account within ledger within company
    or within business area. Actual amounts may be generated in a source application
    and then loaded to a specific ledger within the enterprise general ledger
    or budget application.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MarketLedgerEntries: list[MarketLedgerEntry] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketLedgerEntry.MarketLedger',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MarketLedgerEntry(Identity):
    '''
    Details of an individual entry in a ledger, which was posted from a journal
    on the posted date.
    '''

    accountID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Account identifier for this entry.
            '''

        })
    '''
    Account identifier for this entry.
    '''

    postedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time this entry was posted to the ledger.
            '''

        })
    '''
    Date and time this entry was posted to the ledger.
    '''

    transactionDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time journal entry was recorded.
            '''

        })
    '''
    Date and time journal entry was recorded.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The amount of the debit or credit for this account.
            '''

        })
    '''
    The amount of the debit or credit for this account.
    '''

    accountKind: Optional[MktAccountKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Kind of account for this entry.
            '''

        })
    '''
    Kind of account for this entry.
    '''

    MarketLedger: Optional[MarketLedger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketLedger.MarketLedgerEntries',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of ledger entry.
            '''

        })
    '''
    Status of ledger entry.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketRegionResults(Identity):
    '''
    Provides all Region Ancillary Service results for the DA and RT markets.
    The specific data is commodity type (Regulation Up, Regulation Down, Spinning
    Reserve, Non-spinning Reserve, or Total Up reserves) based for the cleared
    MW, cleared price, and total capacity required for the region.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.MarketRegionResults',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MarketResults(Identity):
    '''
    This class holds elements that are single values for the entire market
    time horizon. That is, for the Day Ahead market, there is 1 value for each
    element, not hourly based. Is a summary of the market run.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    EnergyMarket: Optional[EnergyMarket] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyMarket.MarketResults',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MeterInfo(Identity):
    '''
    Datasheet of a smart meter, possibly integrating other metering functions
    '''

    electricMetering: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if electric metering function is supported.
            '''

        })
    '''
    True if electric metering function is supported.
    '''

    gasMetering: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if gas metering function is supported.
            '''

        })
    '''
    True if gas metering function is supported.
    '''

    lastGasp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending the notification ("last gasp") of
            voltage loss event.
            '''

        })
    '''
    True if a meter is capable of sending the notification ("last gasp")
    of voltage loss event.
    '''

    measurementPoll: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of remote checking ("poll") of its measurements.
            '''

        })
    '''
    True if a meter is capable of remote checking ("poll") of its measurements.
    '''

    measurementUnsolicited: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending unsolicited measurement readings.
            '''

        })
    '''
    True if a meter is capable of sending unsolicited measurement readings.
    '''

    outageHistory: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if outage history function is supported.
            '''

        })
    '''
    True if outage history function is supported.
    '''

    overVoltage: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending the notification of over voltage
            event.
            '''

        })
    '''
    True if a meter is capable of sending the notification of over voltage
    event.
    '''

    overVoltageRTN: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending a notification when an over voltage
            returns to normal.
            '''

        })
    '''
    True if a meter is capable of sending a notification when an over voltage
    returns to normal.
    '''

    pingStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of remote checking ("ping") of its energization
            status.
            '''

        })
    '''
    True if a meter is capable of remote checking ("ping") of its energization
    status.
    '''

    powerOnNotification: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending the notification of reenergization
            event.
            '''

        })
    '''
    True if a meter is capable of sending the notification of reenergization
    event.
    '''

    pricingInfo: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if pricing information is supported.
            '''

        })
    '''
    True if pricing information is supported.
    '''

    registerCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The number of registers associated with a meter.
            '''

        })
    '''
    The number of registers associated with a meter.
    '''

    reverseFlow: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if reverse flow function is supported.
            '''

        })
    '''
    True if reverse flow function is supported.
    '''

    underVoltage: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending the notification of under voltage
            event.
            '''

        })
    '''
    True if a meter is capable of sending the notification of under voltage
    event.
    '''

    underVoltageRTN: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if a meter is capable of sending a notification when an under voltage
            returns to normal.
            '''

        })
    '''
    True if a meter is capable of sending a notification when an under
    voltage returns to normal.
    '''

    waterMetering: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'moved Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if water metering function is supported.
            '''

        })
    '''
    True if water metering function is supported.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Name(Identity):
    '''
    The Name class, in possible combination with a name type and a naming authority
    provides the means to define any number of names or alternative identifiers
    for an object.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    language: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Shall be specified as an IETF BCP 47 language tag (e.g. en-US). Applies
            to the Name.name attribute.
            IETF language tags combine subtags from other standards such as ISO 639,
            ISO 15924, ISO 3166-1, and UN M.49. The tag structure has been standardized
            by the IETF in Best Current Practice (BCP) 47; the subtags are maintained
            by the IANA Language Subtag Registry.
            '''

        })
    '''
    Shall be specified as an IETF BCP 47 language tag (e.g. en-US). Applies
    to the Name.name attribute.
    IETF language tags combine subtags from other standards such as ISO
    639, ISO 15924, ISO 3166-1, and UN M.49. The tag structure has been
    standardized by the IETF in Best Current Practice (BCP) 47; the subtags
    are maintained by the IANA Language Subtag Registry.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Any free text that used as a name or alternative identifier of the object.
            '''

        })
    '''
    Any free text that used as a name or alternative identifier of the
    object.
    '''

    NameType: Optional[NameType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NameType.Name',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of this name.
            '''

        })
    '''
    Type of this name.
    '''

    NamingAuthority: Optional[NamingAuthority] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NamingAuthority.Name',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Authority responsible for managing this name.
            '''

        })
    '''
    Authority responsible for managing this name.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NameType(Identity):
    '''
    Type of name. Possible values for attribute 'name' are implementation dependent
    but standard profiles may specify types. An enterprise may have multiple
    IT systems each having its own local name for the same object, e.g. a planning
    system may have different names from an EMS. An object may also have different
    names within the same IT system, e.g. localName as defined in CIM version
    14. The definition from CIM14 is:
    The localName is a human readable name of the object. It is a free text
    name local to a node in a naming hierarchy similar to a file directory
    structure. A power system related naming hierarchy may be: Substation,
    VoltageLevel, Equipment etc. Children of the same parent in such a hierarchy
    have names that typically are unique among them.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description of the name type.
            '''

        })
    '''
    Description of the name type.
    '''

    NamingAuthority: Optional[NamingAuthority] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NamingAuthority.NameType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Authority responsible for managing this name type.
            '''

        })
    '''
    Authority responsible for managing this name type.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Name: list[Name] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Name.NameType',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All names of this type.
            '''

        })
    '''
    All names of this type.
    '''

@dataclass(repr=False)
class NamingAuthority(Identity):
    '''
    Authority responsible for creation and management of names of a given name
    type and/or name; typically an organization or an enterprise system.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Description of the naming authority.
            '''

        })
    '''
    Description of the naming authority.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Name: list[Name] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Name.NamingAuthority',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All names managed by this authority.
            '''

        })
    '''
    All names managed by this authority.
    '''

    NameType: list[NameType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NameType.NamingAuthority',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All name types managed by this authority.
            '''

        })
    '''
    All name types managed by this authority.
    '''

@dataclass(repr=False)
class NonlinearShuntCompensatorPhasePoint(Identity):
    '''
    A per phase non linear shunt compensator bank or section admittance value.
    The number of NonlinearShuntCompensatorPhasePoint instances associated
    with a NonlinearShuntCompensatorPhase shall be equal to ShuntCompensatorPhase.maximumSections.
    ShuntCompensator.sections shall only be set to one of the NonlinearShuntCompensatorPhasePoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompensatorPhasePoint-s.
    '''

    sectionNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The number of the section.
            '''

        })
    '''
    The number of the section.
    '''

    bTotal: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total positive sequence shunt (charging) susceptance at section noted by
            sectionNumber.
            '''

        })
    '''
    Total positive sequence shunt (charging) susceptance at section noted
    by sectionNumber.
    '''

    gTotal: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total positive sequence shunt (charging) conductance at section noted by
            sectionNumber.
            '''

        })
    '''
    Total positive sequence shunt (charging) conductance at section noted
    by sectionNumber.
    '''

    NonlinearShuntCompensatorPhase: Optional[NonlinearShuntCompensatorPhase] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NonlinearShuntCompensatorPhase.NonlinearShuntCompensatorPhasePoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Non-linear shunt compensator phase owning this point.
            '''

        })
    '''
    Non-linear shunt compensator phase owning this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NonlinearShuntCompensatorPoint(Identity):
    '''
    A non linear shunt compensator bank or section admittance value. The number
    of NonlinearShuntCompensatorPoint instances associated with a NonlinearShuntCompensator
    shall be equal to ShuntCompensator.maximumSections. ShuntCompensator.sections
    shall only be set to one of the NonlinearShuntCompensatorPoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompensatorPoint-s.
    '''

    sectionNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The number of the section.
            '''

        })
    '''
    The number of the section.
    '''

    b0Total: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total zero sequence shunt (charging) susceptance at section noted by sectionNumber.
            '''

        })
    '''
    Total zero sequence shunt (charging) susceptance at section noted by
    sectionNumber.
    '''

    bTotal: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total positive sequence shunt (charging) susceptance at section noted by
            sectionNumber.
            '''

        })
    '''
    Total positive sequence shunt (charging) susceptance at section noted
    by sectionNumber.
    '''

    g0Total: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total zero sequence shunt (charging) conductance at section noted by sectionNumber.
            '''

        })
    '''
    Total zero sequence shunt (charging) conductance at section noted by
    sectionNumber.
    '''

    gTotal: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Total positive sequence shunt (charging) conductance at section noted by
            sectionNumber.
            '''

        })
    '''
    Total positive sequence shunt (charging) conductance at section noted
    by sectionNumber.
    '''

    NonlinearShuntCompensator: Optional[NonlinearShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NonlinearShuntCompensator.NonlinearShuntCompensatorPoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Non-linear shunt compensator owning this point.
            '''

        })
    '''
    Non-linear shunt compensator owning this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ObjectType(Identity):
    '''
    Identifies the specialised type of an object when the instance object is
    serialised using a generalised class. It may be useful when the object
    type is not otherwise included in the exchange. For example, a Meter may
    be serialised as an EndDevice in message exchanges and need to have the
    ObjectType.type be specified as 'Meter' to provide context to the message
    receiver.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The specialised type of an object when the instance object is serialised
            using a generalised class. For example, a Meter being serialised as an
            EndDevice in a message exchange should have the type attribute specified
            as 'Meter'.
            '''

        })
    '''
    The specialised type of an object when the instance object is serialised
    using a generalised class. For example, a Meter being serialised as
    an EndDevice in a message exchange should have the type attribute specified
    as 'Meter'.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperatingShare(Identity):
    '''
    Specifies the operations contract relationship between a power system resource
    and a contract participant.
    '''

    percentage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Percentage operational ownership between the pair (power system resource
            and operating participant) associated with this share. The total percentage
            ownership for a power system resource should add to 100%.
            '''

        })
    '''
    Percentage operational ownership between the pair (power system resource
    and operating participant) associated with this share. The total percentage
    ownership for a power system resource should add to 100%.
    '''

    OperatingParticipant: Optional[OperatingParticipant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperatingParticipant.OperatingShare',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The operating participant having this share with the associated power system
            resource.
            '''

        })
    '''
    The operating participant having this share with the associated power
    system resource.
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.OperatingShare',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The power system resource to which the share applies.
            '''

        })
    '''
    The power system resource to which the share applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Operator(Identity):
    '''
    Control room operator.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PhaseImpedanceData(Identity):
    '''
    Per length phase impedance matrix entry describes impedance and conductance
    matrix element values for a specific row and column of the matrix.
    The phases to which each entry applies can be determined by means of the
    row and column attributes which bind to a sequence number provided in either
    ACLineSegmentPhase or WirePosition (which also specify phase). Due to physical
    symmetry that is reflected in the matrix, only the lower triangle of the
    matrix is populated with the row and column method. That is, the column
    attribute is always less than or equal to the row attribute.
    '''

    column: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The matrix entry's column number has a range of possible values from 1
            to the conductor count of the matrix, but due to symmetry, only entries
            in the lower triangle (including diagonal) of the matrix need be defined.
            Column number binds to the sequence number in either ACLineSegmentPhase
            or WirePosition, which then identifies the phase for this entry.
            '''

        })
    '''
    The matrix entry's column number has a range of possible values from
    1 to the conductor count of the matrix, but due to symmetry, only entries
    in the lower triangle (including diagonal) of the matrix need be defined.
    Column number binds to the sequence number in either ACLineSegmentPhase
    or WirePosition, which then identifies the phase for this entry.
    '''

    row: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The matrix entry's row number has a range of possible values from 1 to
            the conductor count of the matrix, but due to symmetry, only entries in
            the lower triangle (including diagonal) of the matrix need be defined.
            Row number binds to the sequence number in either ACLineSegmentPhase or
            WirePosition, which then identifies the phase for this entry.
            '''

        })
    '''
    The matrix entry's row number has a range of possible values from 1
    to the conductor count of the matrix, but due to symmetry, only entries
    in the lower triangle (including diagonal) of the matrix need be defined.
    Row number binds to the sequence number in either ACLineSegmentPhase
    or WirePosition, which then identifies the phase for this entry.
    '''

    b: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Susceptance matrix entry value, per length of unit.
            '''

        })
    '''
    Susceptance matrix entry value, per length of unit.
    '''

    g: Optional[ float | ConductancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductance matrix entry value, per length of unit.
            '''

        })
    '''
    Conductance matrix entry value, per length of unit.
    '''

    r: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance matrix entry value, per length of unit.
            '''

        })
    '''
    Resistance matrix entry value, per length of unit.
    '''

    x: Optional[ float | ReactancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance matrix entry value, per length of unit.
            '''

        })
    '''
    Reactance matrix entry value, per length of unit.
    '''

    fromPhase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Refer to the class description.
            '''

        })
    '''
    Refer to the class description.
    '''

    toPhase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Refer to the class description.
            '''

        })
    '''
    Refer to the class description.
    '''

    PhaseImpedance: Optional[PerLengthPhaseImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PerLengthPhaseImpedance.PhaseImpedanceData',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductor phase impedance to which this data belongs.
            '''

        })
    '''
    Conductor phase impedance to which this data belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseImpedanceData1(Identity):
    '''
    Per length phase impedance matrix entry describes impedance and conductance
    matrix element values for a specific row and column of the matrix.
    The phases to which each entry applies can be determined by means of the
    row and column attributes which bind to a sequence number provided in either
    ACLineSegmentPhase or WirePosition (which also specify phase). Due to physical
    symmetry that is reflected in the matrix, only the lower triangle of the
    matrix is populated with the row and column method. That is, the column
    attribute is always less than or equal to the row attribute.
    '''

    column: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The matrix entry's column number has a range of possible values from 1
            to the conductor count of the matrix, but due to symmetry, only entries
            in the lower triangle (including diagonal) of the matrix need be defined.
            Column number binds to the sequence number in either ACLineSegmentPhase
            or WirePosition, which then identifies the phase for this entry.
            '''

        })
    '''
    The matrix entry's column number has a range of possible values from
    1 to the conductor count of the matrix, but due to symmetry, only entries
    in the lower triangle (including diagonal) of the matrix need be defined.
    Column number binds to the sequence number in either ACLineSegmentPhase
    or WirePosition, which then identifies the phase for this entry.
    '''

    row: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The matrix entry's row number has a range of possible values from 1 to
            the conductor count of the matrix, but due to symmetry, only entries in
            the lower triangle (including diagonal) of the matrix need be defined.
            Row number binds to the sequence number in either ACLineSegmentPhase or
            WirePosition, which then identifies the phase for this entry.
            '''

        })
    '''
    The matrix entry's row number has a range of possible values from 1
    to the conductor count of the matrix, but due to symmetry, only entries
    in the lower triangle (including diagonal) of the matrix need be defined.
    Row number binds to the sequence number in either ACLineSegmentPhase
    or WirePosition, which then identifies the phase for this entry.
    '''

    b: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Susceptance matrix entry value, per length of unit.
            '''

        })
    '''
    Susceptance matrix entry value, per length of unit.
    '''

    fromPhase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Refer to the class description.
            '''

        })
    '''
    Refer to the class description.
    '''

    g: Optional[ float | ConductancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductance matrix entry value, per length of unit.
            '''

        })
    '''
    Conductance matrix entry value, per length of unit.
    '''

    r: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Resistance matrix entry value, per length of unit.
            '''

        })
    '''
    Resistance matrix entry value, per length of unit.
    '''

    toPhase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Refer to the class description.
            '''

        })
    '''
    Refer to the class description.
    '''

    x: Optional[ float | ReactancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance matrix entry value, per length of unit.
            '''

        })
    '''
    Reactance matrix entry value, per length of unit.
    '''

    PhaseImpedance: Optional[PerLengthPhaseImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PerLengthPhaseImpedance.PhaseImpedanceData',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Conductor phase impedance to which this data belongs.
            '''

        })
    '''
    Conductor phase impedance to which this data belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PnodeDistributionFactor(Identity):
    '''
    This class allows SC to input different distribution factors for pricing
    node.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.ShadowExtension)
@stereotype(CIMStereotype.Concrete)
@dataclass(repr=False)
class PositionPoint(Identity):
    '''
    Set of spatial coordinates that determine a point, defined in the coordinate
    system specified in 'Location.CoordinateSystem'. Use a single position
    point instance to describe a point-oriented location. Use a sequence of
    position points to describe a line-oriented object (physical location of
    non-point oriented objects like cables or lines), or area of an object
    (like a substation or a geographical zone - in this case, have first and
    last position point with the same values).
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    xPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            X axis position.
            '''

        })
    '''
    X axis position.
    '''

    yPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Y axis position.
            '''

        })
    '''
    Y axis position.
    '''

    zPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Z axis position.
            '''

        })
    '''
    (if applicable) Z axis position.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.PositionPoints',
        'namespace': 'http://epri.com/gmdm/2025#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RelativeHeight: Optional[RelativeHeight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RelativeHeight.PositionPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Circle: list[Circle] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Circle.CircleCenterPositionPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The circle for which a point defining the center has been specified.
            '''

        })
    '''
    The circle for which a point defining the center has been specified.
    '''

@dataclass(repr=False)
class LinearCoordinate(PositionPoint):
    '''
    Specifies a point on a line segment, including a sequence number and bulge.
    To visualize the line segment, each linear coordinate is to be connected
    in the order specified by the sequence attribute. Each linear coordinate
    must have a sequence value.
    '''

    bulge: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Bulge is a factor that describes a curved line segment between two points.
            bulge=0 is a straight line: bulge=1 is a curve along the edge of a circle.
            A bulge can be associated only with the second point of a line segment.
            A negative bulge factor causes the line to bulge to the left as viewed
            from the first point to the second; a positive bulge causes the line to
            be curved to the right as viewed from the first point to the second.
            '''

        })
    '''
    Bulge is a factor that describes a curved line segment between two
    points. bulge=0 is a straight line: bulge=1 is a curve along the edge
    of a circle. A bulge can be associated only with the second point of
    a line segment. A negative bulge factor causes the line to bulge to
    the left as viewed from the first point to the second; a positive bulge
    causes the line to be curved to the right as viewed from the first
    point to the second.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The order in which linear coordinates are to be connected to form the line
            described. Sequence is required for all linear coordinates.
            '''

        })
    '''
    The order in which linear coordinates are to be connected to form the
    line described. Sequence is required for all linear coordinates.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PriceDescriptor(Identity):
    '''
    The price of a Commodity during a given time interval may change over time.
    For example, a price may be forecasted a year ahead, a month ahead, a day
    ahead, an hour ahead, and in real time; this is defined using the MarketType.
    Additionally a price may have one or more components. For example, a locational
    marginal energy price may be the arithmetic sum of the system price, the
    congestion price, and the loss price. The priceType enumeration is used
    determine if the price is the complete price (priceType="total") or one
    of potentially many constituent components.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The type of price being described. In general, the priceType will either
            be "total" to signify that the price is the price paid to buy or sell the
            commodity, sometimes referred to as an "all-in" price, or one of potentially
            many components.
            '''

        })
    '''
    The type of price being described. In general, the priceType will either
    be "total" to signify that the price is the price paid to buy or sell
    the commodity, sometimes referred to as an "all-in" price, or one of
    potentially many components.
    '''

    marketType: Optional[MarketType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The time frame for the price, using the standard conventions associated
            with the MarketType enumeration.
            '''

        })
    '''
    The time frame for the price, using the standard conventions associated
    with the MarketType enumeration.
    '''

    priceType: Optional[PriceTypeKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The "kind" of price being described. In general, the priceType will either
            be "total" to signify that the price is the price paid to buy or sell the
            commodity, sometimes referred to as an "all-in" price, or one of potentially
            many components.
            '''

        })
    '''
    The "kind" of price being described. In general, the priceType will
    either be "total" to signify that the price is the price paid to buy
    or sell the commodity, sometimes referred to as an "all-in" price,
    or one of potentially many components.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Priority(Identity):
    '''
    Priority definition.
    '''

    justification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Justification for 'rank'.
            '''

        })
    '''
    Justification for 'rank'.
    '''

    rank: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Priority level; lower number means high priority inside the same 'type'.
            '''

        })
    '''
    Priority level; lower number means high priority inside the same 'type'.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type describing 'rank'; e.g., high, emergency, etc.
            '''

        })
    '''
    Type describing 'rank'; e.g., high, emergency, etc.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Quality61850(Identity):
    '''
    Quality flags in this class are as defined in IEC 61850, except for estimatorReplaced,
    which has been included in this class for convenience.
    '''

    badReference: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value may be incorrect due to a reference being out of calibration.
            '''

        })
    '''
    Measurement value may be incorrect due to a reference being out of
    calibration.
    '''

    estimatorReplaced: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value has been replaced by State Estimator. estimatorReplaced is not an
            IEC 61850 quality bit but has been put in this class for convenience.
            '''

        })
    '''
    Value has been replaced by State Estimator. estimatorReplaced is not
    an IEC 61850 quality bit but has been put in this class for convenience.
    '''

    failure: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            This identifier indicates that a supervision function has detected an internal
            or external failure, e.g. communication failure.
            '''

        })
    '''
    This identifier indicates that a supervision function has detected
    an internal or external failure, e.g. communication failure.
    '''

    oldData: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value is old and possibly invalid, as it has not been successfully
            updated during a specified time interval.
            '''

        })
    '''
    Measurement value is old and possibly invalid, as it has not been successfully
    updated during a specified time interval.
    '''

    operatorBlocked: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value is blocked and hence unavailable for transmission.
            '''

        })
    '''
    Measurement value is blocked and hence unavailable for transmission.
    '''

    oscillatory: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            To prevent some overload of the communication it is sensible to detect
            and suppress oscillating (fast changing) binary inputs. If a signal changes
            in a defined time twice in the same direction (from 0 to 1 or from 1 to
            0) then oscillation is detected and the detail quality identifier "oscillatory"
            is set. If it is detected a configured numbers of transient changes could
            be passed by. In this time the validity status "questionable" is set. If
            after this defined numbers of changes the signal is still in the oscillating
            state the value shall be set either to the opposite state of the previous
            stable value or to a defined default value. In this case the validity status
            "questionable" is reset and "invalid" is set as long as the signal is oscillating.
            If it is configured such that no transient changes should be passed by
            then the validity status "invalid" is set immediately in addition to the
            detail quality identifier "oscillatory" (used for status information only).
            '''

        })
    '''
    To prevent some overload of the communication it is sensible to detect
    and suppress oscillating (fast changing) binary inputs. If a signal
    changes in a defined time twice in the same direction (from 0 to 1
    or from 1 to 0) then oscillation is detected and the detail quality
    identifier "oscillatory" is set. If it is detected a configured numbers
    of transient changes could be passed by. In this time the validity
    status "questionable" is set. If after this defined numbers of changes
    the signal is still in the oscillating state the value shall be set
    either to the opposite state of the previous stable value or to a defined
    default value. In this case the validity status "questionable" is reset
    and "invalid" is set as long as the signal is oscillating. If it is
    configured such that no transient changes should be passed by then
    the validity status "invalid" is set immediately in addition to the
    detail quality identifier "oscillatory" (used for status information
    only).
    '''

    outOfRange: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value is beyond a predefined range of value.
            '''

        })
    '''
    Measurement value is beyond a predefined range of value.
    '''

    overFlow: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value is beyond the capability of being represented properly.
            For example, a counter value overflows from maximum count back to a value
            of zero.
            '''

        })
    '''
    Measurement value is beyond the capability of being represented properly.
    For example, a counter value overflows from maximum count back to a
    value of zero.
    '''

    suspect: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A correlation function has detected that the value is not consistent with
            other values. Typically set by a network State Estimator.
            '''

        })
    '''
    A correlation function has detected that the value is not consistent
    with other values. Typically set by a network State Estimator.
    '''

    test: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Measurement value is transmitted for test purposes.
            '''

        })
    '''
    Measurement value is transmitted for test purposes.
    '''

    source: Optional[Source] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Source gives information related to the origin of a value. The value may
            be acquired from the process, defaulted or substituted.
            '''

        })
    '''
    Source gives information related to the origin of a value. The value
    may be acquired from the process, defaulted or substituted.
    '''

    validity: Optional[Validity] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Validity of the measurement value.
            '''

        })
    '''
    Validity of the measurement value.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class MeasurementValueQuality(Quality61850):
    '''
    Measurement quality flags. Bits 0-10 are defined for substation automation
    in IEC 61850-7-3. Bits 11-15 are reserved for future expansion by that
    document. Bits 16-31 are reserved for EMS applications.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.MeasurementValueQuality',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            A MeasurementValue has a MeasurementValueQuality associated with it.
            '''

        })
    '''
    A MeasurementValue has a MeasurementValueQuality associated with it.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.MeasurementValueQuality',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            A MeasurementValue has a MeasurementValueQuality associated with it.
            '''

        })
    '''
    A MeasurementValue has a MeasurementValueQuality associated with it.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegularTimePoint(Identity):
    '''
    Time point for a schedule where the time between the consecutive points
    is constant.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The position of the regular time point in the sequence. Note that time
            points don't have to be sequential, i.e. time points may be omitted. The
            actual time for a RegularTimePoint is computed by multiplying the associated
            regular interval schedule's time step with the regular time point sequence
            number and adding the associated schedules start time. To specify values
            for the start time, use sequence number 0. The sequence number cannot be
            negative.
            '''

        })
    '''
    The position of the regular time point in the sequence. Note that time
    points don't have to be sequential, i.e. time points may be omitted.
    The actual time for a RegularTimePoint is computed by multiplying the
    associated regular interval schedule's time step with the regular time
    point sequence number and adding the associated schedules start time.
    To specify values for the start time, use sequence number 0. The sequence
    number cannot be negative.
    '''

    value1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The first value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The first value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    value2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The second value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The second value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    value3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The third value at the time. The meaning of the value is defined by the
            derived type of the associated schedule.
            '''

        })
    '''
    The third value at the time. The meaning of the value is defined by
    the derived type of the associated schedule.
    '''

    IntervalSchedule: Optional[RegularIntervalSchedule] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegularIntervalSchedule.TimePoints',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Regular interval schedule containing this time point.
            '''

        })
    '''
    Regular interval schedule containing this time point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RelativeHeight(Identity):
    '''
    Used to specify the height of a physical object relative to a specified
    reference. The X, Y, and Z positions for a given point describe the position
    of a point in space expressed in appropriate coordinate system units. In
    general, the Z-position will represent the ground-level altitude above
    sea level for the point. At times it is beneficial to know the height above
    ground level at which a particular piece of equipment is installed. For
    example, the location of a pole-mounted weather station may be specified
    as �10 meters above ground level� by specifying a vertical offset of �10
    meters� and a vertical offset reference of �Ground Level�. Alternately,
    it could be specified as �1 meter below the top of the pole� using a vertical
    offset of �-1 meter� and vertical offset reference of �Pole Top�.
    '''

    verticalOffsetReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The height from which vertical offset is measured. Examples include �Ground
            Level�, �Pole Top�, �Tower Top�, etc.
            '''

        })
    '''
    The height from which vertical offset is measured. Examples include
    �Ground Level�, �Pole Top�, �Tower Top�, etc.
    '''

    verticalOffset: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Distance above (positive value) or below (negative value) the specified
            vertical offset reference.
            '''

        })
    '''
    Distance above (positive value) or below (negative value) the specified
    vertical offset reference.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    PositionPoint: list[PositionPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PositionPoint.RelativeHeight',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class ResourceCapacity(Identity):
    '''
    This class model the various capacities of a resource. A resource may have
    numbers of capacities related to operating, ancillary services, energy
    trade and so forth. Capacities may be defined for active power or reactive
    power.
    '''

    defaultCapacity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            default capacity
            '''

        })
    '''
    default capacity
    '''

    maximumCapacity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            maximum capacity
            '''

        })
    '''
    maximum capacity
    '''

    minimumCapacity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            minimum capacity
            '''

        })
    '''
    minimum capacity
    '''

    capacityType: Optional[ResourceCapacityType] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            capacity type
            The types are but not limited to:
            Regulation Up
            Regulation Dn
            Spinning Reserve
            Non-Spinning Reserve
            FOO capacity
            MOO capacity
            '''

        })
    '''
    capacity type
    The types are but not limited to:
    Regulation Up
    Regulation Dn
    Spinning Reserve
    Non-Spinning Reserve
    FOO capacity
    MOO capacity
    '''

    unitMultiplier: Optional[UnitMultiplier] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Unit Multiplier selection for the capacity values.
            '''

        })
    '''
    Unit Multiplier selection for the capacity values.
    '''

    unitSymbol: Optional[UnitSymbol] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Unit selection for the capacity values.
            '''

        })
    '''
    Unit selection for the capacity values.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceVerifiableCosts(Identity):
    '''
    This class is defined to describe the verifiable costs associated with
    a generation resource.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceVerifiableCosts',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class SSSCSimulationSettings(Identity):
    '''
    SSSC control simulation settings used by the algorithm for power flow calculations.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    isEstimateDLDVSensitive: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Defines if the estimate is considering the dI/dV sensitivity (true) instead
            of the secant algorithm (false).
            '''

        })
    '''
    Defines if the estimate is considering the dI/dV sensitivity (true)
    instead of the secant algorithm (false).
    '''

    maxIterations: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of iterations before claiming an open line condition. The
            algorithm uses it to assess if a line is really open by making sure low-currents
            are observed on various consecutive iterations.
            '''

        })
    '''
    Maximum number of iterations before claiming an open line condition.
    The algorithm uses it to assess if a line is really open by making
    sure low-currents are observed on various consecutive iterations.
    '''

    deltaX: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reactance delta for the solution algorithm. The solution �outer-loop� algorithm
            is based on a secant method which needs two initial points. The second
            point is calculated from the first one by either adding or subtracting
            this �delta�. The �seed� is assumed to be 0 ohms.
            '''

        })
    '''
    Reactance delta for the solution algorithm. The solution �outer-loop�
    algorithm is based on a secant method which needs two initial points.
    The second point is calculated from the first one by either adding
    or subtracting this �delta�. The �seed� is assumed to be 0 ohms.
    '''

    maxCorrectionX: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum value of the reactance correction applied between Iterations of
            the power flow calculation algorithm for the purpose of achieving control
            target value.
            '''

        })
    '''
    Maximum value of the reactance correction applied between Iterations
    of the power flow calculation algorithm for the purpose of achieving
    control target value.
    '''

    maxMismatch: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Maximum mismatch tolerance of voltage target value. If mismatch is lower,
            convergence is claimed. It is only used for voltageInjection and currentDroop
            control modes.
            '''

        })
    '''
    Maximum mismatch tolerance of voltage target value. If mismatch is
    lower, convergence is claimed. It is only used for voltageInjection
    and currentDroop control modes.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SSSCController: list[SSSCController] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SSSCController.SSSCSimulationSettings',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The controller that uses these simulation settings.
            '''

        })
    '''
    The controller that uses these simulation settings.
    '''

@dataclass(repr=False)
class ScheduledEventData(Identity):
    '''
    Schedule parameters for an activity that is to occur, is occurring, or
    has completed.
    '''

    estimatedWindow: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Estimated date and time for activity execution (with earliest possibility
            of activity initiation and latest possibility of activity completion).
            '''

        })
    '''
    Estimated date and time for activity execution (with earliest possibility
    of activity initiation and latest possibility of activity completion).
    '''

    InspectionDataSet: Optional[InspectionDataSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InspectionDataSet.AccordingToSchedules',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    requestedWindow: Optional[DateTimeInterval] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Requested date and time interval for activity execution.
            '''

        })
    '''
    Requested date and time interval for activity execution.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of the scheduled event.
            '''

        })
    '''
    Status of the scheduled event.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    ScheduledEvents: list[ScheduledEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledEvent.ScheduledEventData',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            All scheduled events with this specification.
            '''

        })
    '''
    All scheduled events with this specification.
    '''

@dataclass(repr=False)
class ShortCircuitResponse(Identity):
    '''
    In a short circuit circumstance, the device may be modeled as current source.
    The output current is a function of the voltage sensed at the terminal
    of the device, hence there can be different currents (and current angles
    relative to voltage) at different voltages.
    '''

    outputCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Current output based on voltage measured at the device terminal. The response
            is assumed to be the same for each phase if the device is multi-phase.
            '''

        })
    '''
    Current output based on voltage measured at the device terminal. The
    response is assumed to be the same for each phase if the device is
    multi-phase.
    '''

    outputCurrentAngle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Angle of the current output relative to the voltage
            '''

        })
    '''
    Angle of the current output relative to the voltage
    '''

    terminalVoltage: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Voltage measured at the device terminal
            '''

        })
    '''
    Voltage measured at the device terminal
    '''

    ConductingAssetInfo: Optional[ConductingAssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductingAssetInfo.ShortCircuitRespone',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Site(Identity):
    '''
    Area of ground on which work can be executed, organisation can be hosted,
    and building (including substation and power line) can be located.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PhysicalAddress: Optional[PhysicalAddress] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhysicalAddress.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Building: list[Building] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Building.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Cadastre: list[Cadastre] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Cadastre.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PhysicalAddress: Optional[PhysicalAddress] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhysicalAddress.Site',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class StateVariable(Identity):
    '''
    An abstract class for state variables.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvDCPowerFlow(StateVariable):
    '''
    State variable for power flow. Load convention is used for flow direction.
    This means flow out from the DCTopologicalNode into the equipment is positive.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power flow. Load sign convention is used, i.e. positive sign
            means flow out from a DCTopologicalNode (bus) into the conducting equipment.
            '''

        })
    '''
    The active power flow. Load sign convention is used, i.e. positive
    sign means flow out from a DCTopologicalNode (bus) into the conducting
    equipment.
    '''

    DCTerminal: Optional[DCTerminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTerminal.SvDCPowerFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC terminal associated with the DC power flow state variable.
            '''

        })
    '''
    The DC terminal associated with the DC power flow state variable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvDCVoltage(StateVariable):
    '''
    State variable for direct current voltage.
    '''

    v: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            State variable for direct current voltage.
            '''

        })
    '''
    State variable for direct current voltage.
    '''

    DCTopologicalNode: Optional[DCTopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTopologicalNode.SvDCVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The DC topological node associated with the DC voltage state.
            '''

        })
    '''
    The DC topological node associated with the DC voltage state.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvInjection(StateVariable):
    '''
    The SvInjection reports the calculated bus injection minus the sum of the
    terminal flows. The terminal flow is positive out from the bus (load sign
    convention) and bus injection has positive flow into the bus. SvInjection
    may have the remainder after state estimation or slack after power flow
    calculation.
    '''

    pInjection: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power mismatch between calculated injection and initial injection.
            Positive sign means injection into the TopologicalNode (bus).
            '''

        })
    '''
    The active power mismatch between calculated injection and initial
    injection. Positive sign means injection into the TopologicalNode (bus).
    '''

    qInjection: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactive power mismatch between calculated injection and initial injection.
            Positive sign means injection into the TopologicalNode (bus).
            '''

        })
    '''
    The reactive power mismatch between calculated injection and initial
    injection. Positive sign means injection into the TopologicalNode (bus).
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal phase at which the connection is applied. If missing, the
            injection is assumed to be balanced among non-neutral phases.
            '''

        })
    '''
    The terminal phase at which the connection is applied. If missing,
    the injection is assumed to be balanced among non-neutral phases.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.SvInjection',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The topological node associated with the flow injection state variable.
            '''

        })
    '''
    The topological node associated with the flow injection state variable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvPowerFlow(StateVariable):
    '''
    State variable for power flow. Load convention is used for flow direction.
    This means flow out from the TopologicalNode into the equipment is positive.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The active power flow. Load sign convention is used, i.e. positive sign
            means flow out from a TopologicalNode (bus) into the conducting equipment.
            '''

        })
    '''
    The active power flow. Load sign convention is used, i.e. positive
    sign means flow out from a TopologicalNode (bus) into the conducting
    equipment.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The reactive power flow. Load sign convention is used, i.e. positive sign
            means flow out from a TopologicalNode (bus) into the conducting equipment.
            '''

        })
    '''
    The reactive power flow. Load sign convention is used, i.e. positive
    sign means flow out from a TopologicalNode (bus) into the conducting
    equipment.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The individual phase of the flow. If unspecified, then assumed to be balanced
            among phases.
            '''

        })
    '''
    The individual phase of the flow. If unspecified, then assumed to be
    balanced among phases.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.SvPowerFlow',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal associated with the power flow state variable.
            '''

        })
    '''
    The terminal associated with the power flow state variable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvShuntCompensatorSections(StateVariable):
    '''
    State variable for the number of sections in service for a shunt compensator.
    '''

    sections: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The number of sections in service as a continuous variable. The attribute
            shall be a positive value or zero. To get integer value scale with ShuntCompensator.bPerSection.
            '''

        })
    '''
    The number of sections in service as a continuous variable. The attribute
    shall be a positive value or zero. To get integer value scale with
    ShuntCompensator.bPerSection.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal phase at which the connection is applied. If missing, the
            injection is assumed to be balanced among non-neutral phases.
            '''

        })
    '''
    The terminal phase at which the connection is applied. If missing,
    the injection is assumed to be balanced among non-neutral phases.
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.SvShuntCompensatorSections',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The shunt compensator for which the state applies.
            '''

        })
    '''
    The shunt compensator for which the state applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvStatus(StateVariable):
    '''
    State variable for status.
    '''

    inService: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The in service status as a result of topology processing. It indicates
            if the equipment is considered as energized by the power flow. It reflects
            if the equipment is connected within a solvable island. It does not necessarily
            reflect whether or not the island was solved by the power flow.
            '''

        })
    '''
    The in service status as a result of topology processing. It indicates
    if the equipment is considered as energized by the power flow. It reflects
    if the equipment is connected within a solvable island. It does not
    necessarily reflect whether or not the island was solved by the power
    flow.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The individual phase status. If the attribute is unspecified, then three
            phase model is assumed.
            '''

        })
    '''
    The individual phase status. If the attribute is unspecified, then
    three phase model is assumed.
    '''

    ConductingEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.SvStatus',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The conducting equipment associated with the status state variable.
            '''

        })
    '''
    The conducting equipment associated with the status state variable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvSwitch(StateVariable):
    '''
    State variable for switch.
    '''

    open: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The attribute tells if the computed state of the switch is considered open.
            '''

        })
    '''
    The attribute tells if the computed state of the switch is considered
    open.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The terminal phase at which the connection is applied. If missing, the
            injection is assumed to be balanced among non-neutral phases.
            '''

        })
    '''
    The terminal phase at which the connection is applied. If missing,
    the injection is assumed to be balanced among non-neutral phases.
    '''

    Switch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'ShadowExtension',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SvSwitch',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The switch associated with the switch state.
            '''

        })
    '''
    The switch associated with the switch state.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvTapStep(StateVariable):
    '''
    State variable for transformer tap step.
    '''

    position: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The floating point tap position. This is not the tap ratio, but rather
            the tap step position as defined by the related tap changer model and normally
            is constrained to be within the range of minimum and maximum tap positions.
            '''

        })
    '''
    The floating point tap position. This is not the tap ratio, but rather
    the tap step position as defined by the related tap changer model and
    normally is constrained to be within the range of minimum and maximum
    tap positions.
    '''

    TapChanger: Optional[TapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChanger.SvTapStep',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap changer associated with the tap step state.
            '''

        })
    '''
    The tap changer associated with the tap step state.
    '''

    TapChanger: Optional[TapChanger] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChanger.SvTapStep',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            The tap changer associated with the tap step state.
            '''

        })
    '''
    The tap changer associated with the tap step state.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SvVoltage(StateVariable):
    '''
    State variable for voltage.
    '''

    angle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage angle of the topological node complex voltage with respect
            to system reference.
            '''

        })
    '''
    The voltage angle of the topological node complex voltage with respect
    to system reference.
    '''

    v: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage magnitude at the topological node. The attribute shall be a
            positive value.
            '''

        })
    '''
    The voltage magnitude at the topological node. The attribute shall
    be a positive value.
    '''

    phase: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            If specified the voltage is the line to ground voltage of the individual
            phase. If unspecified, then the voltage is assumed balanced.
            '''

        })
    '''
    If specified the voltage is the line to ground voltage of the individual
    phase. If unspecified, then the voltage is assumed balanced.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.SvVoltage',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The topological node associated with the voltage state.
            '''

        })
    '''
    The topological node associated with the voltage state.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class Status(Identity):
    '''
    Current status information relevant to an entity.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date and time for which status 'value' applies.
            '''

        })
    '''
    Date and time for which status 'value' applies.
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Reason code or explanation for why an object went to the current status
            'value'.
            '''

        })
    '''
    Reason code or explanation for why an object went to the current status
    'value'.
    '''

    remark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Pertinent information regarding the current 'value', as free form text.
            '''

        })
    '''
    Pertinent information regarding the current 'value', as free form text.
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status value at 'dateTime'; prior status changes may have been kept in
            instances of activity records associated with the object to which this
            status applies.
            '''

        })
    '''
    Status value at 'dateTime'; prior status changes may have been kept
    in instances of activity records associated with the object to which
    this status applies.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StepLimitTablePoint(Identity):
    '''
    Describes each limit per step in the operational limit curve.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The factor which is used to multiply the value of the operational limit
            associated with the table.
            '''

        })
    '''
    The factor which is used to multiply the value of the operational limit
    associated with the table.
    '''

    step: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap step.
            '''

        })
    '''
    The tap step.
    '''

    StepOperationalLimitTable: Optional[StepOperationalLimitTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StepOperationalLimitTable.StepLimitTablePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The table of this point.
            '''

        })
    '''
    The table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class StreetDetail(Identity):
    '''
    Street details, in the context of address.
    '''

    addressGeneral: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            First line of a free form address or some additional address information
            (for example a mail stop).
            '''

        })
    '''
    First line of a free form address or some additional address information
    (for example a mail stop).
    '''

    addressGeneral2: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Second line of a free form address.
            '''

        })
    '''
    (if applicable) Second line of a free form address.
    '''

    addressGeneral3: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Third line of a free form address.
            '''

        })
    '''
    (if applicable) Third line of a free form address.
    '''

    buildingName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) In certain cases the physical location of the place of
            interest does not have a direct point of entry from the street, but may
            be located inside a larger structure such as a building, complex, office
            block, apartment, etc.
            '''

        })
    '''
    (if applicable) In certain cases the physical location of the place
    of interest does not have a direct point of entry from the street,
    but may be located inside a larger structure such as a building, complex,
    office block, apartment, etc.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Utilities often make use of external reference systems,
            such as those of the town-planner's department or surveyor general's mapping
            system, that allocate global reference codes to streets.
            '''

        })
    '''
    (if applicable) Utilities often make use of external reference systems,
    such as those of the town-planner's department or surveyor general's
    mapping system, that allocate global reference codes to streets.
    '''

    floorIdentification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The identification by name or number, expressed as text, of the floor in
            the building as part of this address.
            '''

        })
    '''
    The identification by name or number, expressed as text, of the floor
    in the building as part of this address.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the street.
            '''

        })
    '''
    Name of the street.
    '''

    number: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Designator of the specific location on the street.
            '''

        })
    '''
    Designator of the specific location on the street.
    '''

    prefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Prefix to the street name. For example: North, South, East, West.
            '''

        })
    '''
    Prefix to the street name. For example: North, South, East, West.
    '''

    suffix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Suffix to the street name. For example: North, South, East, West.
            '''

        })
    '''
    Suffix to the street name. For example: North, South, East, West.
    '''

    suiteNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Number of the apartment or suite.
            '''

        })
    '''
    Number of the apartment or suite.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Type of street. Examples include: street, circle, boulevard, avenue, road,
            drive, etc.
            '''

        })
    '''
    Type of street. Examples include: street, circle, boulevard, avenue,
    road, drive, etc.
    '''

    withinTownLimits: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            True if this street is within the legal geographical boundaries of the
            specified town (default).
            '''

        })
    '''
    True if this street is within the legal geographical boundaries of
    the specified town (default).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SysLoadDistributionFactor(Identity):
    '''
    This class models the system distribution factors. This class needs to
    be used along with the HostControlArea and the ConnectivityNode to show
    the distribution of each individual party.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.SysLoadDistribuFactor',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TCSCCompensationPoint(Identity):
    '''
    Compensation point of a TCSC compensator.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Master resource identifier issued by a model authority. The mRID is unique
            within an exchange context. Global uniqueness is easily achieved by using
            a UUID, as specified in RFC 4122, for the mRID. The use of UUID is strongly
            recommended.
            For CIMXML data files in RDF syntax conforming to IEC 61970-552, the mRID
            is mapped to rdf:ID or rdf:about attributes that identify CIM object elements.
            '''

        })
    '''
    Master resource identifier issued by a model authority. The mRID is
    unique within an exchange context. Global uniqueness is easily achieved
    by using a UUID, as specified in RFC 4122, for the mRID. The use of
    UUID is strongly recommended.
    For CIMXML data files in RDF syntax conforming to IEC 61970-552, the
    mRID is mapped to rdf:ID or rdf:about attributes that identify CIM
    object elements.
    '''

    section: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The number of the section.
            '''

        })
    '''
    The number of the section.
    '''

    compensationZ: Optional[ float | Impedance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The compensation impedance for this compensation point.
            '''

        })
    '''
    The compensation impedance for this compensation point.
    '''

    ThyristorControlledSeriesCompensator: Optional[ThyristorControlledSeriesCompensator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ThyristorControlledSeriesCompensator.TCSCCompensationPoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            TCSC that has different compensation points.
            '''

        })
    '''
    TCSC that has different compensation points.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerTablePoint(Identity):
    '''
    Describes each tap step in the tabular curve. Note that the upper boundary
    is not constrained to 100 percent.
    '''

    ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The voltage at the tap step divided by rated voltage of the transformer
            end having the tap changer. Hence this is a value close to one.
            For example, if the ratio at step 1 is 1.01, and the rated voltage of the
            transformer end is 110kV, then the voltage obtained by setting the tap
            changer to step 1 to is 111.1kV.
            '''

        })
    '''
    The voltage at the tap step divided by rated voltage of the transformer
    end having the tap changer. Hence this is a value close to one.
    For example, if the ratio at step 1 is 1.01, and the rated voltage
    of the transformer end is 110kV, then the voltage obtained by setting
    the tap changer to step 1 to is 111.1kV.
    '''

    step: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The tap step.
            '''

        })
    '''
    The tap step.
    '''

    b: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The magnetizing branch susceptance deviation as a percentage of nominal
            value. The actual susceptance is calculated as follows:
            calculated magnetizing susceptance = b(nominal) * (1 + b(from this class)/100).
            The b(nominal) is defined as the static magnetizing susceptance on the
            associated power transformer end or ends. This model assumes the star impedance
            (pi model) form.
            '''

        })
    '''
    The magnetizing branch susceptance deviation as a percentage of nominal
    value. The actual susceptance is calculated as follows:
    calculated magnetizing susceptance = b(nominal) * (1 + b(from this
    class)/100). The b(nominal) is defined as the static magnetizing susceptance
    on the associated power transformer end or ends. This model assumes
    the star impedance (pi model) form.
    '''

    g: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The magnetizing branch conductance deviation as a percentage of nominal
            value. The actual conductance is calculated as follows:
            calculated magnetizing conductance = g(nominal) * (1 + g(from this class)/100).
            The g(nominal) is defined as the static magnetizing conductance on the
            associated power transformer end or ends. This model assumes the star impedance
            (pi model) form. Note that the upper boundary is not constrained to 100
            percent.
            '''

        })
    '''
    The magnetizing branch conductance deviation as a percentage of nominal
    value. The actual conductance is calculated as follows:
    calculated magnetizing conductance = g(nominal) * (1 + g(from this
    class)/100). The g(nominal) is defined as the static magnetizing conductance
    on the associated power transformer end or ends. This model assumes
    the star impedance (pi model) form. Note that the upper boundary is
    not constrained to 100 percent.
    '''

    r: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The resistance deviation as a percentage of nominal value. The actual reactance
            is calculated as follows:
            calculated resistance = r(nominal) * (1 + r(from this class)/100). The
            r(nominal) is defined as the static resistance on the associated power
            transformer end or ends. This model assumes the star impedance (pi model)
            form. Note that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The resistance deviation as a percentage of nominal value. The actual
    reactance is calculated as follows:
    calculated resistance = r(nominal) * (1 + r(from this class)/100).
    The r(nominal) is defined as the static resistance on the associated
    power transformer end or ends. This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    x: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The series reactance deviation as a percentage of nominal value. The actual
            reactance is calculated as follows:
            calculated reactance = x(nominal) * (1 + x(from this class)/100). The x(nominal)
            is defined as the static series reactance on the associated power transformer
            end or ends. This model assumes the star impedance (pi model) form. Note
            that the upper boundary is not constrained to 100 percent.
            '''

        })
    '''
    The series reactance deviation as a percentage of nominal value. The
    actual reactance is calculated as follows:
    calculated reactance = x(nominal) * (1 + x(from this class)/100). The
    x(nominal) is defined as the static series reactance on the associated
    power transformer end or ends. This model assumes the star impedance
    (pi model) form. Note that the upper boundary is not constrained to
    100 percent.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhaseTapChangerTablePoint(TapChangerTablePoint):
    '''
    Describes each tap step in the phase tap changer tabular curve.
    '''

    angle: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The angle difference in degrees. A positive value indicates a positive
            angle variation from the Terminal at the PowerTransformerEnd, where the
            TapChanger is located, into the transformer.
            '''

        })
    '''
    The angle difference in degrees. A positive value indicates a positive
    angle variation from the Terminal at the PowerTransformerEnd, where
    the TapChanger is located, into the transformer.
    '''

    PhaseTapChangerTable: Optional[PhaseTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhaseTapChangerTable.PhaseTapChangerTablePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The table of this point.
            '''

        })
    '''
    The table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RatioTapChangerTablePoint(TapChangerTablePoint):
    '''
    Describes each tap step in the ratio tap changer tabular curve.
    '''

    RatioTapChangerTable: Optional[RatioTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChangerTable.RatioTapChangerTablePoint',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Table of this point.
            '''

        })
    '''
    Table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class TownDetail(Identity):
    '''
    Town details, in the context of address.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Town code.
            '''

        })
    '''
    Town code.
    '''

    country: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the country.
            '''

        })
    '''
    Name of the country.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Town name.
            '''

        })
    '''
    Town name.
    '''

    section: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Town section. For example, it is common for there to be 36 sections per
            township.
            '''

        })
    '''
    Town section. For example, it is common for there to be 36 sections
    per township.
    '''

    stateOrProvince: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of the state or province.
            '''

        })
    '''
    Name of the state or province.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UserAttribute(Identity):
    '''
    Generic name-value pair class, with optional sequence number and units
    for value; can be used to model parts of information exchange when concrete
    types are not known in advance.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Name of an attribute.
            '''

        })
    '''
    Name of an attribute.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Sequence number for this attribute in a list of attributes.
            '''

        })
    '''
    Sequence number for this attribute in a list of attributes.
    '''

    PropertySpecification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.AssetProperites',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RatingSpecification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.Ratings',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Transaction: Optional[Transaction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Transaction.UserAttributes',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Transaction for which this snapshot has been recorded.
            '''

        })
    '''
    Transaction for which this snapshot has been recorded.
    '''

    value: Optional[StringQuantity] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Value of an attribute, including unit information.
            '''

        })
    '''
    Value of an attribute, including unit information.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktUserAttribute(UserAttribute):
    '''
    Subclass of IEC61968:Domain2:UserAttribute.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Version(Identity):
    '''
    This is the version for a group of devices or objects. This could be used
    to track the version for any group of objects or devices over time. For
    example, for a DERGroup, the requesting system may want to get the details
    of a specific version of a DERGroup.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Date of this version.
            '''

        })
    '''
    Date of this version.
    '''

    major: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Major release level for this version.
            '''

        })
    '''
    Major release level for this version.
    '''

    minor: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Minor release level for this version.
            '''

        })
    '''
    Minor release level for this version.
    '''

    revision: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Revision level for this version.
            '''

        })
    '''
    Revision level for this version.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WirePhaseInfo(Identity):
    '''
    Information on a wire carrying a single phase.
    '''

    phaseInfo: Optional[SinglePhaseKind] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Phase information.
            '''

        })
    '''
    Phase information.
    '''

    WireAssemblyInfo: Optional[WireAssemblyInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireAssemblyInfo.WirePhaseInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Wire assembly information using this wire phase information.
            '''

        })
    '''
    Wire assembly information using this wire phase information.
    '''

    WireInfo: Optional[WireInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireInfo.WirePhaseInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Wire information contributing to this wire phase information.
            '''

        })
    '''
    Wire information contributing to this wire phase information.
    '''

    WirePosition: Optional[WirePosition] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WirePosition.WirePhaseInfo',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Wire position with this wire phase information.
            '''

        })
    '''
    Wire position with this wire phase information.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkIdentifiedObject(Identity):
    '''
    Shadow class for IdentifiedObject, to isolate subclassing from this package.
    If any subclass gets normative and needs inheritance, it will inherit directly
    from IdentifiedObject.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ActivePowerSourceKind(Enum):
    '''
    In cases where STATCOM provides active power compensation, the active power
    source can be defined.
    If there is no active powerSource, set to "none"
    '''

    batteryEnergyStorage = 'batteryEnergyStorage'
    '''
    (BESS) battery storage unit capable of charging the batteries and discharging
    then to the system.
    '''

    none = 'none'
    '''
    No active power source available
    '''

    other = 'other'
    '''
    (BESS) battery storage unit capable of charging the batteries and discharging
    then to the system.
    '''

    superconductiveMagneticStorage = 'superconductiveMagneticStorage'
    '''
    Superconductive magnetic storage
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class AddressKind(Enum):
    '''
    Indicates the kind of the address
    '''

    billing = 'billing'
    '''
    A billing address.
    '''

    other = 'other'
    '''
    A kind of address not enumerated.
    '''

    physical = 'physical'
    '''
    A physical address.
    '''

    postal = 'postal'
    '''
    A postal address.
    '''

    street = 'street'
    '''
    A street address.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AgentRoleKind(Enum):
    '''
    The kind of agent that can play a particular role.
    '''

    Customer = 'Customer'
    '''
    The agent role is only played by a customer.
    '''

    Organisation = 'Organisation'
    '''
    The agent role is only played by an organisation.
    '''

    Person = 'Person'
    '''
    The agent role is only played by a person.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AgreementPricingKind(Enum):
    '''
    The kinds of structures, rules, and constraints for how work or services
    are billed within a pricing agreement.
    '''

    fixedPrice = 'fixedPrice'
    '''
    A kind of pricing agreement where the total cost is predetermined and
    agreed upon in advance, regardless of the actual time or resources
    required to complete the work.
    '''

    notToExceed = 'notToExceed'
    '''
    A kind of pricing agreement where the total cost is capped at a specified
    maximum amount, but the actual billing is based on time and materials
    up to that limit, offering cost control with some flexibility.
    '''

    other = 'other'
    '''
    A kind of agreement pricing that is not enumerated.
    '''

    timeAndMaterials = 'timeAndMaterials'
    '''
    A kind of pricing agreement in which the client pays for the actual
    time spent (usually at an hourly or daily rate) and the materials used
    to complete the work, allowing flexibility for changes in scope or
    effort.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AnodeType(Enum):
    '''
    Aggregated Nodes Types for example:
    <ul>
    <li>SYS - System Zone/Region; </li>
    </ul>
    <ul>
    <li>RUC - RUC Zone; </li>
    </ul>
    <ul>
    <li>LFZ - Load Forecast Zone; </li>
    </ul>
    <ul>
    <li>REG - Market Energy/Ancillary Service Region; </li>
    </ul>
    <ul>
    <li>AGR - Aggregate Generation Resource; </li>
    </ul>
    <ul>
    <li>POD - Point of Delivery; </li>
    </ul>
    <ul>
    <li>ALR - Aggregate Load Resource; </li>
    </ul>
    <ul>
    <li>LTAC - Load TransmissionAccessCharge (TAC) Group; </li>
    </ul>
    <ul>
    <li>ACA - Adjacent Control Area </li>
    </ul>
    <ul>
    <li>ASR - Aggregated System Resource </li>
    </ul>
    <ul>
    <li>ECA - Embedded Control Area </li>
    </ul>
    '''

    ACA = 'ACA'
    '''
    Adjacent Control Area
    '''

    AGR = 'AGR'
    '''
    Aggregate Generation Resource;
    '''

    ALR = 'ALR'
    '''
    Aggregate Load Resource;
    '''

    ASR = 'ASR'
    '''
    Aggregated System Resource
    '''

    DER = 'DER'
    '''
    Distributed Energy Resource.
    '''

    ECA = 'ECA'
    '''
    Embedded Control Area
    '''

    LFZ = 'LFZ'
    '''
    Load Forecast Zone
    '''

    LTAC = 'LTAC'
    '''
    Load TransmissionAccessCharge (TAC) Group;
    '''

    POD = 'POD'
    '''
    Point of Delivery;
    '''

    REG = 'REG'
    '''
    Market Energy/Ancillary Service Region;
    '''

    RUC = 'RUC'
    '''
    RUC Zone
    '''

    SYS = 'SYS'
    '''
    System Zone/Region;
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AsynchronousMachineKind(Enum):
    '''
    Kind of Asynchronous Machine.
    '''

    generator = 'generator'
    '''
    The Asynchronous Machine is a generator.
    '''

    motor = 'motor'
    '''
    The Asynchronous Machine is a motor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AutonomousAgentKind(Enum):
    '''
    The kind of autonomous agents.
    '''

    bot = 'bot'
    '''
    Autonomous program on the internet or another network that can interact
    with systems or users.
    '''

    other = 'other'
    '''
    A kind of autonomous agent that is not enumerated.
    '''

    robot = 'robot'
    '''
    Type of automated machine that can execute specific tasks with little
    or no human intervention and with speed and precision.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BatteryStateKind(Enum):
    '''
    The state of the battery unit.
    '''

    charging = 'charging'
    '''
    Stored energy is increasing.
    '''

    discharging = 'discharging'
    '''
    Stored energy is decreasing.
    '''

    empty = 'empty'
    '''
    Unable to discharge, and not charging.
    '''

    full = 'full'
    '''
    Unable to charge, and not discharging.
    '''

    waiting = 'waiting'
    '''
    Neither charging nor discharging, but able to do so.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BreakerConfiguration(Enum):
    '''
    Switching arrangement for bay.
    '''

    breakerAndAHalf = 'breakerAndAHalf'
    '''
    Breaker and a half.
    '''

    doubleBreaker = 'doubleBreaker'
    '''
    Double breaker.
    '''

    noBreaker = 'noBreaker'
    '''
    No breaker.
    '''

    singleBreaker = 'singleBreaker'
    '''
    Single breaker.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BusbarConfiguration(Enum):
    '''
    Busbar layout for bay.
    '''

    doubleBus = 'doubleBus'
    '''
    Double bus.
    '''

    mainWithTransfer = 'mainWithTransfer'
    '''
    Main bus with transfer bus.
    '''

    ringBus = 'ringBus'
    '''
    Ring bus.
    '''

    singleBus = 'singleBus'
    '''
    Single bus.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BushingInsulationKind(Enum):
    '''
    Insulation kind for bushings.
    '''

    compound = 'compound'
    '''
    Compound.
    '''

    oilImpregnatedPaper = 'oilImpregnatedPaper'
    '''
    Oil impregnated paper.
    '''

    other = 'other'
    '''
    Other.
    '''

    resinBondedPaper = 'resinBondedPaper'
    '''
    Resin bonded paper.
    '''

    resinImpregnatedPaper = 'resinImpregnatedPaper'
    '''
    Resin impregnated paper.
    '''

    solidPorcelain = 'solidPorcelain'
    '''
    Solid porcelain.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CableConstructionKind(Enum):
    '''
    Kind of cable construction.
    '''

    compacted = 'compacted'
    '''
    Compacted cable.
    '''

    compressed = 'compressed'
    '''
    Compressed cable.
    '''

    other = 'other'
    '''
    Other kind of cable construction.
    '''

    sector = 'sector'
    '''
    Sector cable.
    '''

    segmental = 'segmental'
    '''
    Segmental cable.
    '''

    solid = 'solid'
    '''
    Solid cable.
    '''

    stranded = 'stranded'
    '''
    Stranded cable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CableOuterJacketKind(Enum):
    '''
    Kind of cable outer jacket.
    '''

    insulating = 'insulating'
    '''
    Insulating cable outer jacket.
    '''

    linearLowDensityPolyethylene = 'linearLowDensityPolyethylene'
    '''
    Linear low density polyethylene cable outer jacket.
    '''

    none = 'none'
    '''
    Cable has no outer jacket.
    '''

    other = 'other'
    '''
    Pther kind of cable outer jacket.
    '''

    polyethylene = 'polyethylene'
    '''
    Polyethylene cable outer jacket.
    '''

    pvc = 'pvc'
    '''
    PVC cable outer jacket.
    '''

    semiconducting = 'semiconducting'
    '''
    Semiconducting cable outer jacket.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CableShieldMaterialKind(Enum):
    '''
    Kind of cable shield material.
    '''

    aluminum = 'aluminum'
    '''
    Aluminum cable shield.
    '''

    copper = 'copper'
    '''
    Copper cable shield.
    '''

    lead = 'lead'
    '''
    Lead cable shield.
    '''

    other = 'other'
    '''
    Other kind of cable shield material.
    '''

    steel = 'steel'
    '''
    Steel cable shield.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CapabilityRequirementKind(Enum):
    '''
    The kinds of necessary qualifications, credentials, and competencies an
    agent must possess to effectively perform a specific function, role, or
    task. Each kind establishes the essential prerequisites to ensure compliance
    with industry standards, regulatory mandates, and professional expectations.
    '''

    certifcate = 'certifcate'
    '''
    Certification is credential or designation granted by a professional
    organisation, industry body, or educational institution to individuals
    who have demonstrated a specific level of knowledge, skills, or competency
    in a particular field or area of expertise.
    '''

    license = 'license'
    '''
    License issued by a governmental or regulatory authority. It is a formal
    document that grants the holder the legal right to perform certain
    actions or access certain privileges within the framework of applicable
    laws and regulations.
    '''

    other = 'other'
    '''
    A kind of required capability that is not enumerated.
    '''

    professional = 'professional'
    '''
    Professional refers to an individual who possesses the necessary knowledge,
    skills, and qualifications to perform work in that specific field at
    a high level of competence and with a level of expertise recognized
    by peers and industry standards.
    '''

    training = 'training'
    '''
    Formal training in for acquiring knowledge, skills, and practical experience
    to develop or enhance one's abilities in that specific domain. It involves
    structured learning activities designed to impart the necessary knowledge
    and skills required to perform tasks effectively and proficiently.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CapacitorCanFusingKind(Enum):
    '''
    Kind of capacitor can fusing
    '''

    external = 'external'
    '''
    External
    '''

    internal = 'internal'
    '''
    Internal
    '''

    none = 'none'
    '''
    None
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CapacitorRackKind(Enum):
    '''
    '''

    enclosedRack = 'enclosedRack'
    '''
    '''

    openRack = 'openRack'
    '''
    '''

    other = 'other'
    '''
    '''

    poletopRack = 'poletopRack'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CirculationAndCoolingKind(Enum):
    '''
    '''

    oilForcedAirForced = 'oilForcedAirForced'
    '''
    '''

    oilForcedAirNatural = 'oilForcedAirNatural'
    '''
    '''

    oilNaturalAirForced = 'oilNaturalAirForced'
    '''
    '''

    oilNaturalAirNatural = 'oilNaturalAirNatural'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ComDirectionKind(Enum):
    '''
    Kind of communication direction.
    '''

    biDirectional = 'biDirectional'
    '''
    Communication with the device is bi-directional.
    '''

    fromDevice = 'fromDevice'
    '''
    Communication is from device.
    '''

    toDevice = 'toDevice'
    '''
    Communication is to device.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ComTechnologyKind(Enum):
    '''
    Kind of communication technology.
    '''

    cellular = 'cellular'
    '''
    Communicates using a public cellular radio network. A specific variant
    of 'rf'.
    '''

    ethernet = 'ethernet'
    '''
    Communicates using one or more of a family of frame-based computer
    networking technologies conforming to the IEEE 802.3 standard.
    '''

    homePlug = 'homePlug'
    '''
    Communicates using power line communication technologies conforming
    to the standards established by the HomePlug Powerline Alliance. A
    specific variant of 'plc'.
    '''

    pager = 'pager'
    '''
    Communicates using a public one-way or two-way radio-based paging network.
    A specific variant of 'rf'.
    '''

    phone = 'phone'
    '''
    Communicates using a basic, wireline telephone system.
    '''

    plc = 'plc'
    '''
    Communicates using power line communication technologies.
    '''

    rf = 'rf'
    '''
    Communicates using private or public radio-based technology.
    '''

    rfMesh = 'rfMesh'
    '''
    Communicates using a mesh radio technology. A specific variant of 'rf'.
    '''

    zigbee = 'zigbee'
    '''
    Communicates using radio communication technologies conforming to the
    standards established by the ZigBee. A specific variant of 'rf'.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CompensatorConnectionKind(Enum):
    '''
    Kind of compensator connection
    '''

    delta = 'delta'
    '''
    Delta connection
    '''

    other = 'other'
    '''
    Other connection
    '''

    wye = 'wye'
    '''
    WYE connection
    '''

    wyeGround = 'wyeGround'
    '''
    WYE ground connection
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CompositeSwitchKind(Enum):
    '''
    Kind of composite switch.
    '''

    escoThrowOver = 'escoThrowOver'
    '''
    '''

    gral = 'gral'
    '''
    '''

    other = 'other'
    '''
    '''

    ral = 'ral'
    '''
    '''

    regulatorBypass = 'regulatorBypass'
    '''
    '''

    throwOver = 'throwOver'
    '''
    '''

    ugMultiSwitch = 'ugMultiSwitch'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ContactMethodKind(Enum):
    '''
    The kinds of contact methods for an agent.
    '''

    DoNotContact = 'DoNotContact'
    '''
    The Agent is not to be contacted.
    '''

    Email = 'Email'
    '''
    An email is a method of contact for the Agent.
    '''

    PostalMail = 'PostalMail'
    '''
    Information sent via postal mail a method of contact for the Agent.
    '''

    Telephone = 'Telephone'
    '''
    A telephone call is a method of contact for the Agent.
    '''

    TextMessage = 'TextMessage'
    '''
    SMS messaging is a method of contact for the Agent.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ControlAreaTypeKind(Enum):
    '''
    The type of control area.
    '''

    AGC = 'AGC'
    '''
    Used for automatic generation control.
    '''

    Forecast = 'Forecast'
    '''
    Used for load forecast.
    '''

    Interchange = 'Interchange'
    '''
    Used for interchange specification or control.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.gmdm)
@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ConverterControlModeKind(Enum):
    '''
    '''

    constantPowerFactor = 'constantPowerFactor'
    '''
    '''

    constantReactivePower = 'constantReactivePower'
    '''
    '''

    dynamic = 'dynamic'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://epri.com/gmdm/2025#'
    @property
    def __package__(self):
        return 'WiresEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.gmdm)
@stereotype(CIMStereotype.enumeration)
class ConverterControlModeKind1(Enum):
    '''
    '''

    constantPowerFactor = 'constantPowerFactor'
    '''
    '''

    constantReactivePower = 'constantReactivePower'
    '''
    '''

    dynamic = 'dynamic'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://epri.com/gmdm/2025#'
    @property
    def __package__(self):
        return 'WiresEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CoolantType(Enum):
    '''
    Method of cooling a machine.
    '''

    air = 'air'
    '''
    Air.
    '''

    hydrogenGas = 'hydrogenGas'
    '''
    Hydrogen gas.
    '''

    water = 'water'
    '''
    Water.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CrewStatusKind(Enum):
    '''
    Defines the current status of the crew assignment.
    '''

    arrived = 'arrived'
    '''
    The crew has arrived on site at a work location.
    '''

    assigned = 'assigned'
    '''
    The crew has been assigned to work on a task.
    '''

    awaitingCrewAssignment = 'awaitingCrewAssignment'
    '''
    Indicates that the work is awaiting one or more crews to be assigned.
    '''

    enroute = 'enroute'
    '''
    The crew is en route to a work location.
    '''

    fieldComplete = 'fieldComplete'
    '''
    The crew has completed assigned work in the field. The equipment or
    other devices may not be energized at this time.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CsOperatingModeKind(Enum):
    '''
    Operating mode for DC line operating as Current Source Converter.
    '''

    inverter = 'inverter'
    '''
    Operating as inverter, which is the power receiving end.
    '''

    rectifier = 'rectifier'
    '''
    Operating as rectifier, which is the power sending end.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CsPpccControlKind(Enum):
    '''
    Active power control modes for DC line operating as Current Source Converter.
    '''

    activePower = 'activePower'
    '''
    Control is active power control at AC side, at point of common coupling.
    Target is provided by ACDCConverter.targetPpcc.
    '''

    dcCurrent = 'dcCurrent'
    '''
    Control is DC current with target value provided by CsConverter.targetIdc.
    '''

    dcVoltage = 'dcVoltage'
    '''
    Control is DC voltage with target value provided by ACDCConverter.targetUdc.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CurveStyle(Enum):
    '''
    Style or shape of curve.
    '''

    constantYValue = 'constantYValue'
    '''
    The Y-axis values are assumed constant until the next curve point and
    prior to the first curve point.
    '''

    straightLineYValues = 'straightLineYValues'
    '''
    The Y-axis values are assumed to be a straight line between values.
    Also known as linear interpolation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DCConverterOperatingModeKind(Enum):
    '''
    The operating mode of an DC bipole.
    '''

    bipolar = 'bipolar'
    '''
    Bipolar operation.
    '''

    monopolarGroundReturn = 'monopolarGroundReturn'
    '''
    Monopolar operation with ground return.
    '''

    monopolarMetallicReturn = 'monopolarMetallicReturn'
    '''
    Monopolar operation with metallic return.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DCPolarityKind(Enum):
    '''
    Polarity for DC circuits.
    '''

    middle = 'middle'
    '''
    Middle pole. The converter terminal is the midpoint in a bipolar or
    symmetric monopole configuration. The midpoint can be grounded and/or
    have a metallic return.
    '''

    negative = 'negative'
    '''
    Negative pole. The converter terminal is intended to operate at a negative
    voltage relative the midpoint or positive terminal.
    '''

    positive = 'positive'
    '''
    Positive pole. The converter terminal is intended to operate at a positive
    voltage relative the midpoint or negative terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DCSystemDirectionKind(Enum):
    '''
    Direction kinds of the DC system.
    '''

    bidirectional = 'bidirectional'
    '''
    Bidirectional DC system used for the transfer of energy in either direction.
    According to IEC 60633 a multiterminal DC system is bidirectional if
    one or more substations are bidirectional.
    '''

    unidirectional = 'unidirectional'
    '''
    Unidirectional DC system used for the transfer of energy in only one
    direction. According to IEC 60633, most DC systems are inherently bidirectional.
    However, some systems may be optimized to transmit power in only one
    preferred direction. Such systems may still be considered as "bidirectional".
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DCSystemTransmissionKind(Enum):
    '''
    DC system transmission kind.
    '''

    backToBack = 'backToBack'
    '''
    DC back-to-back system (IEC 60633) is a DC system which transfers energy
    between AC buses at the same location.
    '''

    multiTerminal = 'multiTerminal'
    '''
    Multiterminal DC transmission system (IEC 60633) consisting of more
    than two separated DC substations and the interconnecting DC transmission
    lines.
    '''

    twoTerminal = 'twoTerminal'
    '''
    Two-terminal DC transmission system (IEC 60633), consisting of two
    DC substations and the connecting DC transmission line(s).
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DCTerminalPolarityKind(Enum):
    '''
    Polarity for DC terminal. Used in DC system configurations that have explicit
    polarity of the terminals, e.g., voltage source converter (VSC) technology.
    '''

    negative = 'negative'
    '''
    Negative terminal.
    '''

    positive = 'positive'
    '''
    Positive terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DayOfWeek(Enum):
    '''
    The day of the week.
    '''

    friday = 'friday'
    '''
    Day of the week between Thursday and Saturday.
    '''

    monday = 'monday'
    '''
    Day of the week between Sunday and Tuesday.
    '''

    publicHolidays = 'publicHolidays'
    '''
    This stands for any day that is a public holiday; it is a placeholder
    for all official public holidays in some particular location.
    '''

    saturday = 'saturday'
    '''
    Day of the week between Friday and Sunday.
    '''

    sunday = 'sunday'
    '''
    Day of the week between Saturday and Monday.
    '''

    thursday = 'thursday'
    '''
    Day of the week between Wednesday and Friday.
    '''

    tuesday = 'tuesday'
    '''
    Day of the week between Monday and Wednesday.
    '''

    wednesday = 'wednesday'
    '''
    Day of the week between Tuesday and Thursday.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DischargeResistorKind(Enum):
    '''
    '''

    external = 'external'
    '''
    '''

    internal = 'internal'
    '''
    '''

    none = 'none'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class DocumentKind(Enum):
    '''
    The kinds of documents.
    '''

    agreement = 'agreement'
    '''
    A formal document outlining the terms and conditions between two or
    more parties.
    '''

    application = 'application'
    '''
    A document submitted to request approval, access, or participation
    in a process or service.
    '''

    billOfMaterials = 'billOfMaterials'
    '''
    A detailed list of raw materials, components, and assemblies required
    to manufacture a product.
    '''

    blueprint = 'blueprint'
    '''
    A technical drawing or plan that provides detailed specifications for
    construction or manufacturing.
    '''

    drawing = 'drawing'
    '''
    A graphical representation used to illustrate design, layout, or technical
    details.
    '''

    inspectionReport = 'inspectionReport'
    '''
    A document summarizing the findings of an evaluation or assessment
    of an asset, process, or facility.
    '''

    instruction = 'instruction'
    '''
    A document providing step-by-step guidance on how to perform a task
    or operate a system.
    '''

    invoice = 'invoice'
    '''
    A billing document itemizing goods or services provided along with
    costs and payment terms.
    '''

    log = 'log'
    '''
    A recorded list of events, actions, or observations maintained for
    reference or tracking.
    '''

    map = 'map'
    '''
    A visual representation of geographical or spatial information for
    navigation or planning.
    '''

    other = 'other'
    '''
    A kind of document that is not enumerated.
    '''

    partslist = 'partslist'
    '''
    A document listing all components and materials required for assembly
    or maintenance.
    '''

    permit = 'permit'
    '''
    An official document granting authorization to perform a specific activity
    under regulated conditions.
    '''

    photograph = 'photograph'
    '''
    A captured visual image used for documentation, identification, or
    analysis.
    '''

    procedure = 'procedure'
    '''
    A formalized set of instructions outlining steps to complete a process
    systematically.
    '''

    specification = 'specification'
    '''
    A document defining the detailed requirements and standards for a product
    or system.
    '''

    video = 'video'
    '''
    A recorded visual and audio medium used for documentation, training,
    or communication.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EmissionType(Enum):
    '''
    The type of emission.
    '''

    carbonDioxide = 'carbonDioxide'
    '''
    Carbon dioxide.
    '''

    carbonDisulfide = 'carbonDisulfide'
    '''
    Carbon disulfide.
    '''

    chlorine = 'chlorine'
    '''
    Chlorine.
    '''

    hydrogenSulfide = 'hydrogenSulfide'
    '''
    Hydrogen sulfide.
    '''

    nitrogenOxide = 'nitrogenOxide'
    '''
    Nitrogen oxide.
    '''

    sulfurDioxide = 'sulfurDioxide'
    '''
    Sulfur dioxide.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EmissionValueSource(Enum):
    '''
    The source of the emission value.
    '''

    calculated = 'calculated'
    '''
    Calculated.
    '''

    measured = 'measured'
    '''
    Measured.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class FuelSource(Enum):
    '''
    For example:
    Bio Gas (Landfill, Sewage, Digester, etc.)
    Biomass
    Coal
    DIST
    Natural Gas
    Geothermal
    HRCV
    None
    Nuclear
    Oil
    Other
    Solar
    Waste to Energy
    Water
    Wind
    '''

    BGAS = 'BGAS'
    '''
    Bio Gas (Landfill, Sewage, Digester, etc.)
    '''

    BIOM = 'BIOM'
    '''
    Biomass
    '''

    COAL = 'COAL'
    '''
    Coal
    '''

    DIST = 'DIST'
    '''
    Distributed generation which could be a hybrid of multiple fuel sources.
    '''

    GAS = 'GAS'
    '''
    '''

    GEOT = 'GEOT'
    '''
    GeoThermal
    '''

    HRCV = 'HRCV'
    '''
    Heat Recovery.
    '''

    NG = 'NG'
    '''
    Natural Gas
    '''

    NNG = 'NNG'
    '''
    Non-Natural Gas
    '''

    NONE = 'NONE'
    '''
    '''

    NUCL = 'NUCL'
    '''
    Nuclear
    '''

    OIL = 'OIL'
    '''
    '''

    OTHR = 'OTHR'
    '''
    Other
    '''

    SOLR = 'SOLR'
    '''
    Solar
    '''

    WAST = 'WAST'
    '''
    Waste to Energy
    '''

    WATR = 'WATR'
    '''
    Water
    '''

    WIND = 'WIND'
    '''
    Wind
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class FuelType(Enum):
    '''
    Type of fuel.
    '''

    brownCoalLignite = 'brownCoalLignite'
    '''
    Brown coal lignite.
    '''

    coal = 'coal'
    '''
    Generic coal, not including lignite type.
    '''

    coalDerivedGas = 'coalDerivedGas'
    '''
    Coal derived gas.
    '''

    diesel = 'diesel'
    '''
    Diesel
    '''

    gas = 'gas'
    '''
    Natural gas.
    '''

    hardCoal = 'hardCoal'
    '''
    Hard coal.
    '''

    lignite = 'lignite'
    '''
    The fuel is lignite coal. Note that this is a special type of coal,
    so the other enum of coal is reserved for hard coal types or if the
    exact type of coal is not known.
    '''

    oil = 'oil'
    '''
    Oil.
    '''

    oilShale = 'oilShale'
    '''
    Oil Shale.
    '''

    other = 'other'
    '''
    Any fuel type not included in the rest of the enumerated value.
    '''

    peat = 'peat'
    '''
    Peat.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GenerationalSuffixKind(Enum):
    '''
    A list of valid generational suffixes. A generational suffix is added to
    a person's name to indicate their generational position within a family,
    distinguishing individuals who share the same name across different generations.
    '''

    I = 'I'
    '''
    A suffix sometimes used retroactively to distinguish the original bearer
    of a name when a "II" or subsequent generational suffix is later assigned
    to a descendant.
    '''

    II = 'II'
    '''
    A suffix used when a child is named after someone other than their
    father, such as a grandfather or other relative.
    '''

    III = 'III'
    '''
    A suffix used when a person is the third in a line to carry the same
    exact name.
    '''

    IV = 'IV'
    '''
    A suffix used when a person is the fourth in a line to carry the same
    exact name.
    '''

    IX = 'IX'
    '''
    A suffix used when a person is the ninth in a line to carry the same
    exact name.
    '''

    Jr = 'Jr'
    '''
    A suffix used to indicate a son who shares the exact name as his father.
    '''

    Sr = 'Sr'
    '''
    A suffix used to distinguish a father from his son when they share
    the same name.
    '''

    V = 'V'
    '''
    A suffix used when a person is the fifth in a line to carry the same
    exact name.
    '''

    VI = 'VI'
    '''
    A suffix used when a person is the sixth in a line to carry the same
    exact name.
    '''

    VII = 'VII'
    '''
    A suffix used when a person is the seventh in a line to carry the same
    exact name.
    '''

    VIII = 'VIII'
    '''
    A suffix used when a person is the eighth in a line to carry the same
    exact name.
    '''

    X = 'X'
    '''
    A suffix used when a person is the tenth in a line to carry the same
    exact name.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GeneratorControlMode(Enum):
    '''
    Unit control modes.
    '''

    pulse = 'pulse'
    '''
    Pulse control mode.
    '''

    setpoint = 'setpoint'
    '''
    Setpoint control mode.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GeneratorControlSource(Enum):
    '''
    The source of controls for a generating unit.
    '''

    offAGC = 'offAGC'
    '''
    Off of automatic generation control (AGC).
    '''

    onAGC = 'onAGC'
    '''
    On automatic generation control (AGC).
    '''

    plantControl = 'plantControl'
    '''
    Plant is controlling.
    '''

    unavailable = 'unavailable'
    '''
    Not available.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GeothermalUnitKind(Enum):
    '''
    Kind of geothermal.
    '''

    binaryCycle = 'binaryCycle'
    '''
    The moderately hot geothermal water is passed by a secondary fluid
    with a much lower boiling point than water.
    '''

    drySteam = 'drySteam'
    '''
    Uses geothermal steam of 150 degree Celsius or greater to turn turbines.
    '''

    flashSteam = 'flashSteam'
    '''
    Pull deep, high-pressure hot water into lower-pressure tanks and use
    the resulting flashed steam to drive turbines.
    '''

    other = 'other'
    '''
    Other type of geothermal generating unit.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class HydroEnergyConversionKind(Enum):
    '''
    Specifies the capability of the hydro generating unit to convert energy
    as a generator or pump.
    '''

    generator = 'generator'
    '''
    Able to generate power, but not able to pump water for energy storage.
    '''

    pumpAndGenerator = 'pumpAndGenerator'
    '''
    Able to both generate power and pump water for energy storage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class HydroPlantStorageKind(Enum):
    '''
    The type of hydro power plant.
    '''

    pumpedStorage = 'pumpedStorage'
    '''
    Pumped storage.
    '''

    runOfRiver = 'runOfRiver'
    '''
    Run of river.
    '''

    storage = 'storage'
    '''
    Storage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class HydroTurbineKind(Enum):
    '''
    Type of turbine.
    '''

    francis = 'francis'
    '''
    Francis.
    '''

    kaplan = 'kaplan'
    '''
    Kaplan.
    '''

    pelton = 'pelton'
    '''
    Pelton.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class InterruptingMediumKind(Enum):
    '''
    Kinds of interrupting mediums.
    '''

    airBlast = 'airBlast'
    '''
    Air blast.
    '''

    airMagnetic = 'airMagnetic'
    '''
    Air magnetic.
    '''

    bulkOil = 'bulkOil'
    '''
    Bulk oil.
    '''

    gasSinglePressure = 'gasSinglePressure'
    '''
    Gas single pressure.
    '''

    gasTwoPressure = 'gasTwoPressure'
    '''
    Gas two pressure.
    '''

    minimumOil = 'minimumOil'
    '''
    Minimum oil.
    '''

    vacuum = 'vacuum'
    '''
    Vacuum.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class LegalEntityKind(Enum):
    '''
    The kinds of legal entities an organisation
    '''

    corporation = 'corporation'
    '''
    An organization formed with state governmental approval to act as an
    artificial person to conduct business, which can sue or be sued, and
    (unless it is non-profit) can issue shares of stock to raise funds
    with which to start a business or increase its capital.
    '''

    generalPartnership = 'generalPartnership'
    '''
    An arrangement between two or more persons or legal entities to engage
    in business and agree to share in all assets, profits, and liabilities
    of the business.
    '''

    governmentOwnedEnterprise = 'governmentOwnedEnterprise'
    '''
    A legal entity that is created by a government in order to partake
    in commercial activities on the government's behalf.
    '''

    limitedLiabilityCompany = 'limitedLiabilityCompany'
    '''
    A business structure in the U.S. that protects its owners from personal
    responsibility for its debts or liabilities. Limited liability companies
    are hybrid entities that combine the characteristics of a corporation
    with those of a partnership or sole proprietorship.
    '''

    limitedPartnership = 'limitedPartnership'
    '''
    A business structure consisting of at least one general partner, who
    manages the business and is personally liable for its debts, and one
    or more limited partners, who contribute capital but have limited liability
    and no active role in management.
    Limited partners are only liable up to the amount of their investment,
    while general partners assume full legal and financial responsibility.
    '''

    nonProfit = 'nonProfit'
    '''
    An organization established for purposes other than generating profit,
    such as charitable, educational, religious, or social missions. It
    reinvests any surplus revenue into its operations or cause and is typically
    exempt from certain taxes under applicable laws.
    '''

    soleProprietorship = 'soleProprietorship'
    '''
    An unincorporated business owned and operated by a single individual,
    where there is no legal distinction between the owner and the business.
    The owner assumes full responsibility for all debts, liabilities, and
    obligations.
    '''

    statutoryCompany = 'statutoryCompany'
    '''
    A legal entity created through a specific act of legislation or statute
    passed by a governmental body. Its powers, functions, and governance
    are defined and regulated by that statute, often for public service,
    regulatory, or special-purpose functions.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.European)
@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class LimitKind(Enum):
    '''
    Limit kinds.
    '''

    alarmVoltage = 'alarmVoltage'
    '''
    Voltage alarm.
    '''

    highVoltage = 'highVoltage'
    '''
    Referring to the rating of the equipments, a voltage too high can lead
    to accelerated ageing or the destruction of the equipment.
    This limit type may or may not have duration.
    '''

    lowVoltage = 'lowVoltage'
    '''
    A too low voltage can disturb the normal operation of some protections
    and transformer equipped with on-load tap changers, electronic power
    devices or can affect the behaviour of the auxiliaries of generation
    units.
    This limit type may or may not have duration.
    '''

    operationalVoltageLimit = 'operationalVoltageLimit'
    '''
    Operational voltage limit.
    '''

    patl = 'patl'
    '''
    The Permanent Admissible Transmission Loading (PATL) is the loading
    in amperes, MVA or MW that can be accepted by a network branch for
    an unlimited duration without any risk for the material.
    The OperationnalLimitType.isInfiniteDuration is set to true. There
    shall be only one OperationalLimitType of kind PATL per OperationalLimitSet
    if the PATL is ApparentPowerLimit, ActivePowerLimit, or CurrentLimit
    for a given Terminal or Equipment.
    '''

    patlt = 'patlt'
    '''
    Permanent Admissible Transmission Loading Threshold (PATLT) is a value
    in engineering units defined for PATL and calculated using a percentage
    less than 100 % of the PATL type intended to alert operators of an
    arising condition. The percentage should be given in the name of the
    OperationalLimitSet. The aceptableDuration is another way to express
    the severity of the limit.
    '''

    stability = 'stability'
    '''
    Stability.
    '''

    tatl = 'tatl'
    '''
    Temporarily Admissible Transmission Loading (TATL) which is the loading
    in amperes, MVA or MW that can be accepted by a branch for a certain
    limited duration.
    The TATL can be defined in different ways:
    <ul>
    <li>as a fixed percentage of the PATL for a given time (for example,
    115% of the PATL that can be accepted during 15 minutes),</li>
    </ul>
    <ul>
    <li>pairs of TATL type and Duration calculated for each line taking
    into account its particular configuration and conditions of functioning
    (for example, it can define a TATL acceptable during 20 minutes and
    another one acceptable during 10 minutes).</li>
    </ul>
    Such a definition of TATL can depend on the initial operating conditions
    of the network element (sag situation of a line).
    The duration attribute can be used to define several TATL limit types.
    Hence multiple TATL limit values may exist having different durations.
    '''

    tc = 'tc'
    '''
    Tripping Current (TC) is the ultimate intensity without any delay.
    It is defined as the threshold the line will trip without any possible
    remedial actions.
    The tripping of the network element is ordered by protections against
    short circuits or by overload protections, but in any case, the activation
    delay of these protections is not compatible with the reaction delay
    of an operator (less than one minute).
    The duration is always zero if the OperationalLimitType.acceptableDuration
    is exchanged. Only one limit value exists for the TC type.
    '''

    tct = 'tct'
    '''
    Tripping Current Threshold (TCT) is a value in engineering units defined
    for TC and calculated using a percentage less than 100 % of the TC
    type intended to alert operators of an arising condition. The percentage
    should be given in the name of the OperationalLimitSet. The aceptableDuration
    is another way to express the severity of the limit.
    '''

    warningVoltage = 'warningVoltage'
    '''
    Voltage warning.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100-European#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MarineStructureKind(Enum):
    '''
    Kind of marine structure.
    '''

    floating = 'floating'
    '''
    Submarine structure that ensure asset is floating.
    '''

    other = 'other'
    '''
    Submarine structure that include tunnel.
    '''

    seabed = 'seabed'
    '''
    Submarine structure that ensure asset is located on the seabed or sea
    floor.
    '''

    seabedTrench = 'seabedTrench'
    '''
    Submarine structure as trench on the seabed or sea floor.
    '''

    tunnel = 'tunnel'
    '''
    Submarine structure that include tunnel.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MarineUnitKind(Enum):
    '''
    Kind of marine energy capture.
    '''

    currents = 'currents'
    '''
    Capture energy from ocean current which are caused by forces like breaking
    waves, wind, coriolis effect etc.
    '''

    other = 'other'
    '''
    Other way of capture energy from marine elements.
    '''

    pressure = 'pressure'
    '''
    Capture energy from pressure.
    '''

    tidal = 'tidal'
    '''
    Capture energy from tidal power, which captures the energy of the current
    caused by the gravitational pull of the Sun and Moon.
    '''

    wave = 'wave'
    '''
    Capture energy from wind waves.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MarketProductType(Enum):
    '''
    For example:
    Energy, Reg Up, Reg Down, Spin Reserve, Nonspin Reserve, RUC, Load Folloing
    Up, and Load Following Down.
    '''

    CO2e = 'CO2e'
    '''
    A carbon dioxide equivalent is a metric measure used to compare the
    emissions from various greenhouse gases on the basis of their global-warming
    potential (GWP), by converting amounts of other gases to the equivalent
    amount of carbon dioxide with the same global warming potential.
    '''

    EN = 'EN'
    '''
    Energy generally priced per kWh or MWh.
    '''

    LFD = 'LFD'
    '''
    Load following down (power withdrawal) generally priced per kW or MW.
    '''

    LFU = 'LFU'
    '''
    Load following up (power injection) generally priced per kW or MW.
    '''

    NR = 'NR'
    '''
    Non-spinning Reserve or Replacement Reserve generally priced per kWh
    or MWh.
    '''

    RC = 'RC'
    '''
    Resources with available capacity for a forward market such as Day
    Ahead that are awarded due to their need for resource adequacy (i.e.
    reliability) purposes. RC represents the process for reliability unit
    commitment.
    '''

    RD = 'RD'
    '''
    Frequency Regulation Service (energy withdrawal).
    '''

    REG = 'REG'
    '''
    Frequency Regulation Service (injection and/or withdrawal).
    '''

    RMD = 'RMD'
    '''
    Regulation Mileage Down.
    '''

    RMU = 'RMU'
    '''
    Regulation Mileage Up.
    '''

    RPD = 'RPD'
    '''
    RampDown: Power withdrawal generally priced per kW or MW.
    '''

    RPU = 'RPU'
    '''
    RampUp: Power injection generally priced per kW or MW.
    '''

    RU = 'RU'
    '''
    Frequency Regulation Service (energy injection).
    '''

    SR = 'SR'
    '''
    Spinning Reserve or Contingency Reserve generally priced per kWh or
    MWh.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MarketType(Enum):
    '''
    Market type.
    '''

    DAM = 'DAM'
    '''
    Day ahead market.
    '''

    HAM = 'HAM'
    '''
    Hour Ahead Market.
    '''

    RTM = 'RTM'
    '''
    Real time market.
    '''

    RUC = 'RUC'
    '''
    Residual Unit Commitment.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MktAccountKind(Enum):
    '''
    Kind of Market account.
    '''

    estimate = 'estimate'
    '''
    '''

    normal = 'normal'
    '''
    '''

    reversal = 'reversal'
    '''
    '''

    statistical = 'statistical'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MktBillMediaKind(Enum):
    '''
    Kind of bill media.
    '''

    electronic = 'electronic'
    '''
    '''

    other = 'other'
    '''
    '''

    paper = 'paper'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MktInvoiceLineItemKind(Enum):
    '''
    Kind of invoice line item.
    '''

    initial = 'initial'
    '''
    '''

    other = 'other'
    '''
    '''

    recalculation = 'recalculation'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.NC)
@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class NuclearReactorKind(Enum):
    '''
    Kind of nuclear reactor.
    '''

    breeder = 'breeder'
    '''
    Reactor whose heat source is a nuclear reactor that generates more
    fissile material than it consumes.
    '''

    graphite = 'graphite'
    '''
    Reactor whose heat source is a graphite-moderated reactor that is a
    nuclear reactor that uses carbon as a neutron moderator, which allows
    natural uranium to be used as nuclear fuel.
    '''

    heavyWater = 'heavyWater'
    '''
    Reactor whose heat source is a pressurized heavy-water reactor (PHWR)
    that uses heavy water (deuterium oxide D2O) as its coolant and neutron
    moderator.
    '''

    lightWater = 'lightWater'
    '''
    Reactor whose heat source is a light-water reactor (LWR) that is a
    type of thermal-neutron reactor that uses normal water, as both its
    coolant and neutron moderator � furthermore a solid form of fissile
    elements is used as fuel.
    '''

    liquidMetal = 'liquidMetal'
    '''
    Reactor whose liquid metal cooled nuclear reactor, liquid metal fast
    reactor or LMFR is an advanced type of nuclear reactor where the primary
    coolant is a liquid metal.
    '''

    other = 'other'
    '''
    Other type of nuclear reactors.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilPreservationKind(Enum):
    '''
    Kind of oil preservation.
    '''

    conservator = 'conservator'
    '''
    '''

    freeBreathing = 'freeBreathing'
    '''
    '''

    nitrogenBlanket = 'nitrogenBlanket'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OperatingMechanismKind(Enum):
    '''
    Kinds of operating mechanisms.
    '''

    capacitorTrip = 'capacitorTrip'
    '''
    Capacitor trip mechanism.
    '''

    hydraulic = 'hydraulic'
    '''
    Hydraulic mechanism.
    '''

    pneudraulic = 'pneudraulic'
    '''
    Pneudraulic mechanism.
    '''

    pneumatic = 'pneumatic'
    '''
    Pneumatic mechanism.
    '''

    solenoid = 'solenoid'
    '''
    Solenoid mechanism.
    '''

    spring = 'spring'
    '''
    Spring mechanism.
    '''

    springHandCrank = 'springHandCrank'
    '''
    Spring hand-crank mechanism.
    '''

    springHydraulic = 'springHydraulic'
    '''
    Spring hydraulic mechanism.
    '''

    springMotor = 'springMotor'
    '''
    Spring motor mechanism.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OperationalLimitDirectionKind(Enum):
    '''
    The direction attribute describes the side of a limit that is a violation.
    '''

    absoluteValue = 'absoluteValue'
    '''
    An absoluteValue limit means that a monitored absolute value above
    the limit value is a violation.
    '''

    high = 'high'
    '''
    High means that a monitored value above the limit value is a violation.
    If applied to a terminal flow, the positive direction is into the terminal.
    '''

    low = 'low'
    '''
    Low means a monitored value below the limit is a violation. If applied
    to a terminal flow, the positive direction is into the terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.gmdm)
@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OrderedPhaseCodeKind(Enum):
    '''
    In some use cases, the ordering of phases is important. The PhaseCode class
    does not represent order, but this class addresses such use cases. When
    two or more phases are present, the individual phases may occur in any
    order, but the neutral must always occur last. When only one phase and
    the neutral is present, that phase and the neutral may be re-ordered.
    '''

    A = 'A'
    '''
    '''

    AB = 'AB'
    '''
    '''

    ABC = 'ABC'
    '''
    '''

    ABCN = 'ABCN'
    '''
    '''

    ABN = 'ABN'
    '''
    '''

    AC = 'AC'
    '''
    '''

    ACB = 'ACB'
    '''
    '''

    ACBN = 'ACBN'
    '''
    '''

    ACN = 'ACN'
    '''
    '''

    AN = 'AN'
    '''
    '''

    B = 'B'
    '''
    '''

    BA = 'BA'
    '''
    '''

    BAC = 'BAC'
    '''
    '''

    BACN = 'BACN'
    '''
    '''

    BAN = 'BAN'
    '''
    '''

    BC = 'BC'
    '''
    '''

    BCA = 'BCA'
    '''
    '''

    BCAN = 'BCAN'
    '''
    '''

    BCN = 'BCN'
    '''
    '''

    BN = 'BN'
    '''
    '''

    C = 'C'
    '''
    '''

    CA = 'CA'
    '''
    '''

    CAB = 'CAB'
    '''
    '''

    CABN = 'CABN'
    '''
    '''

    CAN = 'CAN'
    '''
    '''

    CB = 'CB'
    '''
    '''

    CBA = 'CBA'
    '''
    '''

    CBAN = 'CBAN'
    '''
    '''

    CBN = 'CBN'
    '''
    '''

    CN = 'CN'
    '''
    '''

    NA = 'NA'
    '''
    '''

    NB = 'NB'
    '''
    '''

    NC = 'NC'
    '''
    '''

    Ns1 = 'Ns1'
    '''
    '''

    Ns2 = 'Ns2'
    '''
    '''

    X = 'X'
    '''
    '''

    XN = 'XN'
    '''
    '''

    XY = 'XY'
    '''
    '''

    XYN = 'XYN'
    '''
    '''

    none = 'none'
    '''
    '''

    s1 = 's1'
    '''
    '''

    s12 = 's12'
    '''
    '''

    s12N = 's12N'
    '''
    '''

    s1N = 's1N'
    '''
    '''

    s2 = 's2'
    '''
    '''

    s21 = 's21'
    '''
    '''

    s21N = 's21N'
    '''
    '''

    s2N = 's2N'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://epri.com/gmdm/2025#'
    @property
    def __package__(self):
        return 'AssetInfoEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.gmdm)
@stereotype(CIMStereotype.enumeration)
class OrderedPhaseCodeKind1(Enum):
    '''
    In some use cases, the ordering of phases is important. The PhaseCode class
    does not represent order, but this class addresses such use cases. When
    two or more phases are present, the individual phases may occur in any
    order, but the neutral must always occur last. When only one phase and
    the neutral is present, that phase and the neutral may be re-ordered.
    '''

    A = 'A'
    '''
    '''

    AB = 'AB'
    '''
    '''

    ABC = 'ABC'
    '''
    '''

    ABCN = 'ABCN'
    '''
    '''

    ABN = 'ABN'
    '''
    '''

    AC = 'AC'
    '''
    '''

    ACB = 'ACB'
    '''
    '''

    ACBN = 'ACBN'
    '''
    '''

    ACN = 'ACN'
    '''
    '''

    AN = 'AN'
    '''
    '''

    B = 'B'
    '''
    '''

    BA = 'BA'
    '''
    '''

    BAC = 'BAC'
    '''
    '''

    BACN = 'BACN'
    '''
    '''

    BAN = 'BAN'
    '''
    '''

    BC = 'BC'
    '''
    '''

    BCA = 'BCA'
    '''
    '''

    BCAN = 'BCAN'
    '''
    '''

    BCN = 'BCN'
    '''
    '''

    BN = 'BN'
    '''
    '''

    C = 'C'
    '''
    '''

    CA = 'CA'
    '''
    '''

    CAB = 'CAB'
    '''
    '''

    CABN = 'CABN'
    '''
    '''

    CAN = 'CAN'
    '''
    '''

    CB = 'CB'
    '''
    '''

    CBA = 'CBA'
    '''
    '''

    CBAN = 'CBAN'
    '''
    '''

    CBN = 'CBN'
    '''
    '''

    CN = 'CN'
    '''
    '''

    NA = 'NA'
    '''
    '''

    NB = 'NB'
    '''
    '''

    NC = 'NC'
    '''
    '''

    Ns1 = 'Ns1'
    '''
    '''

    Ns2 = 'Ns2'
    '''
    '''

    X = 'X'
    '''
    '''

    XN = 'XN'
    '''
    '''

    XY = 'XY'
    '''
    '''

    XYN = 'XYN'
    '''
    '''

    none = 'none'
    '''
    '''

    s1 = 's1'
    '''
    '''

    s12 = 's12'
    '''
    '''

    s12N = 's12N'
    '''
    '''

    s1N = 's1N'
    '''
    '''

    s2 = 's2'
    '''
    '''

    s21 = 's21'
    '''
    '''

    s21N = 's21N'
    '''
    '''

    s2N = 's2N'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://epri.com/gmdm/2025#'
    @property
    def __package__(self):
        return 'AssetInfoEXT'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OrganisationCategoryKind(Enum):
    '''
    A list of the different kinds of organisations.
    '''

    adhoc = 'adhoc'
    '''
    A temporary organization formed for a specific task or purpose, dissolving
    once its objective is met.
    '''

    association = 'association'
    '''
    A group of individuals or organizations united by a common purpose,
    interest, or profession.
    '''

    board = 'board'
    '''
    A governing body responsible for oversight, decision-making, and policy-setting
    within an organization.
    '''

    committee = 'committee'
    '''
    A subgroup within an organization assigned to focus on a specific task,
    issue, or function.
    '''

    company = 'company'
    '''
    A business entity engaged in commercial, industrial, or professional
    activities.
    '''

    consortium = 'consortium'
    '''
    A collaboration of multiple entities pooling resources to achieve a
    shared objective.
    '''

    cooperative = 'cooperative'
    '''
    A member-owned organization that operates for the mutual benefit of
    its members.
    '''

    corporateDivision = 'corporateDivision'
    '''
    A distinct operational segment within a larger company, often focusing
    on a specific product or market.
    '''

    council = 'council'
    '''
    A formal assembly of members who deliberate and make decisions on policies
    or governance matters.
    '''

    department = 'department'
    '''
    A specialized functional unit within a larger organization responsible
    for specific tasks or services.
    '''

    governmentAgency = 'governmentAgency'
    '''
    A public sector entity created to implement laws, policies, and services
    for the public.
    '''

    group = 'group'
    '''
    A general term for an organized collection of individuals or entities
    working toward a common goal.
    '''

    hybrid = 'hybrid'
    '''
    An organization combining characteristics of multiple organizational
    types, such as public-private partnerships.
    '''

    institution = 'institution'
    '''
    A structured entity, often longstanding, dedicated to a specific function
    such as education, research, or governance.
    '''

    judicialBody = 'judicialBody'
    '''
    An organization or panel responsible for interpreting and applying
    laws within a legal system.
    '''

    legislativeBody = 'legislativeBody'
    '''
    A governmental entity empowered to create, amend, and enact laws.
    '''

    political = 'political'
    '''
    An organization focused on influencing government policy, elections,
    or political ideology.
    '''

    section = 'section'
    '''
    A subdivision within a larger organization dedicated to a particular
    function or area of expertise.
    '''

    subcommittee = 'subcommittee'
    '''
    A smaller group within a committee tasked with addressing a specific
    aspect of the committee's work.
    '''

    team = 'team'
    '''
    A group of individuals collaborating to achieve a shared objective
    or complete a project.
    '''

    unit = 'unit'
    '''
    A distinct operational component within an organization, often focusing
    on a specific function or task.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OrientationKind(Enum):
    '''
    The orientation of the coordinate system with respect to top, left, and
    the coordinate number system.
    '''

    negative = 'negative'
    '''
    For 2D diagrams, a negative orientation gives the left-hand orientation
    (favoured by computer graphics displays) with X values increasing from
    left to right and Y values increasing from top to bottom. This is also
    known as a left hand orientation.
    '''

    positive = 'positive'
    '''
    For 2D diagrams, a positive orientation will result in X values increasing
    from left to right and Y values increasing from bottom to top. This
    is also known as a right hand orientation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PetersenCoilModeKind(Enum):
    '''
    The mode of operation for a Petersen coil.
    '''

    automaticPositioning = 'automaticPositioning'
    '''
    Automatic positioning.
    '''

    fixed = 'fixed'
    '''
    Fixed position.
    '''

    manual = 'manual'
    '''
    Manual positioning.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PhaseCode(Enum):
    '''
    Enumeration of phase identifiers used to designate the combination of phase
    and/or neutral conductors at a terminal, measurement or equipment modelled
    as a single-line balanced equivalent.
    This is an unordered enumeration of phase identifiers. Allows designation
    of phases for both transmission and distribution equipment, circuits and
    loads. The enumeration, by itself, does not describe how the phases are
    connected together or connected to ground. Ground is not explicitly denoted
    as a phase.
    Residential and small commercial loads are often served from single-phase,
    or split-phase, secondary circuits. For the example of s12N, phases 1 and
    2 refer to hot wires that are 180 degrees out of phase, while N refers
    to the neutral wire. Through single-phase transformer connections, these
    secondary circuits may be served from one or two of the primary phases
    A, B, and C. For three-phase loads, use the A, B, C phase codes instead
    of s12N.
    The integer values are from IEC 61968-9 to support revenue metering applications.
    '''

    A = 'A'
    '''
    Phase A.
    '''

    AB = 'AB'
    '''
    Phases A and B.
    '''

    ABC = 'ABC'
    '''
    Phases A, B, and C.
    '''

    ABCN = 'ABCN'
    '''
    Phases A, B, C, and N.
    '''

    ABN = 'ABN'
    '''
    Phases A, B, and neutral.
    '''

    AC = 'AC'
    '''
    Phases A and C.
    '''

    ACN = 'ACN'
    '''
    Phases A, C and neutral.
    '''

    AN = 'AN'
    '''
    Phases A and neutral.
    '''

    B = 'B'
    '''
    Phase B.
    '''

    BC = 'BC'
    '''
    Phases B and C.
    '''

    BCN = 'BCN'
    '''
    Phases B, C, and neutral.
    '''

    BN = 'BN'
    '''
    Phases B and neutral.
    '''

    C = 'C'
    '''
    Phase C.
    '''

    CN = 'CN'
    '''
    Phases C and neutral.
    '''

    N = 'N'
    '''
    Neutral phase.
    '''

    X = 'X'
    '''
    Unknown non-neutral phase.
    '''

    XN = 'XN'
    '''
    Unknown non-neutral phase plus neutral.
    '''

    XY = 'XY'
    '''
    Two unknown non-neutral phases.
    '''

    XYN = 'XYN'
    '''
    Two unknown non-neutral phases plus neutral.
    '''

    none = 'none'
    '''
    No phases specified.
    '''

    s1 = 's1'
    '''
    Secondary phase 1.
    '''

    s12 = 's12'
    '''
    Secondary phase 1 and 2.
    '''

    s12N = 's12N'
    '''
    Secondary phases 1, 2, and neutral.
    '''

    s1N = 's1N'
    '''
    Secondary phase 1 and neutral.
    '''

    s2 = 's2'
    '''
    Secondary phase 2.
    '''

    s2N = 's2N'
    '''
    Secondary phase 2 and neutral.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PhaseCountKind(Enum):
    '''
    Number of phases supported by a device.
    '''

    other = 'other'
    '''
    Other
    '''

    singlePhase = 'singlePhase'
    '''
    Single phase
    '''

    threePhase = 'threePhase'
    '''
    Three phases
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PhaseShuntConnectionKind(Enum):
    '''
    The configuration of phase connections for a single terminal device such
    as a load or capacitor.
    '''

    D = 'D'
    '''
    Delta connection.
    '''

    G = 'G'
    '''
    Ground connection; use when explicit connection to ground needs to
    be expressed in combination with the phase code, such as for electrical
    wire/cable or for meters.
    '''

    I = 'I'
    '''
    Independent winding, for single-phase connections.
    '''

    Y = 'Y'
    '''
    Wye connection.
    '''

    Yn = 'Yn'
    '''
    Wye, with neutral brought out for grounding.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PipeBusbarKind(Enum):
    '''
    Kind of pipe busbar
    '''

    Schedule40 = 'Schedule40'
    '''
    Size Schedule 40
    '''

    Schedule80 = 'Schedule80'
    '''
    Size Schedule 80
    '''

    other = 'other'
    '''
    Other
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PotentialTransformerKind(Enum):
    '''
    The construction kind of the potential transformer.
    '''

    capacitiveCoupling = 'capacitiveCoupling'
    '''
    The potential transformer is using capacitive coupling to create secondary
    voltage.
    '''

    inductive = 'inductive'
    '''
    The potential transformer is using induction coils to create secondary
    voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PowerElectricalChemicalUnitKind(Enum):
    '''
    Kind of power electrical chemical unit.
    '''

    electrolyticCell = 'electrolyticCell'
    '''
    An electrolytic cell is an electrochemical cell that drives a non-spontaneous
    redox reaction through the application of electrical energy. Example
    are the decomposition of water into hydrogen and oxygen.
    '''

    fuelCell = 'fuelCell'
    '''
    A fuel cell is an electrochemical cell that converts the chemical energy
    from a fuel into electricity through an electrochemical reaction of
    hydrogen fuel with oxygen or another oxidizing agent.
    '''

    other = 'other'
    '''
    Other type of cell used in chemical reactions.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PowerElectronicsGateKind(Enum):
    '''
    Type of power electronics component used to control MW and MVAR
    '''

    gto = 'gto'
    '''
    Gate Turn-off Thyristor
    '''

    iegt = 'iegt'
    '''
    Injection Enhanced Gate Transistor
    '''

    igbt = 'igbt'
    '''
    Insulated-Gate Bipolar Transistor
    '''

    igct = 'igct'
    '''
    Integrated Gate Commutated Thyristor
    '''

    other = 'other'
    '''
    Other
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PriceTypeKind(Enum):
    '''
    Value of this enumeration for different prices include "total" for the
    complete/full/all-in price, "congestion" for the congestion cost associated
    with the total price, the "loss" for the loss price associated with the
    total price, "capacity" for prices related to installed or reserved capacity,
    "mileage" for use-based accounting, "system" for system-wide/copper-plate
    prices, and "delivery" for distribution-based prices.
    '''

    capacity = 'capacity'
    '''
    '''

    congestion = 'congestion'
    '''
    '''

    delivery = 'delivery'
    '''
    '''

    loss = 'loss'
    '''
    '''

    mileage = 'mileage'
    '''
    '''

    system = 'system'
    '''
    '''

    total = 'total'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RampingPrincipleKind(Enum):
    '''
    Kind of ramping principle.
    '''

    continuous = 'continuous'
    '''
    Continuous ramping principle is applied between two scheduled time
    point. For instance, from 10 MW to 70 MW over one hour the change is
    1 MW/min.
    '''

    fifteenMinutes = 'fifteenMinutes'
    '''
    Fifteen minutes ramping principle. Ramping starts 15 minutes before
    the schedule time point and ends 15 minutes after. For instance, if
    the schedule time point is 19:30h it starts at 19:15h and ends at 19:45h.
    '''

    fiveMinutes = 'fiveMinutes'
    '''
    Five minutes ramping principle. Ramping starts five minutes before
    the schedule time point and ends five minutes after. For instance,
    if the schedule time point is 19:30h it starts at 19:25h and ends at
    19:35h.
    '''

    maxContinuous = 'maxContinuous'
    '''
    Maximum continuous ramping principle. The schedule is kept as long
    as possible and the maximum ramping rate is used to get from one point
    to another, symmetrically around the schedule time points. For example,
    there is 40 MW change in the schedule the maximum ramp rate is 20 MW/min
    the ramping starts 1 min before (e.g. 19:29h) and finishes 1 min after
    (e.g. 19:31h).
    '''

    tenMinutes = 'tenMinutes'
    '''
    Ten minutes ramping principle. Ramping starts 10 minutes before the
    schedule time point and ends 10 minutes after. For instance, if the
    schedule time point is 19:30h it starts at 19:20h and ends at 19:40h.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ReactorCoreKind(Enum):
    '''
    '''

    air = 'air'
    '''
    '''

    concrete = 'concrete'
    '''
    '''

    none = 'none'
    '''
    '''

    other = 'other'
    '''
    '''

    steel = 'steel'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ReactorInsulationMediumKind(Enum):
    '''
    '''

    air = 'air'
    '''
    '''

    oil = 'oil'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RegulatingControlModeKind(Enum):
    '''
    The kind of regulation model. For example regulating voltage, reactive
    power, active power, etc.
    '''

    activePower = 'activePower'
    '''
    Active power is specified.
    '''

    admittance = 'admittance'
    '''
    Admittance is specified.
    '''

    currentFlow = 'currentFlow'
    '''
    Current flow is specified.
    '''

    powerFactor = 'powerFactor'
    '''
    Power factor is specified.
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive power is specified.
    '''

    temperature = 'temperature'
    '''
    Control switches on/off based on the local temperature (i.e., a thermostat).
    '''

    timeScheduled = 'timeScheduled'
    '''
    Control switches on/off by time of day. The times may change on the
    weekend, or in different seasons.
    '''

    voltage = 'voltage'
    '''
    Voltage is specified.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ResourceCapacityType(Enum):
    '''
    Resource capacity type.
    '''

    FO = 'FO'
    '''
    Flexible Offer.
    '''

    MO = 'MO'
    '''
    Must Offer.
    '''

    NR = 'NR'
    '''
    Non spinning reserve.
    '''

    RA = 'RA'
    '''
    Resource Adequacy.
    '''

    RD = 'RD'
    '''
    Regulation Down.
    '''

    RMR = 'RMR'
    '''
    Reliability Must Run.
    '''

    RU = 'RU'
    '''
    Regulation Up.
    '''

    SR = 'SR'
    '''
    Spinning reserve.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ResourceRegistrationStatus(Enum):
    '''
    Types of resource registration status.
    '''

    Active = 'Active'
    '''
    Resource registration is active
    '''

    Decommissioned = 'Decommissioned'
    '''
    Resource registration status is decommissioned
    '''

    Inactive = 'Inactive'
    '''
    Resource registration status is inactive.
    '''

    Mothballed = 'Mothballed'
    '''
    Resource registration has been suspended
    '''

    Planned = 'Planned'
    '''
    Registration status is in the planning stage
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ResponsibilityKind(Enum):
    '''
    The kinds of responsibilities that are assigned. Mandatory and optional
    responsibilities are examples.
    '''

    mandatory = 'mandatory'
    '''
    A mandatory requirement.
    '''

    optional = 'optional'
    '''
    An optional requirement.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SSSCControlModeKind(Enum):
    '''
    Control modes of the Static Synchronous Series Compensator (SSSC).
    '''

    currentDroop = 'currentDroop'
    '''
    <font color="#636671">The device injects a voltage proportional to
    the difference between the line current and the target value of the
    CurrentDroopControlFunction. There are capacitive and inductive operational
    regions.</font>
    '''

    effectiveReactance = 'effectiveReactance'
    '''
    <font color="#636671">The device injects a voltage proportional to
    the line current to achieve the specified target value defined by the
    ImpedanceControlFunction. The voltage will vary according to the line
    current level.</font>
    '''

    monitoring = 'monitoring'
    '''
    <font color="#636671">The device bypasses and a voltage injection is
    close to zero. In monitoring mode current is monitored.</font>
    '''

    voltageInjection = 'voltageInjection'
    '''
    <font color="#636671">The device injects a fixed voltage that is either
    inductive or capacitive according to the specified target value of
    the VoltageInjectionControlFunction. The effective reactance varies
    according to the flow of the line current.</font>
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'FACTS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class STATCOMKind(Enum):
    '''
    This enumeration defines the basic architecture of the STATCOM.
    There are two basic types:
    Voltage Source Converter controlling a DC Capacitor and a Current Source
    Converter controlling a DC Inductor.
    '''

    cscShuntInductor = 'cscShuntInductor'
    '''
    Current Source Converter with a DC inductor
    '''

    other = 'other'
    '''
    Other
    '''

    vscShuntCapacitor = 'vscShuntCapacitor'
    '''
    Voltage Source Converter with a DC capacitor
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SVCControlMode(Enum):
    '''
    Static VAr Compensator control mode.
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive power control.
    '''

    voltage = 'voltage'
    '''
    Voltage control.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SVCReactiveControlKind(Enum):
    '''
    An SVC can either be set to control the voltage of a bus or provide contant
    Mvar to the bus.
    '''

    constantMVARFlow = 'constantMVARFlow'
    '''
    The SVC will maintain a constant Mvar flow to the bus regardless of
    voltage.
    '''

    constantVoltage = 'constantVoltage'
    '''
    The SVC will retain a constant voltage by varying the reactive power
    flow to the bus.
    '''

    other = 'other'
    '''
    Other
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ShortCircuitRotorKind(Enum):
    '''
    Type of rotor, used by short circuit applications.
    '''

    salientPole1 = 'salientPole1'
    '''
    Salient pole 1 in IEC 60909.
    '''

    salientPole2 = 'salientPole2'
    '''
    Salient pole 2 in IEC 60909.
    '''

    turboSeries1 = 'turboSeries1'
    '''
    Turbo Series 1 in IEC 60909.
    '''

    turboSeries2 = 'turboSeries2'
    '''
    Turbo series 2 in IEC 60909.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.add)
class SinglePhaseKind(Enum):
    '''
    Enumeration of phase identifiers used to designate the specific phase of
    conducting equipment modelled as individual unbalanced phases.
    Allows designation of specific phases for transmission and distribution
    equipment, circuits and loads.
    '''

    A = 'A'
    '''
    Phase A.
    '''

    B = 'B'
    '''
    Phase B.
    '''

    C = 'C'
    '''
    Phase C.
    '''

    N = 'N'
    '''
    Neutral.
    '''

    s1 = 's1'
    '''
    Secondary phase 1.
    '''

    s2 = 's2'
    '''
    Secondary phase 2.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.deprecated)
@stereotype(CIMStereotype.Attribute)
class SkillLevelKind(Enum):
    '''
    Kind of skill level.
    '''

    apprentice = 'apprentice'
    '''
    '''

    expert = 'expert'
    '''
    Expert (or Advanced) level refers to individuals who have achieved
    a high level of competence and mastery in their field. They have extensive
    knowledge, experience, and specialized skills. They are capable of
    handling complex and challenging tasks, problem-solving, and providing
    leadership and guidance to others.
    '''

    master = 'master'
    '''
    '''

    novice = 'novice'
    '''
    Novice (or Beginner) level represents individuals who are new to the
    field and have limited knowledge and experience. They are in the early
    stages of skill development and require guidance, instruction, and
    supervision to perform tasks effectively.
    '''

    other = 'other'
    '''
    A kind of skill level that is not enumerated.
    '''

    proficient = 'proficient'
    '''
    Proficient (or Intermediate) level signifies individuals who have gained
    a foundational understanding of the field and possess a moderate level
    of expertise. They can perform tasks independently with a reasonable
    level of competency and are capable of handling routine and moderately
    complex assignments.
    '''

    specialist = 'specialist'
    '''
    Specialist level represents individuals who have achieved an exceptional
    level of expertise and focus in a specific area within the field. They
    possess deep knowledge, advanced skills, and often have significant
    experience in a particular niche or specialization. Specialists are
    sought after for their unique capabilities and may be considered authorities
    or thought leaders in their field.
    '''

    standard = 'standard'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class Source(Enum):
    '''
    Source gives information related to the origin of a value.
    '''

    DEFAULTED = 'DEFAULTED'
    '''
    The value contains a default value.
    '''

    PROCESS = 'PROCESS'
    '''
    The value is provided by input from the process I/O or being calculated
    from some function.
    '''

    SUBSTITUTED = 'SUBSTITUTED'
    '''
    The value is provided by input of an operator or by an automatic source.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class StructureMaterialKind(Enum):
    '''
    Kind of material used for structures.
    '''

    concrete = 'concrete'
    '''
    '''

    other = 'other'
    '''
    '''

    steel = 'steel'
    '''
    '''

    wood = 'wood'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SynchronousMachineKind(Enum):
    '''
    Synchronous machine type.
    '''

    condenser = 'condenser'
    '''
    Indicates the synchronous machine can operate as a condenser.
    '''

    generator = 'generator'
    '''
    Indicates the synchronous machine can operate as a generator.
    '''

    generatorOrCondenser = 'generatorOrCondenser'
    '''
    Indicates the synchronous machine can operate as a generator or as
    a condenser.
    '''

    generatorOrCondenserOrMotor = 'generatorOrCondenserOrMotor'
    '''
    Indicates the synchronous machine can operate as a generator or as
    a condenser or as a motor.
    '''

    generatorOrMotor = 'generatorOrMotor'
    '''
    Indicates the synchronous machine can operate as a generator or as
    a motor.
    '''

    motor = 'motor'
    '''
    Indicates the synchronous machine can operate as a motor.
    '''

    motorOrCondenser = 'motorOrCondenser'
    '''
    Indicates the synchronous machine can operate as a motor or as a condenser.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SynchronousMachineOperatingMode(Enum):
    '''
    Synchronous machine operating mode.
    '''

    condenser = 'condenser'
    '''
    Operating as condenser.
    '''

    generator = 'generator'
    '''
    Operating as generator.
    '''

    motor = 'motor'
    '''
    Operating as motor.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TelephoneNumberKind(Enum):
    '''
    The kind of intended uss of a telephone number.
    '''

    fax = 'fax'
    '''
    A telephone number used to send or receive scanned printed materials
    over a telephone line or digital network.
    '''

    home = 'home'
    '''
    A telephone number used to contact a person at home.
    '''

    mobile = 'mobile'
    '''
    A telephone number used to make calls, send and receive text messages,
    and access data.
    '''

    other = 'other'
    '''
    The telephone number is other than indicated by the enumerations
    '''

    work = 'work'
    '''
    A telephone number used to contact a person at work or to contact an
    organisation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TelephonyKind(Enum):
    '''
    The kind of telephony technology or system telephone number is assigned
    to.
    '''

    cell = 'cell'
    '''
    A telephone number assigned to a cell phone and wireless cellular service.
    '''

    faxmachine = 'faxmachine'
    '''
    A telephone number assigned to an electronic device that scans documents
    and transmits signals over a telephone line or receives signals over
    a telephone line and prints a duplicate copy of a scanned document.
    '''

    landline = 'landline'
    '''
    A telephone number assigned to a phone connected to a landline telephone
    network.
    '''

    other = 'other'
    '''
    The telephone number is assigned to telephony other than indicated
    by the enumerations.
    '''

    pager = 'pager'
    '''
    A telephone number assigned to a pager (a one-way communication device)
    used to receive short messages or alerts, typically via radio signals
    or telephone networks.
    '''

    voIP = 'voIP'
    '''
    A telephone number assigned to a Voice over Internet Protocol network.
    '''

    voicemail = 'voicemail'
    '''
    A telephone number assigned to a one-way communication device used
    to record and playback audio messages.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TerminalConnectionKind(Enum):
    '''
    The terminal connection of the capacitor cans (i.e. single bushing, double
    bushing, or triple bushing
    '''

    doubleBushing = 'doubleBushing'
    '''
    designed to be connected in series with several cans
    '''

    other = 'other'
    '''
    Other
    '''

    singleBushing = 'singleBushing'
    '''
    Phase to ground application
    '''

    tripleBushing = 'tripleBushing'
    '''
    Single can wired three phase to ground
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class UndergroundStructureKind(Enum):
    '''
    Kind of underground structure.
    '''

    burd = 'burd'
    '''
    '''

    enclosure = 'enclosure'
    '''
    '''

    handhole = 'handhole'
    '''
    '''

    manhole = 'manhole'
    '''
    '''

    pad = 'pad'
    '''
    '''

    pullbox = 'pullbox'
    '''
    '''

    subsurfaceEnclosure = 'subsurfaceEnclosure'
    '''
    '''

    trench = 'trench'
    '''
    '''

    tunnel = 'tunnel'
    '''
    '''

    vault = 'vault'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class Validity(Enum):
    '''
    Validity for MeasurementValue.
    '''

    GOOD = 'GOOD'
    '''
    The value is marked good if no abnormal condition of the acquisition
    function or the information source is detected.
    '''

    INVALID = 'INVALID'
    '''
    The value is marked invalid when a supervision function recognises
    abnormal conditions of the acquisition function or the information
    source (missing or non-operating updating devices). The value is not
    defined under this condition. The mark invalid is used to indicate
    to the client that the value may be incorrect and shall not be used.
    '''

    QUESTIONABLE = 'QUESTIONABLE'
    '''
    The value is marked questionable if a supervision function detects
    an abnormal behaviour, however the value could still be valid. The
    client is responsible for determining whether or not values marked
    "questionable" should be used.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class VsPpccControlKind(Enum):
    '''
    Types applicable to the control of real power and/or DC voltage by voltage
    source converter.
    '''

    pPcc = 'pPcc'
    '''
    Control is real power at point of common coupling. The target value
    is provided by ACDCConverter.targetPpcc.
    '''

    pPccAndUdcDroop = 'pPccAndUdcDroop'
    '''
    Control is active power at point of common coupling and local DC voltage,
    with the droop. Target values are provided by ACDCConverter.targetPpcc,
    ACDCConverter.targetUdc and VsConverter.droop.
    '''

    pPccAndUdcDroopPilot = 'pPccAndUdcDroopPilot'
    '''
    Control is active power at point of common coupling and the pilot DC
    voltage, with the droop. The mode is used for Multi Terminal DC (MTDC)
    systems where multiple DC substations are connected to the DC transmission
    lines. The pilot voltage is then used to coordinate the control the
    DC voltage across the DC substations. Targets are provided by ACDCConverter.targetPpcc,
    ACDCConverter.targetUdc and VsConverter.droop.
    '''

    pPccAndUdcDroopWithCompensation = 'pPccAndUdcDroopWithCompensation'
    '''
    Control is active power at point of common coupling and compensated
    DC voltage, with the droop. Compensation factor is the resistance,
    as an approximation of the DC voltage of a common (real or virtual)
    node in the DC network. Targets are provided by ACDCConverter.targetPpcc,
    ACDCConverter.targetUdc, VsConverter.droop and VsConverter.droopCompensation.
    '''

    phasePcc = 'phasePcc'
    '''
    Control is phase at point of common coupling. Target is provided by
    VsConverter.targetPhasePcc.
    '''

    udc = 'udc'
    '''
    Control is DC voltage with target value provided by ACDCConverter.targetUdc.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class VsQpccControlKind(Enum):
    '''
    Kind of reactive power control at point of common coupling for a voltage
    source converter.
    '''

    powerFactorPcc = 'powerFactorPcc'
    '''
    Control is power factor at point of common coupling. Target is provided
    by VsConverter.targetPowerFactorPcc.
    '''

    pulseWidthModulation = 'pulseWidthModulation'
    '''
    No explicit control. Pulse-modulation factor is directly set in magnitude
    (VsConverter.targetPWMfactor) and phase (VsConverter.targetPhasePcc).
    '''

    reactivePcc = 'reactivePcc'
    '''
    Control is reactive power at point of common coupling. Target is provided
    by VsConverter.targetQpcc.
    '''

    voltagePcc = 'voltagePcc'
    '''
    Control is voltage at point of common coupling. Target is provided
    by VsConverter.targetUpcc.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WindGenUnitKind(Enum):
    '''
    Kind of wind generating unit.
    '''

    offshore = 'offshore'
    '''
    The wind generating unit is located offshore.
    '''

    onshore = 'onshore'
    '''
    The wind generating unit is located onshore.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WindingConnection(Enum):
    '''
    Winding connection type.
    '''

    A = 'A'
    '''
    Autotransformer common winding.
    '''

    D = 'D'
    '''
    Delta.
    '''

    I = 'I'
    '''
    Independent winding, for single-phase connections.
    '''

    Y = 'Y'
    '''
    Wye.
    '''

    Yn = 'Yn'
    '''
    Wye, with neutral brought out for grounding.
    '''

    Z = 'Z'
    '''
    ZigZag.
    '''

    Zn = 'Zn'
    '''
    ZigZag, with neutral brought out for grounding.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.add)
class WireConstructionKind(Enum):
    '''
    Kind of cable construction.
    '''

    other = 'other'
    '''
    Other kind of cable construction.
    '''

    solid = 'solid'
    '''
    Solid cable.
    '''

    stranded = 'stranded'
    '''
    Stranded cable.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WireInsulationKind(Enum):
    '''
    Kind of wire insulation.
    '''

    asbestosAndVarnishedCambric = 'asbestosAndVarnishedCambric'
    '''
    Asbestos and varnished cambric wire insulation.
    '''

    beltedPilc = 'beltedPilc'
    '''
    Belted pilc wire insulation.
    '''

    butyl = 'butyl'
    '''
    Butyl wire insulation.
    '''

    crosslinkedPolyethylene = 'crosslinkedPolyethylene'
    '''
    Crosslinked polyethylene wire insulation.
    '''

    ethylenePropyleneRubber = 'ethylenePropyleneRubber'
    '''
    Ethylene propylene rubber wire insulation.
    '''

    highMolecularWeightPolyethylene = 'highMolecularWeightPolyethylene'
    '''
    High nolecular weight polyethylene wire insulation.
    '''

    highPressureFluidFilled = 'highPressureFluidFilled'
    '''
    High pressure fluid filled wire insulation.
    '''

    lowCapacitanceRubber = 'lowCapacitanceRubber'
    '''
    Low capacitance rubber wire insulation.
    '''

    oilPaper = 'oilPaper'
    '''
    Oil paper wire insulation.
    '''

    other = 'other'
    '''
    Other kind of wire insulation.
    '''

    ozoneResistantRubber = 'ozoneResistantRubber'
    '''
    Ozone resistant rubber wire insulation.
    '''

    rubber = 'rubber'
    '''
    Rubber wire insulation.
    '''

    siliconRubber = 'siliconRubber'
    '''
    Silicon rubber wire insulation.
    '''

    treeResistantHighMolecularWeightPolyethylene = 'treeResistantHighMolecularWeightPolyethylene'
    '''
    Tree resistant high molecular weight polyethylene wire insulation.
    '''

    treeRetardantCrosslinkedPolyethylene = 'treeRetardantCrosslinkedPolyethylene'
    '''
    Tree retardant crosslinked polyethylene wire insulation.
    '''

    unbeltedPilc = 'unbeltedPilc'
    '''
    Unbelted pilc wire insulation.
    '''

    varnishedCambricCloth = 'varnishedCambricCloth'
    '''
    Varnished cambric cloth wire insulation.
    '''

    varnishedDacronGlass = 'varnishedDacronGlass'
    '''
    Varnished dacron glass wire insulation.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WireMaterialKind(Enum):
    '''
    Kind of wire material.
    '''

    aaac = 'aaac'
    '''
    Aluminum-alloy conductor steel reinforced.
    '''

    acsr = 'acsr'
    '''
    Aluminum conductor steel reinforced.
    '''

    aluminum = 'aluminum'
    '''
    Aluminum wire.
    '''

    aluminumAlloy = 'aluminumAlloy'
    '''
    Aluminum-alloy wire.
    '''

    aluminumAlloySteel = 'aluminumAlloySteel'
    '''
    Aluminum-alloy-steel wire.
    '''

    aluminumSteel = 'aluminumSteel'
    '''
    Aluminum-steel wire.
    '''

    copper = 'copper'
    '''
    Copper wire.
    '''

    other = 'other'
    '''
    Other wire material.
    '''

    steel = 'steel'
    '''
    Steel wire.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WireUsageKind(Enum):
    '''
    Kind of wire usage.
    '''

    distribution = 'distribution'
    '''
    Wire is used in medium voltage network.
    '''

    other = 'other'
    '''
    Other kind of wire usage.
    '''

    secondary = 'secondary'
    '''
    Wire is used in low voltage circuit.
    '''

    transmission = 'transmission'
    '''
    Wire is used in extra-high voltage or high voltage network.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class YesNo(Enum):
    '''
    Used as a flag set to Yes or No.
    '''

    NO = 'NO'
    '''
    '''

    YES = 'YES'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.gmdm)
@stereotype(CIMStereotype.enumeration)
class wmk(Enum):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ActivePower(CIMUnit):
    '''
    Product of RMS value of the voltage and the RMS value of the in-phase component
    of the current.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.W
    def __init__(self, value, input_unit: str='W', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ActivePowerChangeRate(CIMUnit):
    '''
    Rate of change of active power per time.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.WPers
    def __init__(self, value, input_unit: str='WPers', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ActivePowerPerCurrentFlow(CIMUnit):
    '''
    Active power variation with current flow.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.WPerA
    def __init__(self, value, input_unit: str='WPerA', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ActivePowerPerFrequency(CIMUnit):
    '''
    Active power variation with frequency.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.WPers
    def __init__(self, value, input_unit: str='WPers', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class AngleDegrees(CIMUnit):
    '''
    Measurement of angle in degrees.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.deg
    def __init__(self, value, input_unit: str='deg', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class AngleRadians(CIMUnit):
    '''
    Phase angle in radians.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.rad
    def __init__(self, value, input_unit: str='rad', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ApparentPower(CIMUnit):
    '''
    Product of the RMS value of the voltage and the RMS value of the current.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.VA
    def __init__(self, value, input_unit: str='VA', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Area(CIMUnit):
    '''
    Area.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m2
    def __init__(self, value, input_unit: str='m2', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Capacitance(CIMUnit):
    '''
    Capacitive part of reactance (imaginary part of impedance), at rated frequency.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.F
    def __init__(self, value, input_unit: str='F', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CapacitancePerLength(CIMUnit):
    '''
    Capacitance per unit of length.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.FPerm
    def __init__(self, value, input_unit: str='FPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Classification(CIMUnit):
    '''
    Classification of level. Specify as 1..n, with 1 being the most detailed,
    highest priority, etc as described on the attribute using this data type.
    '''

    value: int = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Conductance(CIMUnit):
    '''
    Factor by which voltage must be multiplied to give corresponding power
    lost from a circuit. Real part of admittance.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.S
    def __init__(self, value, input_unit: str='S', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ConductancePerLength(CIMUnit):
    '''
    Real part of admittance per unit of length.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.SPerm
    def __init__(self, value, input_unit: str='SPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CostPerEnergyUnit(CIMUnit):
    '''
    Cost, in units of currency, per quantity of electrical energy generated.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CostPerHeatUnit(CIMUnit):
    '''
    Cost, in units of currency, per quantity of heat generated.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CostPerVolume(CIMUnit):
    '''
    Cost per unit volume.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CostRate(CIMUnit):
    '''
    Cost, in units of currency, per elapsed time.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class CurrentFlow(CIMUnit):
    '''
    Electrical current with sign convention: positive flow is out of the conducting
    equipment into the connectivity node. Can be both AC and DC.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.A
    def __init__(self, value, input_unit: str='A', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Displacement(CIMUnit):
    '''
    Unit of displacement relative to a reference position, hence can be negative.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m
    def __init__(self, value, input_unit: str='m', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Emission(CIMUnit):
    '''
    Quantity of emission per fuel heat content.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.kgPerJ
    def __init__(self, value, input_unit: str='kgPerJ', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Frequency(CIMUnit):
    '''
    Cycles per second.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.Hz
    def __init__(self, value, input_unit: str='Hz', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class HeatRate(CIMUnit):
    '''
    Heat generated, in energy per time unit of elapsed time.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.J
    def __init__(self, value, input_unit: str='J', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Hours(CIMUnit):
    '''
    Time specified in hours.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.h
    def __init__(self, value, input_unit: str='h', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Impedance(CIMUnit):
    '''
    Ratio of voltage to current.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.ohm
    def __init__(self, value, input_unit: str='ohm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Inductance(CIMUnit):
    '''
    Inductive part of reactance (imaginary part of impedance), at rated frequency.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.H
    def __init__(self, value, input_unit: str='H', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class InductancePerLength(CIMUnit):
    '''
    Inductance per unit of length.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.HPerm
    def __init__(self, value, input_unit: str='HPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class KiloActivePower(CIMUnit):
    '''
    Active power in kilowatts.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.k)
    @property # read-only
    def unit(self):
        return UnitSymbol.W
    def __init__(self, value, input_unit: str='W', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Length(CIMUnit):
    '''
    Unit of length. It shall be a positive value or zero.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m
    def __init__(self, value, input_unit: str='m', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Mass(CIMUnit):
    '''
    Mass.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.kg
    def __init__(self, value, input_unit: str='kg', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class MassPerLength(CIMUnit):
    '''
    Mass per length. It shall be a positive value or zero.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.kgPerm
    def __init__(self, value, input_unit: str='kgPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Minutes(CIMUnit):
    '''
    Time in minutes.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.min
    def __init__(self, value, input_unit: str='min', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Money(CIMUnit):
    '''
    Amount of money.
    '''

    value: str = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class PU(CIMUnit):
    '''
    Per Unit - a positive or negative value referred to a defined base. Values
    typically range from -10 to +10.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class PerCent(CIMUnit):
    '''
    Percentage on a defined base. For example, specify as 100 to indicate at
    the defined base.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.none
    def __init__(self, value, input_unit: str='none', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Pressure(CIMUnit):
    '''
    Pressure in pascals.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.Pa
    def __init__(self, value, input_unit: str='Pa', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Reactance(CIMUnit):
    '''
    Reactance (imaginary part of impedance), at rated frequency.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.ohm
    def __init__(self, value, input_unit: str='ohm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ReactancePerLength(CIMUnit):
    '''
    Reactance (imaginary part of impedance) per unit of length, at rated frequency.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.ohmPerm
    def __init__(self, value, input_unit: str='ohmPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ReactivePower(CIMUnit):
    '''
    Product of RMS value of the voltage and the RMS value of the quadrature
    component of the current.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.VAr
    def __init__(self, value, input_unit: str='VAr', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class RealEnergy(CIMUnit):
    '''
    Real electrical energy.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.Wh
    def __init__(self, value, input_unit: str='Wh', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Resistance(CIMUnit):
    '''
    Resistance (real part of impedance).
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.ohm
    def __init__(self, value, input_unit: str='ohm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class ResistancePerLength(CIMUnit):
    '''
    Resistance (real part of impedance) per unit of length.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.ohmPerm
    def __init__(self, value, input_unit: str='ohmPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class RotationSpeed(CIMUnit):
    '''
    Number of revolutions per second.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.Hz
    def __init__(self, value, input_unit: str='Hz', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Seconds(CIMUnit):
    '''
    Time, in seconds.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.s
    def __init__(self, value, input_unit: str='s', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Susceptance(CIMUnit):
    '''
    Imaginary part of admittance.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.S
    def __init__(self, value, input_unit: str='S', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class SusceptancePerLength(CIMUnit):
    '''
    Imaginary part of admittance per unit of length.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.SPerm
    def __init__(self, value, input_unit: str='SPerm', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Temperature(CIMUnit):
    '''
    Value of temperature in degrees Celsius.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.degC
    def __init__(self, value, input_unit: str='degC', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Voltage(CIMUnit):
    '''
    Electrical voltage, can be both AC and DC.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.V
    def __init__(self, value, input_unit: str='V', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class VoltagePerReactivePower(CIMUnit):
    '''
    Voltage variation with reactive power.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.VPerVAr
    def __init__(self, value, input_unit: str='VPerVAr', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class Volume(CIMUnit):
    '''
    Volume.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m3
    def __init__(self, value, input_unit: str='m3', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class VolumeFlowRate(CIMUnit):
    '''
    Volume per time.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m3Pers
    def __init__(self, value, input_unit: str='m3Pers', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.CIMDatatype)
@dataclass(repr=False)
class WaterLevel(CIMUnit):
    '''
    Reservoir water level referred to a given datum such as mean sea level.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.m
    def __init__(self, value, input_unit: str='m', input_multiplier: str=None):
        self.__pint__(value=value, input_unit=input_unit, input_multiplier=input_multiplier)
    @property
    def __namespace__(self):
        return '#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return '1'


@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class DateTimeInterval(Identity):
    '''
    Interval between two date and time points, where the interval includes
    the start time but excludes end time.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.deprecated)
@dataclass(repr=False)
class StreetAddress(Identity):
    '''
    General purpose street and postal address information.
    '''

    language: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            The language in which the address is specified, using ISO 639-1 two digit
            language code.
            '''

        })
    '''
    The language in which the address is specified, using ISO 639-1 two
    digit language code.
    '''

    poBox: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Post office box.
            '''

        })
    '''
    Post office box.
    '''

    postalCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Postal code for the address.
            '''

        })
    '''
    Postal code for the address.
    '''

    status: Optional[Status] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Status of this address.
            '''

        })
    '''
    Status of this address.
    '''

    streetDetail: Optional[StreetDetail] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Street detail.
            '''

        })
    '''
    Street detail.
    '''

    townDetail: Optional[TownDetail] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': '',
        'namespace': 'http://cim.ucaiug.io/CIM101/draft#',
        'serialize': True,
        'docstring':
            '''
            Town detail.
            '''

        })
    '''
    Town detail.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class StringQuantity(Identity):
    '''
    Quantity with string value (when it is not important whether it is an integral
    or a floating point number) and associated unit information.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class TimeInterval(Identity):
    '''
    Interval between two times.
    '''

    @property
    def __namespace__(self):
        return 'http://cim.ucaiug.io/CIM101/draft#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

