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 CIM17v40
Generated by CIMTool http://cimtool.org
'''

class CIMStereotype(Enum):
    AggregateOf = 'AggregateOf'
    Attribute = 'Attribute'
    CIMDatatype = 'CIMDatatype'
    Compound = 'Compound'
    IRCDR = 'IRCDR'
    OfAggregate = 'OfAggregate'
    Primitive = 'Primitive'
    deprecated = 'deprecated'
    enumeration = 'enumeration'
    harmonization = 'harmonization'
    informative = 'informative'

BASE_URI = 'http://www.ucaiug.org/profile#'
ONTOLOGY_URI = 'http://iec.ch/TC57/CIM100#'

@dataclass(repr=False)
class ASRequirements(Identity):
    '''
    Models Ancillary Service Requirements. Describes interval for which the
    requirement is applicable.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start of the time interval for which requirement is defined.
            '''

        })
    '''
    The start of the time interval for which requirement is defined.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    ReserveDemandCurve: list[ReserveDemandCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReserveDemandCurve.ASRequirements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class AccountNotification(Identity):
    '''
    Notifications for move-in, move-out, delinquencies, etc.
    '''

    customerNotificationType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notifications for move-in, move-out, delinquencies, planned outage, demand
            response programs, time of use, etc.
            '''

        })
    '''
    Notifications for move-in, move-out, delinquencies, planned outage,
    demand response programs, time of use, etc.
    '''

    methodType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            method of notification such as phone call, email, letter, door hanger,
            text message, etc.
            '''

        })
    '''
    method of notification such as phone call, email, letter, door hanger,
    text message, etc.
    '''

    note: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free form text characterizing the notification.
            '''

        })
    '''
    Free form text characterizing the notification.
    '''

    time: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time of notification - this is the time the notification was sent.
            '''

        })
    '''
    Time of notification - this is the time the notification was sent.
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.AccountNotification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The customer account for which a notification is made
            '''

        })
    '''
    The customer account for which a notification is made
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AceTariffType(Identity):
    '''
    The Area Control Error tariff type that is applied or used.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded type of an ACE tariff.
            '''

        })
    '''
    The coded type of an ACE tariff.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ActionRequest(Identity):
    '''
    Action request against an existing Trade.
    '''

    actionName: Optional[ ActionType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action name type for the action request.
            '''

        })
    '''
    Action name type for the action request.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Bid: list[Bid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bid.ActionRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Trade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.ActionRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class AllocationResult(Identity):
    '''
    Models Market clearing results. Indicates market horizon, interval based.
    Used by a market quality system for billing and settlement purposes.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    AllocationResultValues: list[AllocationResultValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AllocationResultValues.AllocationResult',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class AllocationResultValues(Identity):
    '''
    Models Market clearing results in terms of price and MW values.
    '''

    aggregateType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            "1" -- "Detail",
            "2" -- "Aggregate by Market service type", in which case, the "AllocationEnergyType"
            field will not be filled;
            "3" -- "Aggregate by "AllocationEnergyType", in which case "MarketServiceType"
            will not be filled.
            '''

        })
    '''
    "1" -- "Detail",
    "2" -- "Aggregate by Market service type", in which case, the "AllocationEnergyType"
    field will not be filled;
    "3" -- "Aggregate by "AllocationEnergyType", in which case "MarketServiceType"
    will not be filled.
    '''

    allocationMwHour: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    allocationPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    energyTypeCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketServiceType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Choices are:
            ME - Market Energy Capacity;
            SR - Spinning Reserve Capacity;
            NR - Non-Spinning Reserve Capacity;
            DAC - Day Ahead Capacity;
            DEC - Derate Capacity
            '''

        })
    '''
    Choices are:
    ME - Market Energy Capacity;
    SR - Spinning Reserve Capacity;
    NR - Non-Spinning Reserve Capacity;
    DAC - Day Ahead Capacity;
    DEC - Derate Capacity
    '''

    AllocationResult: Optional[AllocationResult] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AllocationResult.AllocationResultValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.AllocationResultValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class AreaReserveSpec(Identity):
    '''
    The control area's reserve specification.
    '''

    Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the object or instance.
            '''

        })
    '''
    Description of the object or instance.
    '''

    lowerRegMarginReqt: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower regulating margin requirement in MW, the amount of generation that
            can be dropped by control in 10 minutes
            '''

        })
    '''
    Lower regulating margin requirement in MW, the amount of generation
    that can be dropped by control in 10 minutes
    '''

    opReserveReqt: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating reserve requirement in MW, where operating reserve is the generating
            capability that is fully available within 30 minutes. Operating reserve
            is composed of primary reserve (t less than 10 min) and secondary reserve
            (10 less than t less than 30 min).
            '''

        })
    '''
    Operating reserve requirement in MW, where operating reserve is the
    generating capability that is fully available within 30 minutes. Operating
    reserve is composed of primary reserve (t less than 10 min) and secondary
    reserve (10 less than t less than 30 min).
    '''

    primaryReserveReqt: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Primary reserve requirement in MW, where primary reserve is generating
            capability that is fully available within 10 minutes. Primary reserve is
            composed of spinning reserve and quick-start reserve.
            '''

        })
    '''
    Primary reserve requirement in MW, where primary reserve is generating
    capability that is fully available within 10 minutes. Primary reserve
    is composed of spinning reserve and quick-start reserve.
    '''

    raiseRegMarginReqt: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Raise regulating margin requirement in MW, the amount of generation that
            can be picked up by control in 10 minutes
            '''

        })
    '''
    Raise regulating margin requirement in MW, the amount of generation
    that can be picked up by control in 10 minutes
    '''

    spinningReserveReqt: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Spinning reserve requirement in MW, spinning reserve is generating capability
            that is presently synchronized to the network and is fully available within
            10 minutes
            '''

        })
    '''
    Spinning reserve requirement in MW, spinning reserve is generating
    capability that is presently synchronized to the network and is fully
    available within 10 minutes
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SubControlArea: list[SubControlArea] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubControlArea.AreaReserveSpecification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class AttributeInstanceComponent(Identity):
    '''
    A class used to provide information about an attribute.
    '''

    attribute: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The identification of the formal name of an attribute.
            '''

        })
    '''
    The identification of the formal name of an attribute.
    '''

    attributeValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The instance value of the attribute.
            '''

        })
    '''
    The instance value of the attribute.
    '''

    position: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A sequential value representing a relative sequence number.
            '''

        })
    '''
    A sequential value representing a relative sequence number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AttributeProperty(Identity):
    '''
    Property for a particular attribute that contains name and value.
    '''

    propertyName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    propertyValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    sequence: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktUserAttribute: Optional[MktUserAttribute] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktUserAttribute.AttributeProperty',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class AuxiliaryCost(Identity):
    '''
    Models Market clearing results for Auxiliary costs.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    AuxillaryValues: list[AuxiliaryValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryValues.AuxillaryCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class AuxiliaryObject(Identity):
    '''
    Models Auxiliary Values.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.AuxillaryObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredLoad: Optional[RegisteredLoad] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredLoad.AuxillaryObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AuxiliaryValues(AuxiliaryObject):
    '''
    Models Auxiliary Values.
    '''

    availUndispatchedQ: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    incrementalORAvail: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    maxExpostCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    minExpostCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    noLoadCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    startUpCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    noLoadCostEligibilityFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    startUpCostEligibilityFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AuxillaryCost: Optional[AuxiliaryCost] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AuxiliaryCost.AuxillaryValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FiveMinAuxillaryData: Optional[FiveMinAuxiliaryData] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'FiveMinAuxiliaryData.AuxillaryValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TenMinAuxillaryData: Optional[TenMinAuxiliaryData] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TenMinAuxiliaryData.AuxillaryData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidDistributionFactor(Identity):
    '''
    This class allows SC to input different time intervals for distribution
    factors.
    '''

    timeIntervalEnd: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End of the time interval n which bid is valid (yyyy-mm-dd hh24: mi: ss)
            '''

        })
    '''
    End of the time interval n which bid is valid (yyyy-mm-dd hh24: mi:
    ss)
    '''

    timeIntervalStart: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start of the time interval in which bid is valid (yyyy-mm-dd hh24: mi:
            ss).
            '''

        })
    '''
    Start of the time interval in which bid is valid (yyyy-mm-dd hh24:
    mi: ss).
    '''

    ProductBid: Optional[ProductBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProductBid.BidDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    PnodeDistributionFactor: list[PnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PnodeDistributionFactor.BidDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class BidPriceCap(Identity):
    '''
    This class represent the bid price cap.
    '''

    bidCeiling: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid Ceiling ($/MWH)
            '''

        })
    '''
    Bid Ceiling ($/MWH)
    '''

    bidCeilingAS: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid Ceiling ($/MWH) for generic AS versus a specific market product
            '''

        })
    '''
    Bid Ceiling ($/MWH) for generic AS versus a specific market product
    '''

    bidFloor: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid Floor, ($/MWH)
            '''

        })
    '''
    Bid Floor, ($/MWH)
    '''

    bidFloorAS: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid Floor ($/MWH) for generic AS versus a specific market product
            '''

        })
    '''
    Bid Floor ($/MWH) for generic AS versus a specific market product
    '''

    defaultPrice: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid Default Price($/MWH)
            '''

        })
    '''
    Bid Default Price($/MWH)
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market Type of the cap (DAM or RTM)
            '''

        })
    '''
    Market Type of the cap (DAM or RTM)
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.BidPriceCap',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BilateralTransaction(Identity):
    '''
    Bilateral transaction
    '''

    curtailTimeMax: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum curtailment time in number of trading intervals
            '''

        })
    '''
    Maximum curtailment time in number of trading intervals
    '''

    curtailTimeMin: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum curtailment time in number of trading intervals
            '''

        })
    '''
    Minimum curtailment time in number of trading intervals
    '''

    marketType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market type (default=DA)
            DA - Day Ahead
            RT - Real Time
            HA - Hour Ahead
            '''

        })
    '''
    Market type (default=DA)
    DA - Day Ahead
    RT - Real Time
    HA - Hour Ahead
    '''

    purchaseTimeMax: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum purchase time in number of trading intervals
            '''

        })
    '''
    Maximum purchase time in number of trading intervals
    '''

    purchaseTimeMin: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum purchase time in number of trading intervals
            '''

        })
    '''
    Minimum purchase time in number of trading intervals
    '''

    scope: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transaction scope:
            'Internal' (default)
            'External'
            '''

        })
    '''
    Transaction scope:
    'Internal' (default)
    'External'
    '''

    transactionType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transaction type (default 1)
            1 - Fixed
            2 - Dispatchable continuous
            3 - Dispatchable block-loading
            '''

        })
    '''
    Transaction type (default 1)
    1 - Fixed
    2 - Dispatchable continuous
    3 - Dispatchable block-loading
    '''

    totalTranChargeMax: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum total transmission (congestion) charges in monetary units
            '''

        })
    '''
    Maximum total transmission (congestion) charges in monetary units
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class BlockingFunction(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.BlockingFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.BlockingFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.BlockingFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.BlockingFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

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

    loadDumpRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Load Dump Rating for the branch
            '''

        })
    '''
    The Load Dump Rating for the branch
    '''

    longTermRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Long Term Rating for the branch
            '''

        })
    '''
    The Long Term Rating for the branch
    '''

    mVARFlow: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The MVAR flow on the branch
            Attribute Usage: Reactive power flow at the series device, transformer,
            phase shifter, or line end
            '''

        })
    '''
    The MVAR flow on the branch
    Attribute Usage: Reactive power flow at the series device, transformer,
    phase shifter, or line end
    '''

    mwFlow: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The MW flow on the branch
            Attribute Usage: Active power flow at the series device, transformer, phase
            shifter, or line end
            '''

        })
    '''
    The MW flow on the branch
    Attribute Usage: Active power flow at the series device, transformer,
    phase shifter, or line end
    '''

    normalRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Normal Rating for the branch
            '''

        })
    '''
    The Normal Rating for the branch
    '''

    shortTermRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Short Term Rating for the branch
            '''

        })
    '''
    The Short Term Rating for the branch
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MktACLineSegmentEndAFlow: list[MktACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktACLineSegment.EndAFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktACLineSegmentEndBFlow: list[MktACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktACLineSegment.EndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktPowerTransformerEndAFlow: list[MktPowerTransformer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktPowerTransformer.EndAFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktPowerTransformerEndBFlow: list[MktPowerTransformer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktPowerTransformer.EndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktSeriresCompensatorEndAFlow: list[MktSeriesCompensator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktSeriesCompensator.EndAFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktSeriesCompensatorEndBFlow: list[MktSeriesCompensator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktSeriesCompensator.EndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'BranchGroup.BranchGroupTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.BranchGroupTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The terminal to be summed.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CCAinverter(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CCArectifierControl(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CalculationMethodOrder(Identity):
    '''
    The order of this calculation method in a hierarchy of calculation methods.
    '''

    order: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Order of the statistical calculation method within the calculation method
            hierarchy.
            '''

        })
    '''
    Order of the statistical calculation method within the calculation
    method hierarchy.
    '''

    CalculationMethodHierarchy: Optional[CalculationMethodHierarchy] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CalculationMethodHierarchy.CalculationMethodOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The calculation method hierarchy of which this order of statistical calculation
            is a member.
            '''

        })
    '''
    The calculation method hierarchy of which this order of statistical
    calculation is a member.
    '''

    StatisicalCalculation: Optional[StatisticalCalculation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'StatisticalCalculation.CalculationMethodOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The statistical calculation done at this order.
            '''

        })
    '''
    The statistical calculation done at this order.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Card(Identity):
    '''
    Documentation of the tender when it is a type of card (credit, debit, etc).
    '''

    accountHolderName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of account holder.
            '''

        })
    '''
    Name of account holder.
    '''

    cvNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The card verification number.
            '''

        })
    '''
    The card verification number.
    '''

    expiryDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date when this card expires.
            '''

        })
    '''
    The date when this card expires.
    '''

    pan: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The primary account number.
            '''

        })
    '''
    The primary account number.
    '''

    Tender: Optional[Tender] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Tender.Card',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Payment tender this card is being used for.
            '''

        })
    '''
    Payment tender this card is being used for.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Tender: Optional[Tender] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Tender.Card',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Payment tender this card is being used for.
            '''

        })
    '''
    Payment tender this card is being used for.
    '''

@dataclass(repr=False)
class ChangeSetMember(Identity):
    '''
    A CRUD-style data object.
    '''

    Changeset: Optional[ChangeSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChangeSet.ChangeSetMember',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dataset containing the data objects.
            '''

        })
    '''
    Dataset containing the data objects.
    '''

    PropertiesObject: Optional[IdentifiedObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IdentifiedObject.PropertiesCIMDataObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The CIM object holding the properties of this dataset context. Sometimes
            properties are not required and only the reference to the registered object
            is required.
            '''

        })
    '''
    The CIM object holding the properties of this dataset context. Sometimes
    properties are not required and only the reference to the registered
    object is required.
    '''

    TargetObject: Optional[IdentifiedObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'IdentifiedObject.TargetingCIMDataObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The registered CIM object.
            '''

        })
    '''
    The registered CIM object.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    PropertiesObject: Optional[IdentifiedObject] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IdentifiedObject.PropertiesCIMDataObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The CIM object holding the properties of this dataset context. Sometimes
            properties are not required and only the reference to the registered object
            is required.
            '''

        })
    '''
    The CIM object holding the properties of this dataset context. Sometimes
    properties are not required and only the reference to the registered
    object is required.
    '''

@dataclass(repr=False)
class ObjectCreation(ChangeSetMember):
    '''
    An object is to be created in the context.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ObjectDeletion(ChangeSetMember):
    '''
    An object is to be deleted in the context.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ObjectModification(ChangeSetMember):
    '''
    The object already exists and is to be modified.
    '''

    ObjectReverseModification: Optional[ObjectReverseModification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ObjectReverseModification.ObjectModification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The data object holding preconditions of updates.
            '''

        })
    '''
    The data object holding preconditions of updates.
    '''

    ObjectReverseModification: Optional[ObjectReverseModification] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ObjectReverseModification.ObjectModification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The data object holding preconditions of updates.
            '''

        })
    '''
    The data object holding preconditions of updates.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ObjectReverseModification(ChangeSetMember):
    '''
    Used to specify precondition properties for a preconditioned update.
    '''

    ObjectModification: Optional[ObjectModification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ObjectModification.ObjectReverseModification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The associated data object representing the update. Normally the associaiton
            is specifed, but in the case of a proxy object where the association is
            removed, we might not reference any data object as it would only reference
            a proxy data object with no associations.
            '''

        })
    '''
    The associated data object representing the update. Normally the associaiton
    is specifed, but in the case of a proxy object where the association
    is removed, we might not reference any data object as it would only
    reference a proxy data object with no associations.
    '''

    ObjectModification: Optional[ObjectModification] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ObjectModification.ObjectReverseModification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The associated data object representing the update. Normally the associaiton
            is specifed, but in the case of a proxy object where the association is
            removed, we might not reference any data object as it would only reference
            a proxy data object with no associations.
            '''

        })
    '''
    The associated data object representing the update. Normally the associaiton
    is specifed, but in the case of a proxy object where the association
    is removed, we might not reference any data object as it would only
    reference a proxy data object with no associations.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ChargeProfileData(Identity):
    '''
    Model of various charges associated with an energy profile to support billing
    and settlement.
    '''

    sequence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The sequence number of the profile.
            '''

        })
    '''
    The sequence number of the profile.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time of an interval.
            '''

        })
    '''
    The date and time of an interval.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value of an interval given a profile type (amount, price, or quantity),
            subject to the UOM.
            '''

        })
    '''
    The value of an interval given a profile type (amount, price, or quantity),
    subject to the UOM.
    '''

    BillDeterminant: Optional[BillDeterminant] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BillDeterminant.ChargeProfileData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfile: Optional[ChargeProfile] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChargeProfile.ChargeProfileData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cheque(Identity):
    '''
    The actual tender when it is a type of cheque.
    '''

    chequeNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cheque reference number as printed on the cheque.
            '''

        })
    '''
    Cheque reference number as printed on the cheque.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date when cheque becomes valid.
            '''

        })
    '''
    Date when cheque becomes valid.
    '''

    micrNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The magnetic ink character recognition number printed on the cheque.
            '''

        })
    '''
    The magnetic ink character recognition number printed on the cheque.
    '''

    kind: Optional[ ChequeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of cheque.
            '''

        })
    '''
    Kind of cheque.
    '''

    Tender: Optional[Tender] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Tender.Cheque',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Payment tender the cheque is being used for.
            '''

        })
    '''
    Payment tender the cheque is being used for.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Tender: Optional[Tender] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Tender.Cheque',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Payment tender the cheque is being used for.
            '''

        })
    '''
    Payment tender the cheque is being used for.
    '''

@dataclass(repr=False)
class CombinedCycleTransitionState(Identity):
    '''
    Defines the available from and to Transition States for the Combine Cycle
    Configurations.
    '''

    upTransition: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag indicating whether this is an UP transition.
            If not, it is a DOWN transition.
            '''

        })
    '''
    Flag indicating whether this is an UP transition.
    If not, it is a DOWN transition.
    '''

    FromConfiguration: Optional[CombinedCycleConfiguration] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CombinedCycleConfiguration.FromTransitionState',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ToConfiguration: Optional[CombinedCycleConfiguration] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CombinedCycleConfiguration.ToTransitionState',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Commitments(Identity):
    '''
    Provides the necessary information (on a resource basis) to capture the
    Startup/Shutdown commitment results. This information is relevant to all
    markets.
    '''

    instructionCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total cost associated with changing the status of the resource.
            '''

        })
    '''
    Total cost associated with changing the status of the resource.
    '''

    intervalEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End time for the commitment period. This will be on an interval boundary.
            '''

        })
    '''
    End time for the commitment period. This will be on an interval boundary.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time for the commitment period. This will be on an interval boundary.
            '''

        })
    '''
    Start time for the commitment period. This will be on an interval boundary.
    '''

    minStatusChangeTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            SCUC commitment period start-up time. Calculated start up time based on
            the StartUpTimeCurve provided with the Bid.
            This is a combination of StartUp time bid and Unit down time.
            Units is minutes
            '''

        })
    '''
    SCUC commitment period start-up time. Calculated start up time based
    on the StartUpTimeCurve provided with the Bid.
    This is a combination of StartUp time bid and Unit down time.
    Units is minutes
    '''

    noLoadCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit no load cost in case of energy commodity
            '''

        })
    '''
    Unit no load cost in case of energy commodity
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    commitmentType: Optional[ CommitmentType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the type of UC status (self commitment, ISO commitment, or SCUC commitment)
            '''

        })
    '''
    the type of UC status (self commitment, ISO commitment, or SCUC commitment)
    '''

    instructionType: Optional[ AutomaticDispInstTypeCommitment ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator of either a Start-Up or a Shut-Down.
            '''

        })
    '''
    Indicator of either a Start-Up or a Shut-Down.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.Commitments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CommodityPrice(Identity):
    '''
    The CommodityPrice class is used to define the price of a commodity during
    a given time interval. The interval may be long, e.g. a year, or very short,
    e.g. 5 minutes. There will be many instances of the CommodityPrice class
    for each instance of the CommodityDefinition to which it is associated.
    Note that there may be more than once price associated with a given interval
    and these variances are described by the association (or associations)
    with the PriceDescriptor class.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The price of the Commodity, expressed as a floating point value with the
            currency and unit of measure defined in the associated CommodityDefinition
            class.
            '''

        })
    '''
    The price of the Commodity, expressed as a floating point value with
    the currency and unit of measure defined in the associated CommodityDefinition
    class.
    '''

    CommodityDefinition: Optional[CommodityDefinition] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CommodityDefinition.CommodityPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeClearing: Optional[PnodeClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PnodeClearing.CommodityPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PriceDescriptor: Optional[PriceDescriptor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PriceDescriptor.CommodityPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConstraintDuration(Identity):
    '''
    Duration constraint to activate, to put in operation, to deactivate, ...
    a given event.
    '''

    duration: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The duration of the constraint.
            '''

        })
    '''
    The duration of the constraint.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the constraint.
            '''

        })
    '''
    The type of the constraint.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConsumptionTariffInterval(Identity):
    '''
    One of a sequence of intervals defined in terms of consumption quantity
    of a service such as electricity, water, gas, etc. It is typically used
    in association with TariffProfile to define the steps or blocks in a step
    tariff structure, where startValue simultaneously defines the entry value
    of this step and the closing value of the previous step. Where consumption
    is >= startValue it falls within this interval and where consumption is
    < startValue it falls within the previous interval.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A sequential reference that defines the identity of this interval and its
            relative position with respect to other intervals in a sequence of intervals.
            '''

        })
    '''
    A sequential reference that defines the identity of this interval and
    its relative position with respect to other intervals in a sequence
    of intervals.
    '''

    startValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lowest level of consumption that defines the starting point of this
            interval. The interval extends to the start of the next interval or until
            it is reset to the start of the first interval by TariffProfile.tariffCycle.
            '''

        })
    '''
    The lowest level of consumption that defines the starting point of
    this interval. The interval extends to the start of the next interval
    or until it is reset to the start of the first interval by TariffProfile.tariffCycle.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReadingType.ConsumptionTariffIntervals',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reading type for 'startValue'.
            '''

        })
    '''
    Reading type for 'startValue'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContractDistributionFactor(Identity):
    '''
    Distribution among resources at the sink point or source point.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW value that this resource provides to the overall contract.
            '''

        })
    '''
    MW value that this resource provides to the overall contract.
    '''

    sinkFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This value will be set to YES if the referenced Cnode is defined as the
            sink point in the contract.
            '''

        })
    '''
    This value will be set to YES if the referenced Cnode is defined as
    the sink point in the contract.
    '''

    sourceFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This value will be set to YES if the referenced Cnode is defined as the
            source point in the contract.
            '''

        })
    '''
    This value will be set to YES if the referenced Cnode is defined as
    the source point in the contract.
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.ContractDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ContractDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContractRight.ContractDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ControlAreaDesignation(Identity):
    '''
    Indicates Control Area associated with self-schedule.
    '''

    attained: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Attained.
            '''

        })
    '''
    Attained.
    '''

    native: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Native.
            '''

        })
    '''
    Native.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ControlAreaSolutionData(Identity):
    '''
    State Estimator Solution Pool Interchange and Losses.
    '''

    solvedInterchange: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pool MW Interchange
            Attribute Usage: The active power interchange of the pool
            '''

        })
    '''
    Pool MW Interchange
    Attribute Usage: The active power interchange of the pool
    '''

    solvedLosses: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pool Losses MW
            Attribute Usage: The active power losses of the pool in MW
            '''

        })
    '''
    Pool Losses MW
    Attribute Usage: The active power losses of the pool in MW
    '''

    MktControlArea: Optional[MktControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktControlArea.ControlAreaSolutionData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CurrentScheduledInterchange(Identity):
    '''
    Control area current net tie (scheduled interchange) sent to real time
    dispatch.
    '''

    currentNetTieMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current control area net tie MW (the sum of the tie line flows, i.e the
            sum of flows into and out of the control area), the current instantaneous
            scheduled interchange.
            '''

        })
    '''
    Current control area net tie MW (the sum of the tie line flows, i.e
    the sum of flows into and out of the control area), the current instantaneous
    scheduled interchange.
    '''

    useEmergencySchedule: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Use Emergency Schedule
            Attribute Usage: Emergency use indicator, false = Emergency Schedular OFF,
            true = Emergency Schedular ON.
            '''

        })
    '''
    Use Emergency Schedule
    Attribute Usage: Emergency use indicator, false = Emergency Schedular
    OFF, true = Emergency Schedular ON.
    '''

    InternalControlArea: Optional[InternalControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'InternalControlArea.CurrentScheduledInterchange',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    InternalControlArea: Optional[InternalControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InternalControlArea.CurrentScheduledInterchange',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Curve.CurveDatas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The curve of this curve data point.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DefaultBidCurveData(CurveData):
    '''
    Curve data for default bid curve and startup cost curve.
    '''

    bidSegmentCalcType: Optional[ BidCalculationBasis ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of calculation basis used to define the default bid segment curve.
            '''

        })
    '''
    Type of calculation basis used to define the default bid segment curve.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CustomerNotification(Identity):
    '''
    Conditions for notifying the customer about the changes in the status of
    their service (e.g., outage restore, estimated restoration time, tariff
    or service level change, etc.)
    '''

    contactType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of contact (e.g., phone, email, etc.).
            '''

        })
    '''
    Type of contact (e.g., phone, email, etc.).
    '''

    contactValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of contact type (e.g., phone number, email address, etc.).
            '''

        })
    '''
    Value of contact type (e.g., phone number, email address, etc.).
    '''

    earliestDateTimeToCall: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Earliest date time to call the customer.
            '''

        })
    '''
    Earliest date time to call the customer.
    '''

    latestDateTimeToCall: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Latest date time to call the customer.
            '''

        })
    '''
    Latest date time to call the customer.
    '''

    trigger: Optional[ NotificationTriggerKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trigger for this notification.
            '''

        })
    '''
    Trigger for this notification.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.CustomerNotifications',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer requiring this notification.
            '''

        })
    '''
    Customer requiring this notification.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.CustomerNotifications',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Incident as a subject of this customer notification.
            '''

        })
    '''
    Incident as a subject of this customer notification.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class DCvoltageControl(Identity):
    '''
    DC voltage control used for voltage regulation.
    '''

    kivdc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of the DC voltage regulator (Kivdc).
            '''

        })
    '''
    Integral gain of the DC voltage regulator (Kivdc).
    '''

    kpvdc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of the DC voltage regulator (Kpvdc).
            '''

        })
    '''
    Proportional gain of the DC voltage regulator (Kpvdc).
    '''

    vdcmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum DC voltage (Vdcmax).
            '''

        })
    '''
    Maximum DC voltage (Vdcmax).
    '''

    vdcmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum DC voltage (Vdcmin).
            '''

        })
    '''
    Minimum DC voltage (Vdcmin).
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.DCvoltageControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.DCvoltageControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.DCvoltageControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.DCvoltageControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class DERCurveData(Identity):
    '''
    The DER curve data class provides the nominal, maximum and minimum values
    for a DER Monitorable parameter for a series of time intervals defined
    by the DER DispatchSchedule.
    '''

    intervalNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The sequence number of a time interval defined by the DispatchSchedule.
            '''

        })
    '''
    The sequence number of a time interval defined by the DispatchSchedule.
    '''

    maxYValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum value of the DERMonitorableParameter during the time interval.
            '''

        })
    '''
    The maximum value of the DERMonitorableParameter during the time interval.
    '''

    minYValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum value of the DERMonitorableParameter during the time interval.
            '''

        })
    '''
    The minimum value of the DERMonitorableParameter during the time interval.
    '''

    nominalYValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The nominal value of the DERMonitorableParameter during the time interval.
            '''

        })
    '''
    The nominal value of the DERMonitorableParameter during the time interval.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start time of the interval
            '''

        })
    '''
    The start time of the interval
    '''

    DERMonitorableParameter: Optional[DERMonitorableParameter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DERMonitorableParameter.DERCurveData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The DER monitorable parameter for which a time dependent curve has been
            created.
            '''

        })
    '''
    The DER monitorable parameter for which a time dependent curve has
    been created.
    '''

    DispatchSchedule: Optional[DispatchSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DispatchSchedule.DERCurveData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The schedule used for dispatching or forecasting the values of DER monitorable
            parameters over time.
            '''

        })
    '''
    The schedule used for dispatching or forecasting the values of DER
    monitorable parameters over time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    DERMonitorableParameter: Optional[DERMonitorableParameter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERMonitorableParameter.DERCurveData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The DER monitorable parameter for which a time dependent curve has been
            created.
            '''

        })
    '''
    The DER monitorable parameter for which a time dependent curve has
    been created.
    '''

@dataclass(repr=False)
class DERFunction(Identity):
    '''
    Specifies the list of functions that are supported.
    '''

    connectDisconnect: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the connect/disconnect function is supported.
            '''

        })
    '''
    If set to TRUE, the connect/disconnect function is supported.
    '''

    frequencyWattCurveFunction: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    maxRealPowerLimiting: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the maxRealPowerLimiting function is supported.
            '''

        })
    '''
    If set to TRUE, the maxRealPowerLimiting function is supported.
    '''

    rampRateControl: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the rampRateControl function is supported.
            '''

        })
    '''
    If set to TRUE, the rampRateControl function is supported.
    '''

    reactivePowerDispatch: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the reactivePowerDispatch function is supported.
            '''

        })
    '''
    If set to TRUE, the reactivePowerDispatch function is supported.
    '''

    realPowerDispatch: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the realPowerDispatch function is supported.
            '''

        })
    '''
    If set to TRUE, the realPowerDispatch function is supported.
    '''

    voltageRegulation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the voltageRegulation function is supported.
            '''

        })
    '''
    If set to TRUE, the voltageRegulation function is supported.
    '''

    voltVarCurveFunction: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the voltVARCurveFunction is supported.
            '''

        })
    '''
    If set to TRUE, the voltVARCurveFunction is supported.
    '''

    voltWattCurveFunction: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set to TRUE, the voltWattCurveFunction is supported.
            '''

        })
    '''
    If set to TRUE, the voltWattCurveFunction is supported.
    '''

    EndDeviceGroup: Optional[EndDeviceGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceGroup.DER_Function',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The DER Group supporting the DER functions.
            '''

        })
    '''
    The DER Group supporting the DER functions.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    EndDeviceGroup: Optional[EndDeviceGroup] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceGroup.DERFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The DER Group supporting the DER functions.
            '''

        })
    '''
    The DER Group supporting the DER functions.
    '''

@dataclass(repr=False)
class DERMonitorableParameter(Identity):
    '''
    To define the DER monitorable parameters that will be forecasted and dispatched
    for a DER Group. Each parameter is represented as a Y Value at a point
    in time or on a curve as a function of time, which is represented on the
    X axis.
    '''

    yUnitInstalledMax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum value of the DERMonitorableParameter based on the installed
            capacity.
            '''

        })
    '''
    The maximum value of the DERMonitorableParameter based on the installed
    capacity.
    '''

    yUnitInstalledMin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum value of the DERMonitorableParameter based on the installed
            capacity.
            '''

        })
    '''
    The minimum value of the DERMonitorableParameter based on the installed
    capacity.
    '''

    DERParameter: Optional[ DERParameterKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Defines the specific engineering value being forecasted or dispatched.
            '''

        })
    '''
    Defines the specific engineering value being forecasted or dispatched.
    '''

    flowDirection: Optional[ FlowDirectionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of flow direction for reading/measured values proper to some commodities
            such as, for example, energy, power, demand.
            '''

        })
    '''
    Kind of flow direction for reading/measured values proper to some commodities
    such as, for example, energy, power, demand.
    '''

    yMultiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The UnitMultiplier that is applied to the DERMonitorableParameter.
            '''

        })
    '''
    The UnitMultiplier that is applied to the DERMonitorableParameter.
    '''

    yUnit: Optional[ DERUnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The DERUnitSymbol that is applied to the DERMonitorableParameter
            '''

        })
    '''
    The DERUnitSymbol that is applied to the DERMonitorableParameter
    '''

    DERCurveData: Optional[DERCurveData] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERCurveData.DERMonitorableParameter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the time dependent curve for a DER monitorable parameter
            '''

        })
    '''
    Specifies the time dependent curve for a DER monitorable parameter
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    DERCurveData: Optional[DERCurveData] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERCurveData.DERMonitorableParameter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Specifies the time dependent curve for a DER monitorable parameter
            '''

        })
    '''
    Specifies the time dependent curve for a DER monitorable parameter
    '''

    DispatchSchedule: list[DispatchSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DispatchSchedule.DERMonitorableParameter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The schedule used for dispatching or forecasting the values of DER monitorable
            parameters over time.
            '''

        })
    '''
    The schedule used for dispatching or forecasting the values of DER
    monitorable parameters over time.
    '''

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class DataSet(Identity):
    '''
    A generic container of a version of instance data. The MRID can be used
    in an audit trail, not in reusable script intended to work with new versions
    of data.
    A dataset could be serialized multiple times and in multiple technologies,
    yet retain the same identity.
    '''

    mRID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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 Edition
            1, 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 Edition
    1, 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    AlternateModel: Optional[AlternateModel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AlternateModel.Dataset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The alternate model using the data.
            '''

        })
    '''
    The alternate model using the data.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    AlternateModel: Optional[AlternateModel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AlternateModel.Dataset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The alternate model using the data.
            '''

        })
    '''
    The alternate model using the data.
    '''

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ChangeSet(DataSet):
    '''
    Describes a set of changes that can be applied in different situations.
    A given registered target object MRID may only be referenced once by the
    contained change set members.
    '''

    NMProjectStage: Optional[NetworkModelProjectStage] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectStage.ChangeSets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChangeSetMember: list[ChangeSetMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChangeSetMember.Changeset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Data objects contained in the dataset.
            '''

        })
    '''
    Data objects contained in the dataset.
    '''

    IncrementalDatasetArg: list[IncrementalDatasetArg] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IncrementalDatasetArg.IncrementalDataset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    NetworkModelProjectChangeVersion: list[NetworkModelProjectChangeVersion] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectChangeVersion.ChangeSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The project of the details of model changes.
            '''

        })
    '''
    The project of the details of model changes.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class InstanceSet(DataSet):
    '''
    Instance of a version of a model part. This corresponds to a payload of
    instance data.
    '''

    DatasetArg: list[DatasetArg] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DatasetArg.Dataset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The role of a dataset in the context of an operation.
            '''

        })
    '''
    The role of a dataset in the context of an operation.
    '''

    InstanceSetMember: list[IdentifiedObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IdentifiedObject.InstanceSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Data objects contained in the dataset.
            '''

        })
    '''
    Data objects contained in the dataset.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DateAndOrTime(Identity):
    '''
    The date and/or the time.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date as "yyyy-mm-dd", which conforms with ISO 8601
            '''

        })
    '''
    Date as "yyyy-mm-dd", which conforms with ISO 8601
    '''

    time: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time as "hh:mm:ss.sssZ", which conforms with ISO 8601.
            '''

        })
    '''
    Time as "hh:mm:ss.sssZ", which conforms with ISO 8601.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Delay(Identity):
    '''
    All the measurements are filtered by a first lag element with a time constant
    TM.
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant.
            '''

        })
    '''
    Time constant.
    '''

    BlockingFunction: Optional[BlockingFunction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BlockingFunction.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DCvoltageControl: Optional[DCvoltageControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCvoltageControl.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pcontrol: Optional[Pcontrol] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pcontrol.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PFmode: Optional[PFmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFmode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qlimiter: Optional[Qlimiter] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qlimiter.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qmode: Optional[Qmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qmode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qregulator: Optional[Qregulator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qregulator.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Umode: Optional[Umode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Umode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfHVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    BlockingFunction: Optional[BlockingFunction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BlockingFunction.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DCvoltageControl: Optional[DCvoltageControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCvoltageControl.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PFmode: Optional[PFmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFmode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pcontrol: Optional[Pcontrol] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pcontrol.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qlimiter: Optional[Qlimiter] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qlimiter.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qmode: Optional[Qmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qmode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qregulator: Optional[Qregulator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qregulator.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Umode: Optional[Umode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Umode.Delay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @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://iec.ch/TC57/CIM100#',
        '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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'DiagramObject.DiagramObjectPoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DifferentialModel(Identity):
    '''
    A set of statements describing the changes in the network model. The statement
    is defined in the incremental model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DispatchSchedule(Identity):
    '''
    Specifies the characteristics of the time schedule over which DERMonitorableParameters
    are dispatched.
    '''

    numberOfIntervals: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to specify the number of intervals when requesting a forecast or a
            dispatch.
            '''

        })
    '''
    Used to specify the number of intervals when requesting a forecast
    or a dispatch.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start time of the first interval in the dispatch schedule
            '''

        })
    '''
    The start time of the first interval in the dispatch schedule
    '''

    timeIntervalDuration: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The length of time for each interval in the dispatch schedule.
            '''

        })
    '''
    The length of time for each interval in the dispatch schedule.
    '''

    confidence: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A value set by the system, function, algorithm or person creating a prediction
            as to how accurate the prediction is.
            '''

        })
    '''
    A value set by the system, function, algorithm or person creating a
    prediction as to how accurate the prediction is.
    '''

    curveStyleKind: Optional[ CurveStyle ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to specify whether the values over an interval are constant (constantYValue)
            or linearly interpolated (straightLineYValues)
            '''

        })
    '''
    Used to specify whether the values over an interval are constant (constantYValue)
    or linearly interpolated (straightLineYValues)
    '''

    timeIntervalUnit: Optional[ TimeIntervalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure for the time axis of the dispatch schedule.
            '''

        })
    '''
    The unit of measure for the time axis of the dispatch schedule.
    '''

    DERMonitorableParameter: Optional[DERMonitorableParameter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DERMonitorableParameter.DispatchSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The DER monitorable parameter included in the DER dispatch schedule.
            '''

        })
    '''
    The DER monitorable parameter included in the DER dispatch schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    DERCurveData: list[DERCurveData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DERCurveData.DispatchSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Specifies the time dependent curve for a DER monitorable parameter in the
            DER dispatch schedule.
            '''

        })
    '''
    Specifies the time dependent curve for a DER monitorable parameter
    in the DER dispatch schedule.
    '''

@dataclass(repr=False)
class DistributionFactorSet(Identity):
    '''
    A containing class that groups all the distribution factors within a market.
    This is calculated daily for DA factors and hourly for RT factors.
    '''

    intervalEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The end of the time interval for which requirement is defined.
            '''

        })
    '''
    The end of the time interval for which requirement is defined.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start of the time interval for which requirement is defined.
            '''

        })
    '''
    The start of the time interval for which requirement is defined.
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market type.
            '''

        })
    '''
    Market type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DopInstruction(Identity):
    '''
    Provides the necessary information (on a resource basis) to capture the
    Dispatch Operating Point (DOP) results on a Dispatch interval. This information
    is only relevant to the RT interval market.
    '''

    plotPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A value used to establish priority of the DOP when plotting. This is only
            applicable when two DOPs exist for the same time, but with different MW
            values. E.g. when indicating a step in the curve. Its used to determine
            if the curve steps up or down.
            '''

        })
    '''
    A value used to establish priority of the DOP when plotting. This is
    only applicable when two DOPs exist for the same time, but with different
    MW values. E.g. when indicating a step in the curve. Its used to determine
    if the curve steps up or down.
    '''

    timestampDOP: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            DOP time stamp
            '''

        })
    '''
    DOP time stamp
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    mwDOP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatched Operating Point (MW)
            '''

        })
    '''
    Dispatched Operating Point (MW)
    '''

    runIndicatorDOP: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication of DOP validity.
            Shows the DOP is calculated from the latest run (YES). A NO indicator shows
            that the DOP is copied from a previous execution.
            Up to 2 intervals can be missed.
            '''

        })
    '''
    Indication of DOP validity.
    Shows the DOP is calculated from the latest run (YES). A NO indicator
    shows that the DOP is copied from a previous execution.
    Up to 2 intervals can be missed.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResouce: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DopInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DotInstruction(Identity):
    '''
    Provides the necessary information (on a resource basis) to capture the
    Dispatch Operating Target (DOT) results on a Dispatch interval. This information
    is only relevant to the RT interval market.
    '''

    actualRampRate: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual ramp rate.
            '''

        })
    '''
    Actual ramp rate.
    '''

    DOT: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatch operating target value.
            '''

        })
    '''
    Dispatch operating target value.
    '''

    economicMaxOverride: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Economic Max Limit override for unit, this value is null, if it is not,
            this value overrides the Energy column value.
            Allows dispatcher to override the unit's energy value.
            '''

        })
    '''
    Economic Max Limit override for unit, this value is null, if it is
    not, this value overrides the Energy column value.
    Allows dispatcher to override the unit's energy value.
    '''

    expectedEnergy: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Expected energy.
            '''

        })
    '''
    Expected energy.
    '''

    generatorPerformanceDegree: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Degree of Generator Performance (DGP) used for the unit. Measure of
            how a generator responds to raise /lower signals. Calculated every five
            minutes.
            '''

        })
    '''
    The Degree of Generator Performance (DGP) used for the unit. Measure
    of how a generator responds to raise /lower signals. Calculated every
    five minutes.
    '''

    hourAheadSchedEnergy: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HASP results.
            '''

        })
    '''
    HASP results.
    '''

    hourlySchedule: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hourly Schedule (DA Energy Schedule).
            '''

        })
    '''
    Hourly Schedule (DA Energy Schedule).
    '''

    instructionTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date/time for the instruction.
            '''

        })
    '''
    The date/time for the instruction.
    '''

    maximumEmergencyInd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if maximum emergency limit activated; false otherwise. If unit is
            requested to move up to its max emergency limit., this flag is set to true.
            '''

        })
    '''
    True if maximum emergency limit activated; false otherwise. If unit
    is requested to move up to its max emergency limit., this flag is set
    to true.
    '''

    meterLoadFollowing: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter Sub System Load Following.
            '''

        })
    '''
    Meter Sub System Load Following.
    '''

    nonRampRestrictedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Desired MW that is not ramp restricted. If no ramp rate limit existed for
            the unit, this is the MW value tha t the unit was requested to move to.
            '''

        })
    '''
    Desired MW that is not ramp restricted. If no ramp rate limit existed
    for the unit, this is the MW value tha t the unit was requested to
    move to.
    '''

    nonSpinReserve: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Non Spin Reserve used to procure energy.
            '''

        })
    '''
    Non Spin Reserve used to procure energy.
    '''

    previousDOTTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp when the previous DOT value was issued.
            '''

        })
    '''
    Timestamp when the previous DOT value was issued.
    '''

    rampRateLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The ramp rate limit for the unit in MWs per minute. Participant bidding
            data.
            '''

        })
    '''
    The ramp rate limit for the unit in MWs per minute. Participant bidding
    data.
    '''

    spinReserve: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Spin Reserve used to procure energy.
            '''

        })
    '''
    Spin Reserve used to procure energy.
    '''

    standardRampEnergy: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Standard ramping energy (MWH).
            '''

        })
    '''
    Standard ramping energy (MWH).
    '''

    supplementalEnergy: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supplemental Energy procure by Real Time Dispatch.
            '''

        })
    '''
    Supplemental Energy procure by Real Time Dispatch.
    '''

    unitStatus: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output results from the case identifying the reason the unit was committed
            by the software.
            '''

        })
    '''
    Output results from the case identifying the reason the unit was committed
    by the software.
    '''

    compliantIndicator: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag indicating whether or not the resource was in compliance with the
            instruction (plus/minus 10%).
            Directs if a unit is allowed to set the price (ex-post pricing).
            '''

        })
    '''
    Flag indicating whether or not the resource was in compliance with
    the instruction (plus/minus 10%).
    Directs if a unit is allowed to set the price (ex-post pricing).
    '''

    regulationStatus: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulation Status (Yes/No).
            '''

        })
    '''
    Regulation Status (Yes/No).
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DotInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceAction(Identity):
    '''
    Action/command performed by an end device on a device other than the end
    device.
    '''

    command: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Command text.
            '''

        })
    '''
    Command text.
    '''

    durationIndefinite: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the action of this control is indefinite.
            '''

        })
    '''
    True if the action of this control is indefinite.
    '''

    startDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start date and time for action of this control.
            '''

        })
    '''
    Start date and time for action of this control.
    '''

    duration: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of time the action of this control is to remain active.
            '''

        })
    '''
    Amount of time the action of this control is to remain active.
    '''

    EndDeviceControl: Optional[EndDeviceControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceControl.EndDeviceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device control issuing this end device action.
            '''

        })
    '''
    End device control issuing this end device action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    EndDeviceControl: Optional[EndDeviceControl] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceControl.EndDeviceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            End device control issuing this end device action.
            '''

        })
    '''
    End device control issuing this end device action.
    '''

@dataclass(repr=False)
class PanDemandResponse(EndDeviceAction):
    '''
    PAN control used to issue action/command to PAN devices during a demand
    response/load control event.
    '''

    cancelControlMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Encoding of cancel control.
            '''

        })
    '''
    Encoding of cancel control.
    '''

    cancelDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp when a canceling of the event is scheduled to start.
            '''

        })
    '''
    Timestamp when a canceling of the event is scheduled to start.
    '''

    cancelNow: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, a canceling of the event should start immediately.
            '''

        })
    '''
    If true, a canceling of the event should start immediately.
    '''

    criticalityLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Level of criticality for the action of this control. The action taken by
            load control devices for an event can be solely based on this value, or
            in combination with other load control event fields supported by the device.
            '''

        })
    '''
    Level of criticality for the action of this control. The action taken
    by load control devices for an event can be solely based on this value,
    or in combination with other load control event fields supported by
    the device.
    '''

    enrollmentGroup: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides a mechanism to direct load control actions to groups of PAN devices.
            It can be used in conjunction with the PAN device types.
            '''

        })
    '''
    Provides a mechanism to direct load control actions to groups of PAN
    devices. It can be used in conjunction with the PAN device types.
    '''

    avgLoadAdjustment: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to define a maximum energy usage limit as a percentage of the client
            implementations specific average energy usage. The load adjustment percentage
            is added to 100% creating a percentage limit applied to the client implementations
            specific average energy usage. A -10% load adjustment percentage will establish
            an energy usage limit equal to 90% of the client implementations specific
            average energy usage. Each load adjustment percentage is referenced to
            the client implementations specific average energy usage. There are no
            cumulative effects.
            The range of this field is -100% to +100% with a resolution of 1. A -100%
            value equals a total load shed. A +100% value will limit the energy usage
            to the client implementations specific average energy usage.
            '''

        })
    '''
    Used to define a maximum energy usage limit as a percentage of the
    client implementations specific average energy usage. The load adjustment
    percentage is added to 100% creating a percentage limit applied to
    the client implementations specific average energy usage. A -10% load
    adjustment percentage will establish an energy usage limit equal to
    90% of the client implementations specific average energy usage. Each
    load adjustment percentage is referenced to the client implementations
    specific average energy usage. There are no cumulative effects.
    The range of this field is -100% to +100% with a resolution of 1. A
    -100% value equals a total load shed. A +100% value will limit the
    energy usage to the client implementations specific average energy
    usage.
    '''

    coolingOffset: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Requested offset to apply to the normal cooling setpoint at the time of
            the start of the event. It represents a temperature change that will be
            applied to the associated cooling set point. The temperature offsets will
            be calculated per the local temperature in the thermostat. The calculated
            temperature will be interpreted as the number of degrees to be added to
            the cooling set point. Sequential demand response events are not cumulative.
            The offset shall be applied to the normal setpoint.
            '''

        })
    '''
    Requested offset to apply to the normal cooling setpoint at the time
    of the start of the event. It represents a temperature change that
    will be applied to the associated cooling set point. The temperature
    offsets will be calculated per the local temperature in the thermostat.
    The calculated temperature will be interpreted as the number of degrees
    to be added to the cooling set point. Sequential demand response events
    are not cumulative. The offset shall be applied to the normal setpoint.
    '''

    coolingSetpoint: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Requested cooling set point. Temperature set point is typically defined
            and calculated based on local temperature.
            '''

        })
    '''
    Requested cooling set point. Temperature set point is typically defined
    and calculated based on local temperature.
    '''

    dutyCycle: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum "on" state duty cycle as a percentage of time. For example, if
            the value is 80, the device would be in an "on" state for 80% of the time
            for the duration of the action.
            '''

        })
    '''
    Maximum "on" state duty cycle as a percentage of time. For example,
    if the value is 80, the device would be in an "on" state for 80% of
    the time for the duration of the action.
    '''

    heatingOffset: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Requested offset to apply to the normal heating setpoint at the time of
            the start of the event. It represents a temperature change that will be
            applied to the associated heating set point. The temperature offsets will
            be calculated per the local temperature in the thermostat. The calculated
            temperature will be interpreted as the number of degrees to be subtracted
            from the heating set point. Sequential demand response events are not cumulative.
            The offset shall be applied to the normal setpoint.
            '''

        })
    '''
    Requested offset to apply to the normal heating setpoint at the time
    of the start of the event. It represents a temperature change that
    will be applied to the associated heating set point. The temperature
    offsets will be calculated per the local temperature in the thermostat.
    The calculated temperature will be interpreted as the number of degrees
    to be subtracted from the heating set point. Sequential demand response
    events are not cumulative. The offset shall be applied to the normal
    setpoint.
    '''

    heatingSetpoint: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Requested heating set point. Temperature set point is typically defined
            and calculated based on local temperature.
            '''

        })
    '''
    Requested heating set point. Temperature set point is typically defined
    and calculated based on local temperature.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PanDisplay(EndDeviceAction):
    '''
    PAN action/command used to issue the displaying of text messages on PAN
    devices.
    '''

    confirmationRequired: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the requesting entity (e.g. retail electric provider) requires
            confirmation of the successful display of the text message.
            '''

        })
    '''
    If true, the requesting entity (e.g. retail electric provider) requires
    confirmation of the successful display of the text message.
    '''

    priority: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority associated with the text message to be displayed.
            '''

        })
    '''
    Priority associated with the text message to be displayed.
    '''

    textMessage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Text to be displayed by a PAN device.
            '''

        })
    '''
    Text to be displayed by a PAN device.
    '''

    transmissionMode: Optional[ TransmissionModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transmission mode to be used for this PAN display control.
            '''

        })
    '''
    Transmission mode to be used for this PAN display control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PanPricing(EndDeviceAction):
    '''
    PAN action/command used to issue pricing information to a PAN device.
    '''

    providerID: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identifier for the commodity provider.
            '''

        })
    '''
    Unique identifier for the commodity provider.
    '''

    PanPricingDetails: list[PanPricingDetail] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PanPricingDetail.PanPricing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All pricing details issued by this PAN pricing command/action.
            '''

        })
    '''
    All pricing details issued by this PAN pricing command/action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceEventDetail(Identity):
    '''
    Name-value pair, specific to end device events.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name.
            '''

        })
    '''
    Name.
    '''

    EndDeviceEvent: Optional[EndDeviceEvent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceEvent.EndDeviceEventDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device owning this detail.
            '''

        })
    '''
    End device owning this detail.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class EnergyPriceCurve(Identity):
    '''
    Relationship between a price in $(or other monetary unit) /hour (Y-axis)
    and a MW value (X-axis).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    FTRs: list[FTR] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FTR.EnergyPriceCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class EnvironmentalLocationType(Identity):
    '''
    Type of environmental location. Used when an environmental alert or phenomenon
    has multiple locations associated with it.
    '''

    kind: Optional[ LocationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of location. Typical values might be center, extent, primary,
            secondary, etc.
            '''

        })
    '''
    The kind of location. Typical values might be center, extent, primary,
    secondary, etc.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.EnvironmentalLocationKind',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this instance of ths kind of environmental location.
            '''

        })
    '''
    Location of this instance of ths kind of environmental location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalPhenomenon(Identity):
    '''
    The actual or forecast characteristics of an environmental phenomenon at
    a specific point in time (or during a specific time interval) that may
    have both a center and area/line location.
    '''

    EnvironmentalInformation: Optional[EnvironmentalInformation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalInformation.EnvironmentalPhenomenon',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The forecast or observation of which this phenomenon description is a part.
            '''

        })
    '''
    The forecast or observation of which this phenomenon description is
    a part.
    '''

    PhenomenonClassification: Optional[PhenomenonClassification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhenomenonClassification.EnvironmentalPhenomenon',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The classification of this phenomenon.
            '''

        })
    '''
    The classification of this phenomenon.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AtmosphericPhenomenon(EnvironmentalPhenomenon):
    '''
    An atmospheric phenomenon with a base and altitude providing the vertical
    coverage (combined with the Location to provide three dimensional space).
    '''

    direction: Optional[ float | Bearing ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The direction the phenomenon is moving.
            '''

        })
    '''
    The direction the phenomenon is moving.
    '''

    maxCoverage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum percentage coverage
            '''

        })
    '''
    The maximum percentage coverage
    '''

    minCoverage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum percentage coverage
            '''

        })
    '''
    The minimum percentage coverage
    '''

    speed: Optional[ float | Speed ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The speed of the phenomenon
            '''

        })
    '''
    The speed of the phenomenon
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CloudCondition(AtmosphericPhenomenon):
    '''
    A classified cloud phenomenon with a type.
    '''

    kind: Optional[ CloudKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the cloud as defined by the CloudKind enumeration.
            '''

        })
    '''
    The type of the cloud as defined by the CloudKind enumeration.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cyclone(AtmosphericPhenomenon):
    '''
    A cyclone (or tropical cyclone), a rapidly-rotating storm system characterized
    by a low-pressure center, strong winds, and a spiral arrangement of thunderstorms
    that produce heavy rain.
    '''

    windForce: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind Force as classified on the Beaufort Scale (0-12) during the time interval.
            '''

        })
    '''
    Wind Force as classified on the Beaufort Scale (0-12) during the time
    interval.
    '''

    centralPressure: Optional[ float | Pressure ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The central pressure of the cyclone during the time interval.
            '''

        })
    '''
    The central pressure of the cyclone during the time interval.
    '''

    maxSurfaceWindSpeed: Optional[ float | Speed ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum surface wind speed of the cyclone during the time interval.
            '''

        })
    '''
    The maximum surface wind speed of the cyclone during the time interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Hurricane(Cyclone):
    '''
    A hurricane, a subtype of cyclone occurring in the North Atlantic Ocean
    or North-eastern Pacific Ocean whose intensity is measured using the Saffir-Simpson
    Hurricane Scale.
    '''

    category: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The hurricane's category during the time interval, using Saffir-Simpson
            Hurricane Wind Scale, a 1 to 5 rating based on a hurricane's sustained
            wind speed.
            '''

        })
    '''
    The hurricane's category during the time interval, using Saffir-Simpson
    Hurricane Wind Scale, a 1 to 5 rating based on a hurricane's sustained
    wind speed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TropicalCycloneAustralia(Cyclone):
    '''
    A tropical cyclone, a subtype of cyclone that forms to the east of 90�E
    in the Southern Hemisphere whose intensity is measured by the Australian
    tropical cyclone intensity scale.
    '''

    category: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Strength of tropical cyclone during the time interval, based on Australian
            Bureau of Meteorology Category System where:
            1 - tropical cyclone, with typical gusts over flat land 90-125 km/h
            2 - tropical cyclone, with typical gusts over flat land 125-164 km/h
            3 - severe tropical cyclone, with typical gusts over flat land 165-224
            km/h
            4 - severe tropical cyclone, with typical gusts over flat land 225-279
            km/h
            5 - severe tropical cyclone, with typical gusts over flat land greater
            than 280 km/h.
            '''

        })
    '''
    Strength of tropical cyclone during the time interval, based on Australian
    Bureau of Meteorology Category System where:
    1 - tropical cyclone, with typical gusts over flat land 90-125 km/h
    2 - tropical cyclone, with typical gusts over flat land 125-164 km/h
    3 - severe tropical cyclone, with typical gusts over flat land 165-224
    km/h
    4 - severe tropical cyclone, with typical gusts over flat land 225-279
    km/h
    5 - severe tropical cyclone, with typical gusts over flat land greater
    than 280 km/h.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tornado(AtmosphericPhenomenon):
    '''
    A tornado, a violent destructive whirling wind accompanied by a funnel-shaped
    cloud that progresses in a narrow path over the land.
    '''

    fScale: Optional[ FScale ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fujita scale (referred to as EF-scale starting in 2007) for the tornado.
            '''

        })
    '''
    Fujita scale (referred to as EF-scale starting in 2007) for the tornado.
    '''

    width: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Width of the tornado during the time interval.
            '''

        })
    '''
    Width of the tornado during the time interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VolcanicAshCloud(AtmosphericPhenomenon):
    '''
    An ash cloud formed as a result of a volcanic eruption.
    '''

    density: Optional[ float | ParticulateDensity ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Particulate density of the ash cloud during the time interval.
            '''

        })
    '''
    Particulate density of the ash cloud during the time interval.
    '''

    particleSize: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The diameter of the particles during the time interval.
            '''

        })
    '''
    The diameter of the particles during the time interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeosphericPhenomenon(EnvironmentalPhenomenon):
    '''
    A geospheric phenomenon.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Earthquake(GeosphericPhenomenon):
    '''
    An earthquake.
    '''

    intensity: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The intensity of the earthquake as defined by the Modified Mercalli Intensity
            (MMI) scale. Possible values are 1-12, corresponding to I-XII.
            '''

        })
    '''
    The intensity of the earthquake as defined by the Modified Mercalli
    Intensity (MMI) scale. Possible values are 1-12, corresponding to I-XII.
    '''

    magnitude: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The magnitude of the earthquake as defined on the Moment Magnitude (M<sub>w</sub>)
            scale, which measures the size of earthquakes in terms of the energy released.
            Must be greater than zero.
            '''

        })
    '''
    The magnitude of the earthquake as defined on the Moment Magnitude
    (M<sub>w</sub>) scale, which measures the size of earthquakes in terms
    of the energy released. Must be greater than zero.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Fire(GeosphericPhenomenon):
    '''
    A fire, often uncontrolled, covering an area of land which typically contains
    combustible vegetation. Associated location information is assumed to describe
    the total area burned as of a specified time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Landslide(GeosphericPhenomenon):
    '''
    A landslide, a large mass of rocks and earth that suddenly and quickly
    moves down the side of a mountain or hill.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LightningStrike(GeosphericPhenomenon):
    '''
    A cloud-to-ground lightning strike at a particular location.
    '''

    negativePolarity: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polarity of the strike, with T meaning negative. About 90% of all lightning
            strokes are negative strokes, meaning that they were initiated by a large
            concentration of negative charge in the cloud-base; this tends to induce
            an area of positive charge on the ground.
            '''

        })
    '''
    The polarity of the strike, with T meaning negative. About 90% of all
    lightning strokes are negative strokes, meaning that they were initiated
    by a large concentration of negative charge in the cloud-base; this
    tends to induce an area of positive charge on the ground.
    '''

    errorEllipseConfidence: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Likelihood that strike fell within errorEllipse.
            '''

        })
    '''
    Likelihood that strike fell within errorEllipse.
    '''

    errorEllipseMajorSemiAxis: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of major semi-axis (longest radius) of the error ellipse.
            '''

        })
    '''
    Length of major semi-axis (longest radius) of the error ellipse.
    '''

    errorEllipseMinorSemiAxis: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of minor semi-axis (shortest radius) of the error ellipse.
            '''

        })
    '''
    Length of minor semi-axis (shortest radius) of the error ellipse.
    '''

    errorEllipseOrientation: Optional[ float | Bearing ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The orientation of the major semi- axis in degrees from True North.
            '''

        })
    '''
    The orientation of the major semi- axis in degrees from True North.
    '''

    peakAmplitude: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Peak current of strike.
            '''

        })
    '''
    Peak current of strike.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HydrosphericPhenomenon(EnvironmentalPhenomenon):
    '''
    A hydrospheric phenomenon.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Flood(HydrosphericPhenomenon):
    '''
    A flood, an overflowing of a large amount of water beyond its normal confines,
    esp. over what is normally dry land.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tsunami(HydrosphericPhenomenon):
    '''
    A tsunami (tidal wave), a long high sea wave caused by an earthquake, submarine
    landslide, or other disturbance.
    '''

    intensity: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tsunami intensity on the Papadopoulos-Imamura tsunami intensity scale.
            Possible values are 1-12, corresponding to I-XII.
            '''

        })
    '''
    Tsunami intensity on the Papadopoulos-Imamura tsunami intensity scale.
    Possible values are 1-12, corresponding to I-XII.
    '''

    magnitude: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tsunami magnitude in the Tsunami Magnitude Scale (Mt). Is greater than
            zero.
            '''

        })
    '''
    Tsunami magnitude in the Tsunami Magnitude Scale (Mt). Is greater than
    zero.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Whirlpool(HydrosphericPhenomenon):
    '''
    A whirlpool, a rapidly rotating mass of water in a river or sea into which
    objects may be drawn, typically caused by the meeting of conflicting currents.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SpacePhenomenon(EnvironmentalPhenomenon):
    '''
    An extra-terrestrial phenomenon.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MagneticStorm(SpacePhenomenon):
    '''
    A magnetic storm, a temporary disturbance of the earth's magnetic field,
    induced by radiation and streams of charged particles from the sun.
    '''

    changeDst: Optional[ float | MagneticField ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Change in the disturbance - storm time (Dst) index. The size of a geomagnetic
            storm is classified as:
            - moderate ( -50 nT &gt;minimum of Dst &gt; -100 nT)
            - intense (-100 nT &gt; minimum Dst &gt; -250 nT) or
            - super-storm ( minimum of Dst &lt; -250 nT).
            '''

        })
    '''
    Change in the disturbance - storm time (Dst) index. The size of a geomagnetic
    storm is classified as:
    - moderate ( -50 nT &gt;minimum of Dst &gt; -100 nT)
    - intense (-100 nT &gt; minimum Dst &gt; -250 nT) or
    - super-storm ( minimum of Dst &lt; -250 nT).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EstimatedRestorationTime(Identity):
    '''
    The Estimated Restoration Time (ERT) for a single outage
    '''

    ert: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            estimated time the outage will be restored
            '''

        })
    '''
    estimated time the outage will be restored
    '''

    ertSource: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            defines the source that provided the ERT value.
            '''

        })
    '''
    defines the source that provided the ERT value.
    '''

    confidenceKind: Optional[ ERTConfidenceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            provides the confidence level that this ERT can be accomplished. This may
            be changed/updated as needed.
            '''

        })
    '''
    provides the confidence level that this ERT can be accomplished. This
    may be changed/updated as needed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Outage: list[Outage] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Outage.EstimatedRestorationTime',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The outage associated with the estimated time the power will be restored.
            '''

        })
    '''
    The outage associated with the estimated time the power will be restored.
    '''

@dataclass(repr=False)
class ExPostLossResults(Identity):
    '''
    Model results of ex-post calculation of MW losses. Summarizes loss in two
    categories losses on the the extra high voltage transmission and total
    losses. Calculated for each subcontrol area.
    '''

    ehvLossMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            EHV MW losses in the company
            Attribute Usage: Information purposes - Output of LPA engine.
            '''

        })
    '''
    EHV MW losses in the company
    Attribute Usage: Information purposes - Output of LPA engine.
    '''

    totalLossMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total MW losses in the company
            Attribute Usage: Information purposes - Output of LPA engine.
            '''

        })
    '''
    Total MW losses in the company
    Attribute Usage: Information purposes - Output of LPA engine.
    '''

    ExPostLoss: Optional[ExPostLoss] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExPostLoss.ExPostLossResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.ExPostLossResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostMarketRegionResults(Identity):
    '''
    Model of expost calculation of cleared MW on a region basis. Includes cleared
    price.
    '''

    exPostClearedPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExPostMarketRegion: Optional[ExPostMarketRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExPostMarketRegion.ExPostMarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegion: Optional[MarketRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketRegion.ExPostMarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    ExPostMarketRegion: Optional[ExPostMarketRegion] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExPostMarketRegion.ExPostMarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class ExPostPricingResults(Identity):
    '''
    Model of ex-post pricing of nodes. Includes LMP information, pnode based.
    '''

    congestLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Congestion component of Location Marginal Price (LMP) in monetary units
            per MW; congestion component of the hourly LMP at a specific pricing node
            Attribute Usage: Result of the Security, Pricing, and Dispatch(SPD)/Simultaneous
            Feasibility Test(SFT) software and denotes the hourly congestion component
            of LMP for each pricing node.
            '''

        })
    '''
    Congestion component of Location Marginal Price (LMP) in monetary units
    per MW; congestion component of the hourly LMP at a specific pricing
    node
    Attribute Usage: Result of the Security, Pricing, and Dispatch(SPD)/Simultaneous
    Feasibility Test(SFT) software and denotes the hourly congestion component
    of LMP for each pricing node.
    '''

    lmp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            5 min weighted average LMP; the Location Marginal Price of the Pnode for
            which price calculation is carried out.
            Attribute Usage: 5 min weighted average LMP to be displayed on UI
            '''

        })
    '''
    5 min weighted average LMP; the Location Marginal Price of the Pnode
    for which price calculation is carried out.
    Attribute Usage: 5 min weighted average LMP to be displayed on UI
    '''

    lossLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss component of Location Marginal Price (LMP) in monetary units per MW;
            loss component of the hourly LMP at a specific pricing node
            Attribute Usage: Result of the Security, Pricing, and Dispatch(SPD)/Simultaneous
            Feasibility Test(SFT) software and denotes the hourly loss component of
            LMP for each pricing node.
            '''

        })
    '''
    Loss component of Location Marginal Price (LMP) in monetary units per
    MW; loss component of the hourly LMP at a specific pricing node
    Attribute Usage: Result of the Security, Pricing, and Dispatch(SPD)/Simultaneous
    Feasibility Test(SFT) software and denotes the hourly loss component
    of LMP for each pricing node.
    '''

    ExPostPricing: Optional[ExPostPricing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExPostPricing.ExPostResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Pnode.ExPostResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostResourceResults(Identity):
    '''
    Model of ex-post pricing of resources contains components of LMPs: energy,
    congestion, loss. Resource based.
    '''

    congestionLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LMP component in USD (deprecated)
            '''

        })
    '''
    LMP component in USD (deprecated)
    '''

    desiredMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Desired output of unit
            '''

        })
    '''
    Desired output of unit
    '''

    dispatchRate: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit Dispatch rate from real time unit dispatch.
            '''

        })
    '''
    Unit Dispatch rate from real time unit dispatch.
    '''

    lmp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LMP (Local Marginal Price) in USD at the equipment (deprecated)
            '''

        })
    '''
    LMP (Local Marginal Price) in USD at the equipment (deprecated)
    '''

    lossLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            loss lmp (deprecated)
            '''

        })
    '''
    loss lmp (deprecated)
    '''

    maxEconomicMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Economic Maximum MW
            '''

        })
    '''
    Economic Maximum MW
    '''

    minEconomicMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Economic Minimum MW
            '''

        })
    '''
    Economic Minimum MW
    '''

    resourceMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current MW output of the equipment
            Attribute Usage: Information purposes - Information purposes - Output of
            LPA engine.
            '''

        })
    '''
    Current MW output of the equipment
    Attribute Usage: Information purposes - Information purposes - Output
    of LPA engine.
    '''

    status: Optional[ EquipmentStatusType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Status of equipment
            '''

        })
    '''
    Status of equipment
    '''

    ExPostResource: Optional[ExPostResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExPostResource.ExPostResourceResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ExPostResourceResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ExpectedEnergy(Identity):
    '''
    Model Expected Energy from Market Clearing, interval based.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    ExpectedEnergyValues: list[ExpectedEnergyValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExpectedEnergyValues.ExpectedEnergy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class ExpectedEnergyValues(Identity):
    '''
    Model Expected Energy from Market Clearing.
    '''

    energyTypeCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    expectedMwh: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExpectedEnergy: Optional[ExpectedEnergy] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExpectedEnergy.ExpectedEnergyValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ExpectedEnergyValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.FieldDispatchStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The dispatch history associated with the field dispatch step
            '''

        })
    '''
    The dispatch history associated with the field dispatch step
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FiveMinAuxiliaryData(Identity):
    '''
    Models 5-Minutes Auxiliary Data.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    AuxillaryValues: list[AuxiliaryValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryValues.FiveMinAuxillaryData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class FlowDirection(Identity):
    '''
    The coded identification of the direction of energy flow.
    '''

    direction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded identification of the direction of energy flow.
            '''

        })
    '''
    The coded identification of the direction of energy flow.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FlowgateRelief(Identity):
    '''
    IDC (Interchange Distribution Calulator) sends data for a TLR (Transmission
    Loading Relief).
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date/Time when record becomes effective
            Used to determine when a record becomes effective.
            '''

        })
    '''
    Date/Time when record becomes effective
    Used to determine when a record becomes effective.
    '''

    idcTargetMktFlow: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy Flow level that should be maintained according to the TLR rules
            as specified by the IDC.
            For Realtime Markets use in dispatch to control constraints under TLR and
            calculate unconstrained market flows
            '''

        })
    '''
    Energy Flow level that should be maintained according to the TLR rules
    as specified by the IDC.
    For Realtime Markets use in dispatch to control constraints under TLR
    and calculate unconstrained market flows
    '''

    terminateDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date/Time when record is no longer effective
            Used to determine when a record is no longer effective
            '''

        })
    '''
    Date/Time when record is no longer effective
    Used to determine when a record is no longer effective
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Flowgate.FlowgateRelief',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FlowgateValue(Identity):
    '''
    Day Ahead, Network Native Load, Economic Dispatch, values used for calculation
    of Network Native Load (NNL) Determinator process.
    '''

    economicDispatchLimit: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit for Economic Dispatch priority 6 energy flow on the specified flowgate
            for the specified time period.
            '''

        })
    '''
    Limit for Economic Dispatch priority 6 energy flow on the specified
    flowgate for the specified time period.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date/Time when record becomes effective
            Used to determine when a record becomes effective
            '''

        })
    '''
    Date/Time when record becomes effective
    Used to determine when a record becomes effective
    '''

    firmNetworkLimit: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit for firm flow on the specified flowgate for the specified time period.
            The amount of energy flow over a specifed flowgate due to generation in
            the market which can be classified as Firm Network priority.
            '''

        })
    '''
    Limit for firm flow on the specified flowgate for the specified time
    period. The amount of energy flow over a specifed flowgate due to generation
    in the market which can be classified as Firm Network priority.
    '''

    mktFlow: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount of energy flow over a specifed flowgate due to generation in
            the market.
            '''

        })
    '''
    The amount of energy flow over a specifed flowgate due to generation
    in the market.
    '''

    netFirmNetworkLimit: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net Energy flow in flowgate for the associated FlowgatePartner
            '''

        })
    '''
    Net Energy flow in flowgate for the associated FlowgatePartner
    '''

    flowDirectionFlag: Optional[ FlowDirectionType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the direction of energy flow in the flowgate
            '''

        })
    '''
    Specifies the direction of energy flow in the flowgate
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Flowgate.FlowgateValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FlowgatePartner: Optional[FlowgatePartner] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FlowgatePartner.FlowgateValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    FlowgatePartner: Optional[FlowgatePartner] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FlowgatePartner.FlowgateValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class GasPrice(Identity):
    '''
    Price of gas in monetary units.
    '''

    gasPriceIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The average natural gas price at a defined fuel region.
            '''

        })
    '''
    The average natural gas price at a defined fuel region.
    '''

    FuelRegion: Optional[FuelRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'FuelRegion.GasPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    FuelRegion: Optional[FuelRegion] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelRegion.GasPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to calculate generation "participation" of an individual pnond in
            an AggregatePnode.
            '''

        })
    '''
    Used to calculate generation "participation" of an individual pnond
    in an AggregatePnode.
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.GenDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.GenDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class GeneralClearingResults(Identity):
    '''
    Provides the adjusted load forecast value on a load forecast zone basis.
    '''

    totalLoad: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of load in the control zone
            Attribute Usage: hourly load value for the specific area
            '''

        })
    '''
    Amount of load in the control zone
    Attribute Usage: hourly load value for the specific area
    '''

    totalNetInterchange: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of interchange for the control zone
            Attribute Usage: hourly interchange value for the specific area
            '''

        })
    '''
    Amount of interchange for the control zone
    Attribute Usage: hourly interchange value for the specific area
    '''

    loadForecast: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load Prediction/Forecast (MW), by Time Period (5', 10', 15')
            '''

        })
    '''
    Load Prediction/Forecast (MW), by Time Period (5', 10', 15')
    '''

    GeneralClearing: Optional[GeneralClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneralClearing.GeneralClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.GeneralClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeneratingUnitDynamicValues(Identity):
    '''
    Optimal Power Flow or State Estimator Unit Data for Operator Training Simulator.
    This is used for RealTime, Study and Maintenance Users.
    '''

    lossFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss Factor
            '''

        })
    '''
    Loss Factor
    '''

    maximumMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum active power generation of the unit in MW
            '''

        })
    '''
    The maximum active power generation of the unit in MW
    '''

    minimumMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum active power generation of the unit in MW
            '''

        })
    '''
    The minimum active power generation of the unit in MW
    '''

    mVAR: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit reactive power generation in MVAR
            '''

        })
    '''
    Unit reactive power generation in MVAR
    '''

    mw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit active power generation in MW
            '''

        })
    '''
    Unit active power generation in MW
    '''

    sensitivity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit sencivity factor. The distribution factors (DFAX) for the unit
            '''

        })
    '''
    Unit sencivity factor. The distribution factors (DFAX) for the unit
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.GeneratingUnitDynamicValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktGeneratingUnit: Optional[MktGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktGeneratingUnit.GeneratingUnitDynamicValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenericDataSetVersion(Identity):
    '''
    '''

    majorVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The universal CIM version name describing a consistent set of packages.
            '''

        })
    '''
    The universal CIM version name describing a consistent set of packages.
    '''

    minorVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Describe minor updates and error corrections.
            '''

        })
    '''
    Describe minor updates and error corrections.
    '''

    published: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date when the complete CIM canonical model is published and made available
            for use,
            After the publication the major version and name space are updated.
            '''

        })
    '''
    The date when the complete CIM canonical model is published and made
    available for use,
    After the publication the major version and name space are updated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenericDataSet'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HVDCLookUpTable(Identity):
    '''
    '''

    input: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    output: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    sequence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    functionKind: Optional[ LookUpTableFunctionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qregulator: Optional[Qregulator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qregulator.HVDClookUpTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfHVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IEC61968CIMVersion(Identity):
    '''
    IEC 61968 version number assigned to this UML model.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (const=2016-10-31) Form is YYYY-MM-DD for example for January 5, 2009 it
            is 2009-01-05.
            '''

        })
    '''
    (const=2016-10-31) Form is YYYY-MM-DD for example for January 5, 2009
    it is 2009-01-05.
    '''

    version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (const=IEC61968CIM13v09) Form is IEC61968CIMXXvYY[a-z] where XX is the
            major CIM package version and the YY is the minor version. For example
            IEC61968CIM10v17a.
            The letter on the version number indicates the changes are due to National
            Committee comments.
            '''

        })
    '''
    (const=IEC61968CIM13v09) Form is IEC61968CIMXXvYY[a-z] where XX is
    the major CIM package version and the YY is the minor version. For
    example IEC61968CIM10v17a.
    The letter on the version number indicates the changes are due to National
    Committee comments.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'IEC61968'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IEC61970CIMVersion(Identity):
    '''
    This is the IEC 61970 CIM version number assigned to this UML model.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Form is YYYY-MM-DD for example for January 5, 2009 it is 2009-01-05.
            '''

        })
    '''
    Form is YYYY-MM-DD for example for January 5, 2009 it is 2009-01-05.
    '''

    version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Form is IEC61970CIMXXvYY where XX is the major CIM package version and
            the YY is the minor version. For example IEC61970CIM13v18.
            '''

        })
    '''
    Form is IEC61970CIMXXvYY where XX is the major CIM package version
    and the YY is the minor version. For example IEC61970CIM13v18.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'IEC61970'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IEC62325CIMVersion(Identity):
    '''
    IEC 62325 version number assigned to this UML model.
    '''

    date: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Form is YYYY-MM-DD for example for January 5, 2009 it is 2009-01-05.
            '''

        })
    '''
    Form is YYYY-MM-DD for example for January 5, 2009 it is 2009-01-05.
    '''

    version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Form is IEC62325CIMXXvYY where XX is the major CIM package version and
            the YY is the minor version. For example IEC62325CIM10v03.
            '''

        })
    '''
    Form is IEC62325CIMXXvYY where XX is the major CIM package version
    and the YY is the minor version. For example IEC62325CIM10v03.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'IEC62325'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IdcInverterControl(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IdentifiedObject(Identity):
    '''
    This is a root class to provide 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://iec.ch/TC57/CIM100#',
        '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.
    '''

    aliasName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The aliasName is free text human readable name of the object alternative
            to IdentifiedObject.name. It may be non unique and may not correlate to
            a naming hierarchy.
            The attribute aliasName is retained because of backwards compatibility
            between CIM relases. It is however recommended to replace aliasName with
            the Name class as aliasName is planned for retirement at a future time.
            '''

        })
    '''
    The aliasName is free text human readable name of the object alternative
    to IdentifiedObject.name. It may be non unique and may not correlate
    to a naming hierarchy.
    The attribute aliasName is retained because of backwards compatibility
    between CIM relases. It is however recommended to replace aliasName
    with the Name class as aliasName is planned for retirement at a future
    time.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    InstanceSet: Optional[InstanceSet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'InstanceSet.InstanceSetMember',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dataset containing the data objects.
            '''

        })
    '''
    Dataset containing the data objects.
    '''

    PropertiesCIMDataObject: Optional[ChangeSetMember] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChangeSetMember.PropertiesObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The single CIM data object in the appropriate dataset context.
            '''

        })
    '''
    The single CIM data object in the appropriate dataset context.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    PropertiesCIMDataObject: Optional[ChangeSetMember] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChangeSetMember.PropertiesObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The single CIM data object in the appropriate dataset context.
            '''

        })
    '''
    The single CIM data object in the appropriate dataset context.
    '''

    TargetingCIMDataObject: list[ChangeSetMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChangeSetMember.TargetObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Data objects registered.
            '''

        })
    '''
    Data objects registered.
    '''

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

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

    Names: list[Name] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Name.IdentifiedObject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All names of this identified object.
            '''

        })
    '''
    All names of this identified 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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operational limit sets at the terminal.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            See association end Terminal.TopologicalNode.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ACDCConverter.DCTerminals',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    DCConductingEquipment: Optional[DCConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DCConductingEquipment.DCTerminals',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An DC terminal belong to a DC conducting equipment.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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 same ConnectivityNode or same 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 same ConnectivityNode or same
    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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Circuit: Optional[Circuit] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Circuit.EndTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConductingEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.Terminals',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    NormalHeadFeeder: Optional[Feeder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Feeder.NormalHeadTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    ConverterDCSides: list[ACDCConverter] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACDCConverter.PccTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    Bushing: Optional[Bushing] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bushing.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EquipmentFaults: list[EquipmentFault] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquipmentFault.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The equipment faults at this terminal.
            '''

        })
    '''
    The equipment faults at this terminal.
    '''

    HasFirstMutualCoupling: list[MutualCoupling] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MutualCoupling.First_Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Mutual couplings with the branch associated as the first branch.
            '''

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

    PinTerminal: list[PinTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinTerminal.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegulatingControl: list[RegulatingControl] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulatingControl.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The controls regulating this terminal.
            '''

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

    RemoteInputSignal: list[RemoteInputSignal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RemoteInputSignal.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Input signal coming from this terminal.
            '''

        })
    '''
    Input signal coming from this terminal.
    '''

    SvPowerFlow: list[SvPowerFlow] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvPowerFlow.Terminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transformer ends connected at this terminal.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TerminalConstraintTerm: list[TerminalConstraintTerm] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TerminalConstraintTerm.MktTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Author.ActivityRecords',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Author of this activity record.
            '''

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

    Document: Optional[Document] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Document.ActivityRecord',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The document having associated activity records
            '''

        })
    '''
    The document having associated activity records
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.ActivityRecords',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets for which this activity record has been created.
            '''

        })
    '''
    All assets for which this activity record has been created.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetHealthEvent(ActivityRecord):
    '''
    An asset health-related event that is created by an analytic. The event
    is a record of a change in asset health.
    '''

    actionRecommendation: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Recommendation for action.
            '''

        })
    '''
    Recommendation for action.
    '''

    actionTimeline: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time horizon for action.
            '''

        })
    '''
    Time horizon for action.
    '''

    effectiveDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time when the event is effective.
            '''

        })
    '''
    The date and time when the event is effective.
    '''

    Analytic: Optional[Analytic] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Analytic.AssetHealthEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Analytic that initiated this asset health event.
            '''

        })
    '''
    Analytic that initiated this asset health event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ComplianceEvent(ActivityRecord):
    '''
    Compliance events are used for reporting regulatory or contract compliance
    issues and/or variances. These might be created as a consequence of local
    business processes and associated rules. It is anticipated that this class
    will be customised extensively to meet local implementation needs.
    Use inherited 'type' to indicate that, for example, expected performance
    will not be met or reported as mandated.
    '''

    deadline: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The deadline for compliance.
            '''

        })
    '''
    The deadline for compliance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free text remarks.
            '''

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

    ChangedAsset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ConfigurationEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location whose change resulted in this configuration event.
            '''

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

    ChangedOrganisationRole: Optional[OrganisationRole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OrganisationRole.ConfigurationEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Organisation role whose change resulted in this configuration event.
            '''

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

    ChangedPersonRole: Optional[PersonRole] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PersonRole.ConfigurationEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Person role whose change resulted in this configuration event.
            '''

        })
    '''
    Person role 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'FaultCauseType.ConfigurationEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fault cause type whose change resulted in this configuration event.
            '''

        })
    '''
    Fault cause type whose change resulted in this configuration event.
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.ConfigurationEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power system resource whose change resulted in this configuration event.
            '''

        })
    '''
    Power system resource whose change resulted in this configuration event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceEvent(ActivityRecord):
    '''
    Event detected by a device function associated with the end device.
    '''

    issuerID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identifier of the business entity originating an end device control.
            '''

        })
    '''
    Unique identifier of the business entity originating an end device
    control.
    '''

    issuerTrackingID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifier assigned by the initiator (e.g. retail electric provider) of
            an end device control action to uniquely identify the demand response event,
            text message, or other subject of the control action. Can be used when
            cancelling an event or text message request or to identify the originating
            event or text message in a consequential end device event.
            '''

        })
    '''
    Identifier assigned by the initiator (e.g. retail electric provider)
    of an end device control action to uniquely identify the demand response
    event, text message, or other subject of the control action. Can be
    used when cancelling an event or text message request or to identify
    the originating event or text message in a consequential end device
    event.
    '''

    userID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if user initiated) ID of user who initiated this end device event.
            '''

        })
    '''
    (if user initiated) ID of user who initiated this end device event.
    '''

    EndDevice: Optional[EndDevice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDevice.EndDeviceEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device that reported this end device event.
            '''

        })
    '''
    End device that reported this end device event.
    '''

    EndDeviceEventType: Optional[EndDeviceEventType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EndDeviceEventType.EndDeviceEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this end device event.
            '''

        })
    '''
    Type of this end device event.
    '''

    MeterReading: Optional[MeterReading] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReading.EndDeviceEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set of measured values to which this event applies.
            '''

        })
    '''
    Set of measured values to which this event applies.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.EndDeviceEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage point for which this end device event is reported.
            '''

        })
    '''
    Usage point for which this end device event is reported.
    '''

    EndDeviceEventDetails: list[EndDeviceEventDetail] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceEventDetail.EndDeviceEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All details of this end device event.
            '''

        })
    '''
    All details of this end device event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalAlert(ActivityRecord):
    '''
    An environmental alert issued by a provider or system.
    '''

    alertType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the issued alert which is drawn from the specified alert type
            list.
            '''

        })
    '''
    The type of the issued alert which is drawn from the specified alert
    type list.
    '''

    cancelledDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time and date alert cancelled. Used only if alert is cancelled before it
            expires.
            '''

        })
    '''
    Time and date alert cancelled. Used only if alert is cancelled before
    it expires.
    '''

    headline: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An abbreviated textual description of the alert issued.
            Note: the full text of the alert appears in the .description attribute
            (inherited from IdentifiedObject).
            '''

        })
    '''
    An abbreviated textual description of the alert issued.
    Note: the full text of the alert appears in the .description attribute
    (inherited from IdentifiedObject).
    '''

    AlertTypeList: Optional[AlertTypeList] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AlertTypeList.EnvironmentalAlert',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The list of alert types from which the type of this alert is drawn.
            '''

        })
    '''
    The list of alert types from which the type of this alert is drawn.
    '''

    EnvironmentalDataProvider: Optional[EnvironmentalDataProvider] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalDataProvider.EnvironmentalAlert',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Environmental data provider for this alert.
            '''

        })
    '''
    Environmental data provider for this alert.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalEvent(ActivityRecord):
    '''
    An environmental event to which one or more forecasts or observations may
    be tied and which may relate to or affect one or more assets.
    This class is intended to be used as a means of grouping forecasts and/or
    observations and could be used for a variety of purposes, including:
    <ul>
    <li>to define a 'named' event like Hurricane Katrina and allow the historic
    (or forecast) values for phenomena and measurements (precipitation, temperature)
    across time to be associated with it</li>
    <li>to identify assets that were (or are forecast to be) affected by a
    phenomenon or set of measurements</li>
    </ul>
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FailureEvent(ActivityRecord):
    '''
    An event where an asset has failed to perform its functions within specified
    parameters. This class is intended to reflect the failure itself. Additional
    information resulting from forensic analysis could be captured by a diagnosis
    data set.
    '''

    corporateCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code for asset failure.
            '''

        })
    '''
    Code for asset failure.
    '''

    failureDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time and date of asset failure.
            '''

        })
    '''
    Time and date of asset failure.
    '''

    faultLocatingMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The method used for locating the faulted part of the asset. For example,
            cable options include: Cap Discharge-Thumping, Bridge Method, Visual Inspection,
            Other.
            '''

        })
    '''
    The method used for locating the faulted part of the asset. For example,
    cable options include: Cap Discharge-Thumping, Bridge Method, Visual
    Inspection, Other.
    '''

    location: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Failure location on an object.
            '''

        })
    '''
    Failure location on an object.
    '''

    rootCause: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Root cause of asset failure.
            '''

        })
    '''
    Root cause of asset failure.
    '''

    breakerFailureReason: Optional[ BreakerFailureReasonKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for breaker failure.
            '''

        })
    '''
    Reason for breaker failure.
    '''

    failureClassification: Optional[ AssetFailureClassification ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification of failure.
            '''

        })
    '''
    Classification of failure.
    '''

    failureIsolationMethod: Optional[ FailureIsolationMethodKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            How the asset failure was isolated from the system.
            '''

        })
    '''
    How the asset failure was isolated from the system.
    '''

    failureMode: Optional[ AssetFailureMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            What asset failed to be able to do.
            '''

        })
    '''
    What asset failed to be able to do.
    '''

    transformerFailureReason: Optional[ TransformerFailureReasonKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for transformer failure.
            '''

        })
    '''
    Reason for transformer failure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PSREvent(ActivityRecord):
    '''
    Event recording the change in operational status of a power system resource
    (PSR); may be for an event that has already occurred or for a planned activity.
    '''

    kind: Optional[ PSREventKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of event.
            '''

        })
    '''
    Kind of event.
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.PSREvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power system resource that generated this event.
            '''

        })
    '''
    Power system resource that generated this event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingEvent(ActivityRecord):
    '''
    Event indicating the completion (success or fail) of any switching action
    (jumper action, cut action, tag action, etc). The switching action may
    or may not be a consequential event in response to a request to complete
    the action.
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.SwitchingEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching action that is performed on the switching event
            '''

        })
    '''
    The switching action that is performed on the switching event
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.SwitchingEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching action that is performed on the switching event
            '''

        })
    '''
    The switching action that is performed on the switching event
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkActivityRecord(ActivityRecord):
    '''
    Records information about the status of work or work task at a point in
    time.
    '''

    percentComplete: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated percentage of completion of this individual work task or overall
            work order.
            '''

        })
    '''
    Estimated percentage of completion of this individual work task or
    overall work order.
    '''

    BaseWork: Optional[BaseWork] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseWork.WorkActivityRecords',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base work that this activity record tracks.
            '''

        })
    '''
    Base work that this activity record tracks.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    lossPercentage: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss percentage
            '''

        })
    '''
    Loss percentage
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSelfSched: list[BidSelfSched] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidSelfSched.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: list[SubControlArea] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubControlArea.AdjacentCASet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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
    enumeratuion. 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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of aggregated node
            '''

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

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.AggregateNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AreaLoadCurve: list[AreaLoadCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AreaLoadCurve.AggregateNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CnodeDistributionFactor: list[CnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CnodeDistributionFactor.AggregateNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Instruction: list[Instructions] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Instructions.AggregateNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.AggregateNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadAggregationPoint(AggregateNode):
    '''
    A specialized class of type AggregatedNode type. Defines Load Aggregation
    Points.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MSSZone(AggregateNode):
    '''
    Model to define a zone within a Metered Sub System.
    '''

    lossFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the default loss factor for the Metered Sub-System (MSS) zone.
            The actual losses are calculated during the RT market.
            '''

        })
    '''
    This is the default loss factor for the Metered Sub-System (MSS) zone.
    The actual losses are calculated during the RT market.
    '''

    ignoreLosses: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides an indication if losses are to be ignored for this metered subsystem
            zone.
            '''

        })
    '''
    Provides an indication if losses are to be ignored for this metered
    subsystem zone.
    '''

    rucGrossSettlement: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Metered Sub-System (MSS) Load Following may select Net vs. Gross settlement.
            Net Settlement requires the net Demand settled at the Metered Sub-Sustem
            (MSS) Load Aggregation Point (LAP) and Net Supply needs to settle at the
            equivalent to the weighted average price of the MSS generation. Gross load
            will be settled at the System LAP and the Gross supply will be settled
            at the LMP. MSS Aggregation that elects gross settlement shall have to
            identify if its resources are Load Following or not.
            '''

        })
    '''
    Metered Sub-System (MSS) Load Following may select Net vs. Gross settlement.
    Net Settlement requires the net Demand settled at the Metered Sub-Sustem
    (MSS) Load Aggregation Point (LAP) and Net Supply needs to settle at
    the equivalent to the weighted average price of the MSS generation.
    Gross load will be settled at the System LAP and the Gross supply will
    be settled at the LMP. MSS Aggregation that elects gross settlement
    shall have to identify if its resources are Load Following or not.
    '''

    MeteredSubSystem: Optional[MeteredSubSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeteredSubSystem.MSSZone',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketRegion(AggregateNode):
    '''
    A specialized class of AggregatedNode type. Defines the MarketRegions.
    Regions could be system Market Regions, Energy Regions or Ancillary Service
    Regions.
    '''

    ExPostMarketRegionResults: list[ExPostMarketRegionResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostMarketRegionResults.MarketRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegionResults: list[MarketRegionResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketRegionResults.MarketRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReserveDemandCurve: list[ReserveDemandCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReserveDemandCurve.MarketRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RUCZone(AggregateNode):
    '''
    A specialized class of type AggregatedNode type. Defines RUC Zones. A forecast
    region represents a collection of Nodes for which the Market operator has
    developed sufficient historical demand and relevant weather data to perform
    a demand forecast for such area. The Market Operator may further adjust
    this forecast to ensure that the Reliability Unit Commitment produces adequate
    local capacity procurement.
    '''

    LossClearingResults: list[LossClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossClearingResults.RUCZone',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AlertTypeList(IdentifiedObject):
    '''
    A named list of alert types.
    Note: the name of the list is reflected in the .name attribute (inherited
    from IdentifiedObject).
    '''

    version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The version of the named list of alert types.
            '''

        })
    '''
    The version of the named list of alert types.
    '''

    EnvironmentalDataAuthority: Optional[EnvironmentalDataAuthority] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalDataAuthority.AlertTypeList',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The environmental data authority responsible for publishing this list of
            alert types.
            '''

        })
    '''
    The environmental data authority responsible for publishing this list
    of alert types.
    '''

    EnvironmentalAlert: list[EnvironmentalAlert] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAlert.AlertTypeList',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An alert whose type is drawn from this alert type list.
            '''

        })
    '''
    An alert whose type is drawn from this alert type list.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AltGeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ControlAreaGeneratingUnit.AltGeneratingUnitMeas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AltTieMeas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TieFlow.AltTieMeas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The tie flow of the alternate measurements.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AlternateModel(IdentifiedObject):
    '''
    '''

    AlternateModelGroup: Optional[AlternateModelGroup] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AlternateModelGroup.AlternateModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The group of alternate models for which one alternate is used.
            '''

        })
    '''
    The group of alternate models for which one alternate is used.
    '''

    Dataset: Optional[DataSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DataSet.AlternateModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The data belonging to the alternate model.
            '''

        })
    '''
    The data belonging to the alternate model.
    '''

    Dataset: Optional[DataSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DataSet.AlternateModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The data belonging to the alternate model.
            '''

        })
    '''
    The data belonging to the alternate model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AlternateModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class AlternateModelGroup(IdentifiedObject):
    '''
    '''

    AlternateModel: list[AlternateModel] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AlternateModel.AlternateModelGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An alternate model that can be one possiblity among alternates.
            '''

        })
    '''
    An alternate model that can be one possiblity among alternates.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AlternateModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AnalyticScore(IdentifiedObject):
    '''
    An indicative scoring by an analytic that can be used to characterize the
    health of or the risk associated with one or more assets. The analytic
    score reflects the results of an execution of an analytic against an asset
    or group of assets.
    '''

    calculationDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp of when the score was calculated.
            '''

        })
    '''
    Timestamp of when the score was calculated.
    '''

    effectiveDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date-time for when the score applies.
            '''

        })
    '''
    Date-time for when the score applies.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset health score value.
            '''

        })
    '''
    Asset health score value.
    '''

    Analytic: Optional[Analytic] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Analytic.AnalyticScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Analytic which was executed to arrive at this analytic score..
            '''

        })
    '''
    Analytic which was executed to arrive at this analytic score..
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.AnalyticScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset to which this analytic score applies.
            '''

        })
    '''
    Asset to which this analytic score applies.
    '''

    AssetAggregateScore: Optional[AggregateScore] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateScore.AnalyticScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate score to which this analytic score contributed.
            '''

        })
    '''
    Aggregate score to which this analytic score contributed.
    '''

    AssetGroup: Optional[AssetGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetGroup.AnalyticScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset group to which this analytic score applies..
            '''

        })
    '''
    Asset group to which this analytic score applies..
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AggregateScore(AnalyticScore):
    '''
    An aggregated indicative scoring by an analytic, which is based on other
    analytic scores, that can be used to characterize the health of or the
    risk associated with one or more assets.
    '''

    AnalyticScore: list[AnalyticScore] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalyticScore.AssetAggregateScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Analytic score contributing to this aggregate score.
            '''

        })
    '''
    Analytic score contributing to this aggregate score.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HealthScore(AggregateScore):
    '''
    Score that is indicative of the health of one or more assets.
    '''

    AssetRiskScore: Optional[RiskScore] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RiskScore.AssetHealthScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Risk score with which this health score is associated.
            '''

        })
    '''
    Risk score with which this health score is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RiskScore(AggregateScore):
    '''
    Score that is indicative of the risk associated with one or more assets.
    '''

    kind: Optional[ RiskScoreKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The risk kind, such as CustomerRisk, FinancialRisk, SafetyRisk, etc.
            '''

        })
    '''
    The risk kind, such as CustomerRisk, FinancialRisk, SafetyRisk, etc.
    '''

    AssetHealthScore: list[HealthScore] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HealthScore.AssetRiskScore',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Individual health score associated with this risk score.
            '''

        })
    '''
    Individual health score associated with this risk score.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AnnotatedProjectDependency(IdentifiedObject):
    '''
    '''

    dependencyType: Optional[ DependencyKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependentOnStage: Optional[NetworkModelProjectStage] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectStage.DependencyDependentOnStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependingStage: Optional[NetworkModelProjectStage] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectStage.DenpendecyDependingStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependentOnStage: Optional[NetworkModelProjectStage] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectStage.DependencyDependentOnStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssemblyDescription(IdentifiedObject):
    '''
    A description for how to assemble model parts for a specific purpose.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssemblyManifest(IdentifiedObject):
    '''
    A collection of model parts when combined form a case or part of a case.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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.
    '''

    critical: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if asset is considered critical for some reason (for example, a pole
            with critical attachments).
            '''

        })
    '''
    True if asset is considered critical for some reason (for example,
    a pole with critical attachments).
    '''

    initialCondition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Condition of asset at last baseline. Examples include new, rebuilt, overhaul
            required, other. Refer to inspection data for information on the most current
            condition of the asset.
            '''

        })
    '''
    Condition of asset at last baseline. Examples include new, rebuilt,
    overhaul required, other. Refer to inspection data for information
    on the most current condition of the asset.
    '''

    lotNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lot number for this asset. Even for the same model and version number,
            many assets are manufactured in lots.
            '''

        })
    '''
    Lot number for this asset. Even for the same model and version number,
    many assets are manufactured in lots.
    '''

    position: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Position of asset or asset component. May often be in relation to other
            assets or components.
            '''

        })
    '''
    Position of asset or asset component. May often be in relation to other
    assets or components.
    '''

    serialNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Serial number of this asset.
            '''

        })
    '''
    Serial number of this asset.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Utility-specific classification of Asset and its subtypes, according to
            their corporate standards, practices, and existing IT systems (e.g., for
            management of assets, maintenance, work, outage, customers, etc.).
            '''

        })
    '''
    Utility-specific classification of Asset and its subtypes, according
    to their corporate standards, practices, and existing IT systems (e.g.,
    for management of assets, maintenance, work, outage, customers, etc.).
    '''

    utcNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Uniquely tracked commodity (UTC) number.
            '''

        })
    '''
    Uniquely tracked commodity (UTC) number.
    '''

    initialLossOfLife: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of initial life expectancy that has been lost as of the last
            life expectancy baseline. Represents
            (initial life expectancy - current life expectancy) / initial life expectancy.
            '''

        })
    '''
    Percentage of initial life expectancy that has been lost as of the
    last life expectancy baseline. Represents
    (initial life expectancy - current life expectancy) / initial life
    expectancy.
    '''

    inUseState: Optional[ InUseStateKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication of whether asset is currently deployed (in use), ready to be
            put into use or not available for use.
            '''

        })
    '''
    Indication of whether asset is currently deployed (in use), ready to
    be put into use or not available for use.
    '''

    kind: Optional[ AssetKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of asset. Used in description of asset components in asset instance
            templates.
            '''

        })
    '''
    Kind of asset. Used in description of asset components in asset instance
    templates.
    '''

    lifecycleState: Optional[ AssetLifecycleStateKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current lifecycle state of asset.
            '''

        })
    '''
    Current lifecycle state of asset.
    '''

    purchasePrice: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Purchase price of asset.
            '''

        })
    '''
    Purchase price of asset.
    '''

    retiredReason: Optional[ RetiredReasonKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason asset retired.
            '''

        })
    '''
    Reason asset retired.
    '''

    ActivityRecords: list[ActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ActivityRecord.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All activity records created for this asset.
            '''

        })
    '''
    All activity records created for this asset.
    '''

    Analytic: list[Analytic] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Analytic.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Analytic performed on this asset.
            '''

        })
    '''
    Analytic performed on this asset.
    '''

    AssetContainer: Optional[AssetContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetContainer.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Container of this asset.
            '''

        })
    '''
    Container of this asset.
    '''

    AssetDeployment: Optional[AssetDeployment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetDeployment.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This asset's deployment.
            '''

        })
    '''
    This asset's deployment.
    '''

    AssetGroup: list[AssetGroup] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetGroup.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset group of which this asset is a part.
            '''

        })
    '''
    Asset group of which this asset is a part.
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Data applicable to this asset.
            '''

        })
    '''
    Data applicable to this asset.
    '''

    BreakerOperation: Optional[SwitchOperationSummary] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchOperationSummary.Breaker',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Breaker operation information for this breaker.
            '''

        })
    '''
    Breaker operation information for this breaker.
    '''

    ErpInventory: Optional[ErpInventory] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInventory.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpItemMaster: Optional[ErpItemMaster] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpItemMaster.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecDeliveryItems: list[ErpRecDelvLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpRecDelvLineItem.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FinancialInfo: Optional[FinancialInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FinancialInfo.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Financial information related to this asset.
            '''

        })
    '''
    Financial information related to this asset.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this asset.
            '''

        })
    '''
    Location of this asset.
    '''

    OrganisationRoles: list[AssetOrganisationRole] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetOrganisationRole.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All roles an organisation plays for this asset.
            '''

        })
    '''
    All roles an organisation plays for this asset.
    '''

    PowerSystemResources: list[PowerSystemResource] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerSystemResource.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All power system resources used to electrically model this asset. For example,
            transformer asset is electrically modelled with a transformer and its windings
            and tap changer.
            '''

        })
    '''
    All power system resources used to electrically model this asset. For
    example, transformer asset is electrically modelled with a transformer
    and its windings and tap changer.
    '''

    ProductAssetModel: Optional[ProductAssetModel] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProductAssetModel.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The model of this asset.
            '''

        })
    '''
    The model of this asset.
    '''

    ScheduledEvents: list[ScheduledEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledEvent.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Scheduled event related to this asset.
            '''

        })
    '''
    Scheduled event related to this asset.
    '''

    ServiceLocation: Optional[ServiceLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceLocation.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The sevice location at which the assets exist
            '''

        })
    '''
    The sevice location at which the assets exist
    '''

    WorkTasks: list[WorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTask.Assets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All non-replacement work tasks performed on this asset.
            '''

        })
    '''
    All non-replacement work tasks performed on this asset.
    '''

    AnalyticScore: list[AnalyticScore] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalyticScore.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Analytic result related to this asset.
            '''

        })
    '''
    Analytic result related to this asset.
    '''

    AssetDeployment: Optional[AssetDeployment] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetDeployment.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            This asset's deployment.
            '''

        })
    '''
    This asset's deployment.
    '''

    AssetFunction: list[AssetFunction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetFunction.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Function performed by this asset.
            '''

        })
    '''
    Function performed by this asset.
    '''

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

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

    ErpInventory: Optional[ErpInventory] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInventory.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpItemMaster: Optional[ErpItemMaster] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpItemMaster.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FinancialInfo: Optional[FinancialInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FinancialInfo.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Financial information related to this asset.
            '''

        })
    '''
    Financial information related to this asset.
    '''

    Measurements: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Measurement related to this asset.
            '''

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

    OperationalTags: list[OperationalTag] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalTag.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All operational tags placed on this asset.
            '''

        })
    '''
    All operational tags placed on this asset.
    '''

    Ownerships: list[Ownership] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Ownership.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All ownerships of this asset.
            '''

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

    ProcedureDataSet: list[ProcedureDataSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProcedureDataSet.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Procedure data set that applies to this asset.
            '''

        })
    '''
    Procedure data set that applies to this asset.
    '''

    Reconditionings: list[Reconditioning] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Reconditioning.Asset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BreakerOperation: Optional[SwitchOperationSummary] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchOperationSummary.Breaker',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Breaker operation information for this breaker.
            '''

        })
    '''
    Breaker operation information for this breaker.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetContainer(Asset):
    '''
    Asset that is aggregation of other assets such as conductors, transformers,
    switchgear, land, fences, buildings, equipment, vehicles, etc.
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.AssetContainer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets within this container asset.
            '''

        })
    '''
    All assets within this container asset.
    '''

    Seals: list[Seal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Seal.AssetContainer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All seals applied to this asset container.
            '''

        })
    '''
    All seals applied to this asset container.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cabinet(AssetContainer):
    '''
    Enclosure that offers protection to the equipment it contains and/or safety
    to people/animals outside it.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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(AssetContainer):
    '''
    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.
    '''

    circuitCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of circuits in duct bank. Refer to associations between a duct (ConductorAsset)
            and an ACLineSegment to understand which circuits are in which ducts.
            '''

        })
    '''
    Number of circuits in duct bank. Refer to associations between a duct
    (ConductorAsset) and an ACLineSegment to understand which circuits
    are in which ducts.
    '''

    WireSpacingInfos: list[WireSpacingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WireSpacingInfo.DuctBank',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDevice(AssetContainer):
    '''
    Asset container that performs one or more end device functions. One type
    of end device is a meter which can perform metering, load management, connect/disconnect,
    accounting functions, etc. Some end devices, such as ones monitoring and
    controlling air conditioners, refrigerators, pool pumps may be connected
    to a meter. All end devices may have communication capability defined by
    the associated communication function(s). An end device may be owned by
    a consumer, a service provider, utility or otherwise.
    There may be a related end device function that identifies a sensor or
    control point within a metering application or communications systems (e.g.,
    water, gas, electricity).
    Some devices may use an optical port that conforms to the ANSI C12.18 standard
    for communications.
    '''

    amrSystem: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Automated meter reading (AMR) or other communication system responsible
            for communications to this end device.
            '''

        })
    '''
    Automated meter reading (AMR) or other communication system responsible
    for communications to this end device.
    '''

    installCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Installation code.
            '''

        })
    '''
    Installation code.
    '''

    isPan: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this is a premises area network (PAN) device.
            '''

        })
    '''
    If true, this is a premises area network (PAN) device.
    '''

    isSmartInverter: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, there is a communicating inverter present.
            '''

        })
    '''
    If true, there is a communicating inverter present.
    '''

    isVirtual: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, there is no physical device. As an example, a virtual meter can
            be defined to aggregate the consumption for two or more physical meters.
            Otherwise, this is a physical hardware device.
            '''

        })
    '''
    If true, there is no physical device. As an example, a virtual meter
    can be defined to aggregate the consumption for two or more physical
    meters. Otherwise, this is a physical hardware device.
    '''

    timeZoneOffset: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time zone offset relative to GMT for the location of this end device.
            '''

        })
    '''
    Time zone offset relative to GMT for the location of this end device.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.EndDevices',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer owning this end device.
            '''

        })
    '''
    Customer owning this end device.
    '''

    EndDeviceInfo: Optional[EndDeviceInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceInfo.EndDevices',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device data.
            '''

        })
    '''
    End device data.
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.EndDevice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the end device
            '''

        })
    '''
    Meter read schedule that applies to the end device
    '''

    ServiceLocation: Optional[ServiceLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceLocation.EndDevices',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service location whose service delivery is measured by this end device.
            '''

        })
    '''
    Service location whose service delivery is measured by this end device.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.EndDevices',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage point to which this end device belongs.
            '''

        })
    '''
    Usage point to which this end device belongs.
    '''

    EndDeviceEvents: list[EndDeviceEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceEvent.EndDevice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All events reported by this end device.
            '''

        })
    '''
    All events reported by this end device.
    '''

    EndDeviceFunctions: list[EndDeviceFunction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceFunction.EndDevice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device functions this end device performs.
            '''

        })
    '''
    All end device functions this end device performs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Meter(EndDevice):
    '''
    Physical asset that performs the metering role of the usage point. Used
    for measuring consumption and detection of events.
    '''

    connectionCategory: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A code used to specify the connection category, e.g. low voltage, where
            the meter operates.
            '''

        })
    '''
    A code used to specify the connection category, e.g. low voltage, where
    the meter operates.
    '''

    formNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter form designation per ANSI C12.10 or other applicable standard. An
            alphanumeric designation denoting the circuit arrangement for which the
            meter is applicable and its specific terminal arrangement.
            '''

        })
    '''
    Meter form designation per ANSI C12.10 or other applicable standard.
    An alphanumeric designation denoting the circuit arrangement for which
    the meter is applicable and its specific terminal arrangement.
    '''

    MeterMultipliers: list[MeterMultiplier] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterMultiplier.Meter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All multipliers applied at this meter.
            '''

        })
    '''
    All multipliers applied at this meter.
    '''

    MeterReadings: list[MeterReading] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterReading.Meter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All meter readings provided by this meter.
            '''

        })
    '''
    All meter readings provided by this meter.
    '''

    MeterServiceWorkTask: list[MeterWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterWorkTask.Meter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All non-replacement work tasks on this meter.
            '''

        })
    '''
    All non-replacement work tasks on this meter.
    '''

    MeterReplacementWorkTasks: list[MeterWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterWorkTask.OldMeter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All work tasks on replacement of this old meter.
            '''

        })
    '''
    All work tasks on replacement of this old meter.
    '''

    VendingTransactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.Meter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All vending transactions on this meter.
            '''

        })
    '''
    All vending transactions on this meter.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Facility(AssetContainer):
    '''
    A facility may contain buildings, storage facilities, switching facilities,
    power generation, manufacturing facilities, maintenance facilities, etc.
    '''

    kind: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this facility.
            '''

        })
    '''
    Kind of this facility.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Structure(AssetContainer):
    '''
    Construction holding assets such as conductors, transformers, switchgear,
    etc. Where applicable, number of conductors can be derived from the number
    of associated wire spacing instances.
    '''

    fumigantAppliedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date fumigant was last applied.
            '''

        })
    '''
    Date fumigant was last applied.
    '''

    fumigantName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of fumigant.
            '''

        })
    '''
    Name of fumigant.
    '''

    removeWeed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if weeds are to be removed around asset.
            '''

        })
    '''
    True if weeds are to be removed around asset.
    '''

    weedRemovedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date weed were last removed.
            '''

        })
    '''
    Date weed were last removed.
    '''

    height: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Visible height of structure above ground level for overhead construction
            (e.g., Pole or Tower) or below ground level for an underground vault, manhole,
            etc. Refer to associated DimensionPropertiesInfo for other types of dimensions.
            '''

        })
    '''
    Visible height of structure above ground level for overhead construction
    (e.g., Pole or Tower) or below ground level for an underground vault,
    manhole, etc. Refer to associated DimensionPropertiesInfo for other
    types of dimensions.
    '''

    materialKind: Optional[ StructureMaterialKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    StructureSupports: list[StructureSupport] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StructureSupport.SecuredStructure',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Structure support for this structure.
            '''

        })
    '''
    Structure support for this structure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 Pole(Structure):
    '''
    Pole asset.
    '''

    breastBlock: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if a block of material has been attached to base of pole in ground
            for stability. This technique is used primarily when anchors can not be
            used.
            '''

        })
    '''
    True if a block of material has been attached to base of pole in ground
    for stability. This technique is used primarily when anchors can not
    be used.
    '''

    classification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pole class: 1, 2, 3, 4, 5, 6, 7, H1, H2, Other, Unknown.
            '''

        })
    '''
    Pole class: 1, 2, 3, 4, 5, 6, 7, H1, H2, Other, Unknown.
    '''

    construction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The framing structure mounted on the pole.
            '''

        })
    '''
    The framing structure mounted on the pole.
    '''

    jpaReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Joint pole agreement reference number.
            '''

        })
    '''
    Joint pole agreement reference number.
    '''

    speciesType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pole species. Aluminum, Aluminum Davit, Concrete, Fiberglass, Galvanized
            Davit, Galvanized, Steel Davit Primed, Steel Davit, Steel Standard Primed,
            Steel, Truncated, Wood-Treated, Wood-Hard, Wood-Salt Treated, Wood-Soft,
            Wood, Other, Unknown.
            '''

        })
    '''
    Pole species. Aluminum, Aluminum Davit, Concrete, Fiberglass, Galvanized
    Davit, Galvanized, Steel Davit Primed, Steel Davit, Steel Standard
    Primed, Steel, Truncated, Wood-Treated, Wood-Hard, Wood-Salt Treated,
    Wood-Soft, Wood, Other, Unknown.
    '''

    treatedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time pole was last treated with preservative.
            '''

        })
    '''
    Date and time pole was last treated with preservative.
    '''

    baseKind: Optional[ PoleBaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of base for this pole.
            '''

        })
    '''
    Kind of base for this pole.
    '''

    diameter: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Diameter of the pole.
            '''

        })
    '''
    Diameter of the pole.
    '''

    length: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of the pole (inclusive of any section of the pole that may be underground
            post-installation).
            '''

        })
    '''
    Length of the pole (inclusive of any section of the pole that may be
    underground post-installation).
    '''

    preservativeKind: Optional[ PolePreservativeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of preservative for this pole.
            '''

        })
    '''
    Kind of preservative for this pole.
    '''

    treatmentKind: Optional[ PoleTreatmentKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of treatment for this pole.
            '''

        })
    '''
    Kind of treatment for this pole.
    '''

    Streetlights: list[Streetlight] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Streetlight.Pole',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All streetlights attached to this pole.
            '''

        })
    '''
    All streetlights attached to this pole.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tower(Structure):
    '''
    Tower asset. Dimensions of the Tower are specified in associated DimensionsInfo
    class.
    When used for planning purposes, a transmission tower carrying two 3-phase
    circuits will have 2 instances of Connection, each of which will have 3
    MountingPoint instances, one for each phase all with coordinates relative
    to a common origin on the tower. (It may also have a 3rd Connection with
    a single MountingPoint for the Neutral line).
    '''

    constructionKind: Optional[ TowerConstructionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Construction structure on the tower.
            '''

        })
    '''
    Construction structure on the tower.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UndergroundStructure(Structure):
    '''
    Underground structure.
    '''

    hasVentilation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Primary material of underground structure.
            '''

        })
    '''
    Primary material of underground structure.
    '''

    sealingWarrantyExpiresDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date sealing warranty expires.
            '''

        })
    '''
    Date sealing warranty expires.
    '''

    kind: Optional[ UndergroundStructureKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if vault is ventilating.
            '''

        })
    '''
    True if vault is ventilating.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    FixedContact: Optional[InterrupterUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterrupterUnit.Bushing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fixed contact of interrupter to which this bushing is attached.
            '''

        })
    '''
    Fixed contact of interrupter to which this bushing is attached.
    '''

    MovingContact: Optional[InterrupterUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterrupterUnit.Bushing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Moving contact of interrupter to which this bushing is attached.
            '''

        })
    '''
    Moving contact of interrupter to which this bushing is attached.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.Bushing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Terminal to which this bushing is attached.
            '''

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

    BushingInsulationPFs: list[BushingInsulationPF] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BushingInsulationPF.Bushing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

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

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ComMedia(Asset):
    '''
    Communication media such as fibre optic cable, power-line, telephone, etc.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ComModule(Asset):
    '''
    An asset having communications capabilities that can be paired with a meter
    or other end device to provide the device with communication ability, through
    associated communication function. An end device that has communications
    capabilities through embedded hardware can use that function directly (without
    the communication module), or combine embedded communication function with
    additional communication functions provided through an external communication
    module (e.g. zigbee).
    '''

    amrSystem: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Automated meter reading (AMR) system communicating with this com module.
            '''

        })
    '''
    Automated meter reading (AMR) system communicating with this com module.
    '''

    supportsAutonomousDst: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, autonomous daylight saving time (DST) function is supported.
            '''

        })
    '''
    If true, autonomous daylight saving time (DST) function is supported.
    '''

    timeZoneOffset: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time zone offset relative to GMT for the location of this com module.
            '''

        })
    '''
    Time zone offset relative to GMT for the location of this com module.
    '''

    ComFunctions: list[ComFunction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ComFunction.ComModule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All functions this communication module performs.
            '''

        })
    '''
    All functions this communication module performs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FACTSDevice(Asset):
    '''
    FACTS device asset.
    '''

    kind: Optional[ FACTSDeviceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of FACTS device.
            '''

        })
    '''
    Kind of FACTS device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterrupterUnit(Asset):
    '''
    Breaker interrupter.
    Some interrupters have one fixed and one moving contact, some have 2 fixed
    contacts, some 2 moving contacts. An interrupter will have relationships
    with 2 bushings and those relationships may be any combination of the FixedContact
    and MovingContact associations.
    '''

    OperatingMechanism: Optional[OperatingMechanism] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperatingMechanism.InterrupterUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Breaker mechanism controlling this interrupter.
            '''

        })
    '''
    Breaker mechanism controlling this interrupter.
    '''

    Bushing: list[Bushing] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bushing.FixedContact',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Bushing(s) to which the fixed contact(s) of this interrupter is(are) attached.
            Some interrupters have one fixed and one moving contact, some have 2 fixed
            contacts, some 2 moving contacts. An interrupter will have relationships
            with 2 bushings and those relationships may be any combination of the FixedContact
            and MovingContact associations.
            '''

        })
    '''
    Bushing(s) to which the fixed contact(s) of this interrupter is(are)
    attached. Some interrupters have one fixed and one moving contact,
    some have 2 fixed contacts, some 2 moving contacts. An interrupter
    will have relationships with 2 bushings and those relationships may
    be any combination of the FixedContact and MovingContact associations.
    '''

    Bushing: list[Bushing] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bushing.MovingContact',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Bushing(s) to which the fixed contact(s) of this interrupter is(are) attached.
            Some interrupters have one fixed and one moving contact, some have 2 fixed
            contacts, some 2 moving contacts. An interrupter will have relationships
            with 2 bushings and those relationships may be any combination of the FixedContact
            and MovingContact associations.
            '''

        })
    '''
    Bushing(s) to which the fixed contact(s) of this interrupter is(are)
    attached. Some interrupters have one fixed and one moving contact,
    some have 2 fixed contacts, some 2 moving contacts. An interrupter
    will have relationships with 2 bushings and those relationships may
    be any combination of the FixedContact and MovingContact associations.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Joint(Asset):
    '''
    Joint connects two or more cables. It includes the portion of cable under
    wipes, welds, or other seals.
    '''

    insulation: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of insulation around the joint, classified according to the utility's
            asset management standards and practices.
            '''

        })
    '''
    The type of insulation around the joint, classified according to the
    utility's asset management standards and practices.
    '''

    configurationKind: Optional[ JointConfigurationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Configuration of joint.
            '''

        })
    '''
    Configuration of joint.
    '''

    fillKind: Optional[ JointFillKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Material used to fill the joint.
            '''

        })
    '''
    Material used to fill the joint.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperatingMechanism(Asset):
    '''
    Breaker mechanism.
    '''

    InterrupterUnit: list[InterrupterUnit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterrupterUnit.OperatingMechanism',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Interrupter controlled by this mechanism.
            '''

        })
    '''
    Interrupter controlled by this mechanism.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    armLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of arm. Note that a new light may be placed on an existing arm.
            '''

        })
    '''
    Length of arm. Note that a new light may be placed on an existing arm.
    '''

    lampKind: Optional[ StreetlightLampKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lamp kind.
            '''

        })
    '''
    Lamp kind.
    '''

    lightRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power rating of light.
            '''

        })
    '''
    Power rating of light.
    '''

    Pole: Optional[Pole] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pole.Streetlights',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pole to which thiss streetlight is attached.
            '''

        })
    '''
    Pole to which thiss streetlight is attached.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StructureSupport(Asset):
    '''
    Support for structure assets.
    '''

    anchorRodCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if anchor) Number of rods used.
            '''

        })
    '''
    (if anchor) Number of rods used.
    '''

    size: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Size of this support structure.
            '''

        })
    '''
    Size of this support structure.
    '''

    anchorKind: Optional[ AnchorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if anchor) Kind of anchor.
            '''

        })
    '''
    (if anchor) Kind of anchor.
    '''

    anchorRodLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if anchor) Length of rod used.
            '''

        })
    '''
    (if anchor) Length of rod used.
    '''

    direction: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direction of this support structure.
            '''

        })
    '''
    Direction of this support structure.
    '''

    kind: Optional[ StructureSupportKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of structure support.
            '''

        })
    '''
    Kind of structure support.
    '''

    length: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of this support structure.
            '''

        })
    '''
    Length of this support structure.
    '''

    SecuredStructure: Optional[Structure] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Structure.StructureSupports',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The secured structure supported by this structure support.
            '''

        })
    '''
    The secured structure supported by this structure support.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 WorkAsset(Asset):
    '''
    Asset used to perform work.
    '''

    Crew: Optional[Crew] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Crew.WorkAssets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Crew using this work asset.
            '''

        })
    '''
    Crew using this work asset.
    '''

    CUWorkEquipmentAsset: Optional[CUWorkEquipmentItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CUWorkEquipmentItem.TypeAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CUWorkEquipmentAsset: Optional[CUWorkEquipmentItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CUWorkEquipmentItem.TypeAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tool(WorkAsset):
    '''
    Tool asset.
    '''

    lastCalibrationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Date the tool was last calibrated.
            '''

        })
    '''
    (if applicable) Date the tool was last calibrated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Vehicle(WorkAsset):
    '''
    Vehicle asset.
    '''

    odometerReadDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the last odometer reading was recorded.
            '''

        })
    '''
    Date and time the last odometer reading was recorded.
    '''

    odometerReading: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Odometer reading of this vehicle as of the 'odometerReadingDateTime'. Refer
            to associated ActivityRecords for earlier readings.
            '''

        })
    '''
    Odometer reading of this vehicle as of the 'odometerReadingDateTime'.
    Refer to associated ActivityRecords for earlier readings.
    '''

    usageKind: Optional[ VehicleUsageKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of usage of the vehicle.
            '''

        })
    '''
    Kind of usage of the vehicle.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetDeployment(IdentifiedObject):
    '''
    Deployment of asset deployment in a power system resource role.
    '''

    likelihoodOfFailure: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Likelihood of asset failure on a scale of 1(low) to 100 (high).
            '''

        })
    '''
    Likelihood of asset failure on a scale of 1(low) to 100 (high).
    '''

    breakerApplication: Optional[ BreakerApplicationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of network role breaker is playing in this deployment (applies to
            breaker assets only).
            '''

        })
    '''
    Type of network role breaker is playing in this deployment (applies
    to breaker assets only).
    '''

    deploymentState: Optional[ DeploymentStateKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current deployment state of asset.
            '''

        })
    '''
    Current deployment state of asset.
    '''

    facilityKind: Optional[ FacilityKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of facility (like substation or pole or building or plant or service
            center) at which asset deployed.
            '''

        })
    '''
    Kind of facility (like substation or pole or building or plant or service
    center) at which asset deployed.
    '''

    transformerApplication: Optional[ TransformerApplicationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of network role transformer is playing in this deployment (applies
            to transformer assets only).
            '''

        })
    '''
    Type of network role transformer is playing in this deployment (applies
    to transformer assets only).
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.AssetDeployment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset in this deployment.
            '''

        })
    '''
    Asset in this deployment.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.NetworkAssetDeployment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base voltage of this network asset deployment.
            '''

        })
    '''
    Base voltage of this network asset deployment.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.AssetDeployment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset in this deployment.
            '''

        })
    '''
    Asset in this deployment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetFunction(IdentifiedObject):
    '''
    Function performed by an asset.
    '''

    configID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Configuration specified for this function.
            '''

        })
    '''
    Configuration specified for this function.
    '''

    firmwareID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Firmware version.
            '''

        })
    '''
    Firmware version.
    '''

    hardwareID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hardware version.
            '''

        })
    '''
    Hardware version.
    '''

    password: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Password needed to access this function.
            '''

        })
    '''
    Password needed to access this function.
    '''

    programID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of program.
            '''

        })
    '''
    Name of program.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.AssetFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset on which this function can be performed.
            '''

        })
    '''
    Asset on which this function can be performed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceFunction(AssetFunction):
    '''
    Function performed by an end device such as a meter, communication equipment,
    controllers, etc.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the function is enabled.
            '''

        })
    '''
    True if the function is enabled.
    '''

    EndDevice: Optional[EndDevice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDevice.EndDeviceFunctions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device that performs this function.
            '''

        })
    '''
    End device that performs this function.
    '''

    Registers: list[Register] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Register.EndDeviceFunction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All registers for quantities metered by this end device function.
            '''

        })
    '''
    All registers for quantities metered by this end device function.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ComFunction(EndDeviceFunction):
    '''
    Communication function of communication equipment or a device such as a
    meter.
    '''

    amrAddress: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Communication ID number (e.g. serial number, IP address, telephone number,
            etc.) of the AMR module which serves this meter.
            '''

        })
    '''
    Communication ID number (e.g. serial number, IP address, telephone
    number, etc.) of the AMR module which serves this meter.
    '''

    amrRouter: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Communication ID number (e.g. port number, serial number, data collector
            ID, etc.) of the parent device associated to this AMR module.
            '''

        })
    '''
    Communication ID number (e.g. port number, serial number, data collector
    ID, etc.) of the parent device associated to this AMR module.
    '''

    direction: Optional[ ComDirectionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of communication direction.
            '''

        })
    '''
    Kind of communication direction.
    '''

    technology: Optional[ ComTechnologyKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of communication technology.
            '''

        })
    '''
    Kind of communication technology.
    '''

    ComModule: Optional[ComModule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ComModule.ComFunctions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Module performing this communication function.
            '''

        })
    '''
    Module performing this communication function.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConnectDisconnectFunction(EndDeviceFunction):
    '''
    A function that will disconnect and reconnect the customer's load under
    defined conditions.
    '''

    eventCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Running cumulative count of connect or disconnect events, for the lifetime
            of this function or until the value is cleared.
            '''

        })
    '''
    Running cumulative count of connect or disconnect events, for the lifetime
    of this function or until the value is cleared.
    '''

    isConnected: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if this function is in the connected state.
            '''

        })
    '''
    True if this function is in the connected state.
    '''

    isDelayedDiscon: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set true, the switch may disconnect the service at the end of a specified
            time delay after the disconnect signal has been given. If set false, the
            switch may disconnect the service immediately after the disconnect signal
            has been given. This is typically the case for over current circuit-breakers
            which are classified as either instantaneous or slow acting.
            '''

        })
    '''
    If set true, the switch may disconnect the service at the end of a
    specified time delay after the disconnect signal has been given. If
    set false, the switch may disconnect the service immediately after
    the disconnect signal has been given. This is typically the case for
    over current circuit-breakers which are classified as either instantaneous
    or slow acting.
    '''

    isLocalAutoDisconOp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set true and if disconnection can be operated locally, the operation
            happens automatically. Otherwise it happens manually.
            '''

        })
    '''
    If set true and if disconnection can be operated locally, the operation
    happens automatically. Otherwise it happens manually.
    '''

    isLocalAutoReconOp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set true and if reconnection can be operated locally, then the operation
            happens automatically. Otherwise, it happens manually.
            '''

        })
    '''
    If set true and if reconnection can be operated locally, then the operation
    happens automatically. Otherwise, it happens manually.
    '''

    isRemoteAutoDisconOp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set true and if disconnection can be operated remotely, then the operation
            happens automatically. If set false and if disconnection can be operated
            remotely, then the operation happens manually.
            '''

        })
    '''
    If set true and if disconnection can be operated remotely, then the
    operation happens automatically. If set false and if disconnection
    can be operated remotely, then the operation happens manually.
    '''

    isRemoteAutoReconOp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If set true and if reconnection can be operated remotely, then the operation
            happens automatically. If set false and if reconnection can be operated
            remotely, then the operation happens manually.
            '''

        })
    '''
    If set true and if reconnection can be operated remotely, then the
    operation happens automatically. If set false and if reconnection can
    be operated remotely, then the operation happens manually.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadControl'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SimpleEndDeviceFunction(EndDeviceFunction):
    '''
    Simple end device function distinguished by 'kind'. Use this class for
    instances that cannot be represented by another end device function specialisations.
    '''

    kind: Optional[ EndDeviceFunctionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this function.
            '''

        })
    '''
    Kind of this function.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @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).
    '''

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

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

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

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

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.AssetInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets described by this data.
            '''

        })
    '''
    All assets described by this data.
    '''

    CatalogAssetType: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.AssetInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset information (nameplate) for this catalog asset type.
            '''

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

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

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

    ProductAssetModel: Optional[ProductAssetModel] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProductAssetModel.AssetInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Product asset model which conforms to this catalog asset type.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    c1Capacitance: Optional[ float | Capacitance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    insulationKind: Optional[ BushingInsulationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of insulation.
            '''

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

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current for bushing as installed.
            '''

        })
    '''
    Rated current for bushing as installed.
    '''

    ratedImpulseWithstandVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage. Can be referred to as Um, system voltage or class on bushing
            nameplate.
            '''

        })
    '''
    Rated voltage. Can be referred to as Um, system voltage or class on
    bushing nameplate.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    ganged: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    kind: Optional[ CompositeSwitchKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phases carried, if applicable.
            '''

        })
    '''
    Phases carried, if applicable.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentTransformerInfo(AssetInfo):
    '''
    Properties of current transformer asset.
    '''

    accuracyClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            CT accuracy classification.
            '''

        })
    '''
    CT accuracy classification.
    '''

    coreCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of cores.
            '''

        })
    '''
    Number of cores.
    '''

    ctClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    usage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage: eg. metering, protection, etc.
            '''

        })
    '''
    Usage: eg. metering, protection, etc.
    '''

    accuracyLimit: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Accuracy limit.
            '''

        })
    '''
    Accuracy limit.
    '''

    kneePointCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum primary current where the CT still displays linear characteristicts.
            '''

        })
    '''
    Maximum primary current where the CT still displays linear characteristicts.
    '''

    kneePointVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage across the secondary terminals where the CT still displays
            linear characteristicts.
            '''

        })
    '''
    Maximum voltage across the secondary terminals where the CT still displays
    linear characteristicts.
    '''

    primaryFlsRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Full load secondary (FLS) rating for primary winding.
            '''

        })
    '''
    Full load secondary (FLS) rating for primary winding.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current on the primary side.
            '''

        })
    '''
    Rated current on the primary side.
    '''

    secondaryFlsRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Full load secondary (FLS) rating for secondary winding.
            '''

        })
    '''
    Full load secondary (FLS) rating for secondary winding.
    '''

    tertiaryFlsRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Full load secondary (FLS) rating for tertiary winding.
            '''

        })
    '''
    Full load secondary (FLS) rating for tertiary winding.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceInfo(AssetInfo):
    '''
    End device data.
    '''

    isSolidState: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this is a solid state end device (as opposed to a mechanical or
            electromechanical device).
            '''

        })
    '''
    If true, this is a solid state end device (as opposed to a mechanical
    or electromechanical device).
    '''

    phaseCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of potential phases the end device supports, typically 0, 1 or 3.
            '''

        })
    '''
    Number of potential phases the end device supports, typically 0, 1
    or 3.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    EndDevices: list[EndDevice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDevice.EndDeviceInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end devices described with this data.
            '''

        })
    '''
    All end devices described with this data.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FaultIndicatorInfo(AssetInfo):
    '''
    Parameters of fault indicator asset.
    '''

    resetKind: Optional[ FaultIndicatorResetKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of reset mechanisim of this fault indicator.
            '''

        })
    '''
    Kind of reset mechanisim of this fault indicator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interrupting medium.
            '''

        })
    '''
    Interrupting medium.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Close voltage in volts DC.
            '''

        })
    '''
    Close voltage in volts DC.
    '''

    mechanismKind: Optional[ OperatingMechanismKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of breaker operating mechanism.
            '''

        })
    '''
    Kind of breaker operating mechanism.
    '''

    motorRunCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trip voltage in volts DC.
            '''

        })
    '''
    Trip voltage in volts DC.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PotentialTransformerInfo(AssetInfo):
    '''
    Properties of potential transformer asset.
    '''

    accuracyClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ptClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage on the primary side.
            '''

        })
    '''
    Rated voltage on the primary side.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectionEquipmentInfo(AssetInfo):
    '''
    Properties of protection equipment asset.
    '''

    groundTrip: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual ground trip for this type of relay, if applicable.
            '''

        })
    '''
    Actual ground trip for this type of relay, if applicable.
    '''

    phaseTrip: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual phase trip for this type of relay, if applicable.
            '''

        })
    '''
    Actual phase trip for this type of relay, if applicable.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedReactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ShuntCompensatorControl: Optional[ShuntCompensatorControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorControl.ShuntCompensatorInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SurgeArresterInfo(AssetInfo):
    '''
    Properties of surge arrester.
    '''

    isPolymer: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the arrester has a polymer housing, porcelain otherwise.
            '''

        })
    '''
    If true, the arrester has a polymer housing, porcelain otherwise.
    '''

    lineDischargeClass: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Determines the arrester energy discharge capability. Choices are limited
            to 0 (none) through 5 (highest) by IEC 60099. Classes 1..3 require a 10-kA
            nominal discharge current. Classes 4..5 require a 20-kA nominal discharge
            current. Lower nominal discharge currents must use class 0.
            '''

        })
    '''
    Determines the arrester energy discharge capability. Choices are limited
    to 0 (none) through 5 (highest) by IEC 60099. Classes 1..3 require
    a 10-kA nominal discharge current. Classes 4..5 require a 20-kA nominal
    discharge current. Lower nominal discharge currents must use class
    0.
    '''

    continuousOperatingVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum continuous power frequency voltage allowed on the surge arrester.
            '''

        })
    '''
    Maximum continuous power frequency voltage allowed on the surge arrester.
    '''

    lightningImpulseDischargeVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Residual voltage during an 8x20 microsecond current impulse at the nominal
            discharge current level.
            '''

        })
    '''
    Residual voltage during an 8x20 microsecond current impulse at the
    nominal discharge current level.
    '''

    nominalDischargeCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lightning discharge current used to classify the arrester. Choices
            are limited to 1.5, 2.5, 5, 10, and 20 kA by IEC 60099.
            '''

        })
    '''
    The lightning discharge current used to classify the arrester. Choices
    are limited to 1.5, 2.5, 5, 10, and 20 kA by IEC 60099.
    '''

    pressureReliefClass: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fault current level at which all parts of the failed arrester lie within
            a circle prescribed by IEC 60099.
            '''

        })
    '''
    Fault current level at which all parts of the failed arrester lie within
    a circle prescribed by IEC 60099.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The temporary overvoltage (TOV) level at power frequency that the surge
            arrester withstands for 10 seconds.
            '''

        })
    '''
    The temporary overvoltage (TOV) level at power frequency that the surge
    arrester withstands for 10 seconds.
    '''

    steepFrontDischargeVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Residual voltage during a current impulse with front time of 1 microsecond,
            and magnitude equal to the nominal discharge current level.
            '''

        })
    '''
    Residual voltage during a current impulse with front time of 1 microsecond,
    and magnitude equal to the nominal discharge current level.
    '''

    switchingImpulseDischargeVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Residual voltage during a current impulse with front time of at least 30
            microseconds, and magnitude specified in IEC 60099 for the line discharge
            class. Does not apply to line discharge class 0.
            '''

        })
    '''
    Residual voltage during a current impulse with front time of at least
    30 microseconds, and magnitude specified in IEC 60099 for the line
    discharge class. Does not apply to line discharge class 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchInfo(AssetInfo):
    '''
    <was Switch data.>
    Switch datasheet information.
    '''

    isSinglePhase: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Volume of oil in each tank of bulk oil breaker.
            '''

        })
    '''
    Volume of oil in each tank of bulk oil breaker.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedFrequency: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switch rated interrupting time in seconds.
            '''

        })
    '''
    Switch rated interrupting time in seconds.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OldSwitchInfo(SwitchInfo):
    '''
    Properties of switch assets.
    '''

    loadBreak: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if switch has load breaking capabiity. Unless specified false, this
            is always assumed to be true for breakers and reclosers.
            '''

        })
    '''
    True if switch has load breaking capabiity. Unless specified false,
    this is always assumed to be true for breakers and reclosers.
    '''

    poleCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of poles (i.e. of current carrying conductors that are switched).
            '''

        })
    '''
    Number of poles (i.e. of current carrying conductors that are switched).
    '''

    remote: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    dielectricStrength: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum rms voltage that may be applied across an open contact without
            breaking down the dielectric properties of the switch in the open position.
            '''

        })
    '''
    The maximum rms voltage that may be applied across an open contact
    without breaking down the dielectric properties of the switch in the
    open position.
    '''

    makingCapacity: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The highest value of current the switch can make at the rated voltage under
            specified operating conditions without suffering significant deterioration
            of its performance.
            '''

        })
    '''
    The highest value of current the switch can make at the rated voltage
    under specified operating conditions without suffering significant
    deterioration of its performance.
    '''

    minimumCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lowest value of current that the switch can make, carry and break in
            uninterrupted duty at the rated voltage under specified operating conditions
            without suffering significant deterioration of its performance.
            '''

        })
    '''
    The lowest value of current that the switch can make, carry and break
    in uninterrupted duty at the rated voltage under specified operating
    conditions without suffering significant deterioration of its performance.
    '''

    withstandCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The highest value of current the switch can carry in the closed position
            at the rated voltage under specified operating conditions without suffering
            significant deterioration of its performance.
            '''

        })
    '''
    The highest value of current the switch can carry in the closed position
    at the rated voltage under specified operating conditions without suffering
    significant deterioration of its performance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BreakerInfo(OldSwitchInfo):
    '''
    Properties of breaker assets.
    '''

    phaseTrip: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase trip rating.
            '''

        })
    '''
    Phase trip rating.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RecloserInfo(OldSwitchInfo):
    '''
    Properties of recloser assets.
    '''

    groundTripCapable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if device has ground trip capability.
            '''

        })
    '''
    True if device has ground trip capability.
    '''

    groundTripNormalEnabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if normal status of ground trip is enabled.
            '''

        })
    '''
    True if normal status of ground trip is enabled.
    '''

    recloseLockoutCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total number of phase reclose operations.
            '''

        })
    '''
    Total number of phase reclose operations.
    '''

    groundTripRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ground trip rating.
            '''

        })
    '''
    Ground trip rating.
    '''

    phaseTripRating: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase trip rating.
            '''

        })
    '''
    Phase trip rating.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerInfo(AssetInfo):
    '''
    Tap changer data.
    '''

    ctRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated apparent power.
            '''

        })
    '''
    Rated apparent power.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated current.
            '''

        })
    '''
    Rated current.
    '''

    ratedVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage.
            '''

        })
    '''
    Rated voltage.
    '''

    stepPhaseIncrement: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase shift per step position.
            '''

        })
    '''
    Phase shift per step position.
    '''

    stepVoltageIncrement: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransformerEndInfo(AssetInfo):
    '''
    Transformer end data.
    '''

    endNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    connectionKind: Optional[ WindingConnection ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of connection.
            '''

        })
    '''
    Kind of connection.
    '''

    emergencyS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            DC resistance.
            '''

        })
    '''
    DC resistance.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Normal apparent power rating.
            '''

        })
    '''
    Normal apparent power rating.
    '''

    ratedU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated voltage: phase-phase for three-phase windings, and either phase-phase
            or phase-neutral for single-phase windings.
            '''

        })
    '''
    Rated voltage: phase-phase for three-phase windings, and either phase-phase
    or phase-neutral for single-phase windings.
    '''

    shortTermS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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).
    '''

    CoreAdmittance: Optional[TransformerCoreAdmittance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerCoreAdmittance.TransformerEndInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerTankInfo.TransformerEndInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    ToMeshImpedances: list[TransformerMeshImpedance] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerMeshImpedance.ToTransformerEndInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    TransformerStarImpedance: Optional[TransformerStarImpedance] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerStarImpedance.TransformerEndInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OldTransformerEndInfo(TransformerEndInfo):
    '''
    '''

    dayOverLoadRating: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overload rating for 24 hours.
            '''

        })
    '''
    Overload rating for 24 hours.
    '''

    hourOverLoadRating: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overload rating for 1 hour.
            '''

        })
    '''
    Overload rating for 1 hour.
    '''

    solidInsulationWeight: Optional[ float | Mass ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Weight of solid insultation in transformer.
            '''

        })
    '''
    Weight of solid insultation in transformer.
    '''

    windingInsulationKind: Optional[ WindingInsulationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of insultation used for transformer windings.
            '''

        })
    '''
    Type of insultation used for transformer windings.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'PowerTransformerInfo.TransformerTankInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OldTransformerTankInfo(TransformerTankInfo):
    '''
    '''

    constructionKind: Optional[ TransformerConstructionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of construction for this transformer.
            '''

        })
    '''
    Kind of construction for this transformer.
    '''

    coreCoilsWeight: Optional[ float | Mass ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Weight of core and coils in transformer.
            '''

        })
    '''
    Weight of core and coils in transformer.
    '''

    coreKind: Optional[ TransformerCoreKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Core kind of this transformer product.
            '''

        })
    '''
    Core kind of this transformer product.
    '''

    function: Optional[ TransformerFunctionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Function of this transformer.
            '''

        })
    '''
    Function of this transformer.
    '''

    neutralBIL: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Basic insulation level of neutral.
            '''

        })
    '''
    Basic insulation level of neutral.
    '''

    oilPreservationKind: Optional[ OilPreservationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of oil preservation system.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @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.
    '''

    PerLengthLineParameter: list[PerLengthLineParameter] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PerLengthLineParameter.WireAssemblyInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WireInfo(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.
    '''

    coreStrandCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if used) Number of strands in the steel core.
            '''

        })
    '''
    (if used) Number of strands in the steel core.
    '''

    insulated: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if conductor is insulated.
            '''

        })
    '''
    True if conductor is insulated.
    '''

    sizeDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    insulationMaterial: Optional[ WireInsulationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if insulated conductor) Material used for insulation.
            '''

        })
    '''
    (if insulated conductor) Material used for insulation.
    '''

    insulationThickness: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if insulated conductor) Thickness of the insulation.
            '''

        })
    '''
    (if insulated conductor) Thickness of the insulation.
    '''

    material: Optional[ WireMaterialKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Conductor material.
            '''

        })
    '''
    Conductor material.
    '''

    rAC25: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    radius: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outside radius of the wire.
            '''

        })
    '''
    Outside radius of the wire.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current carrying capacity of the wire under stated thermal conditions.
            '''

        })
    '''
    Current carrying capacity of the wire under stated thermal conditions.
    '''

    rDC20: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ACLineSegmentPhase: list[ACLineSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegmentPhase.WireInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            AC line segment phase information associated with this wire information.
            '''

        })
    '''
    AC line segment phase information associated with this wire information.
    '''

    WirePhaseInfo: list[WirePhaseInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePhaseInfo.WireInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CableInfo(WireInfo):
    '''
    Cable data.
    '''

    isStrandFill: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    constructionKind: Optional[ CableConstructionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of construction of this cable.
            '''

        })
    '''
    Kind of construction of this cable.
    '''

    diameterOverCore: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum nominal design operating temperature.
            '''

        })
    '''
    Maximum nominal design operating temperature.
    '''

    outerJacketKind: Optional[ CableOuterJacketKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Material of the shield.
            '''

        })
    '''
    Material of the shield.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Thickness of the tape shield, before wrapping.
            '''

        })
    '''
    Thickness of the tape shield, before wrapping.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverheadWireInfo(WireInfo):
    '''
    Overhead wire data.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ACLineSegment: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.WireSpacingInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The AC line segment defined by the wire spacing information
            '''

        })
    '''
    The AC line segment defined by the wire spacing information
    '''

    WirePositions: list[WirePosition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WirePosition.WireSpacingInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class AssetModelCatalogue(IdentifiedObject):
    '''
    Catalogue of available types of products and materials that are used to
    build or install, maintain or operate an Asset. Each catalogue item is
    for a specific product (AssetModel) available from a specific supplier.
    '''

    AssetModelCatalogueItems: list[AssetModelCatalogueItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetModelCatalogueItem.AssetModelCatalogue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Auction(IdentifiedObject):
    '''
    A class providing the identification and type of an auction.
    '''

    allocationMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identification of the method of allocation in an auction.
            '''

        })
    '''
    Identification of the method of allocation in an auction.
    '''

    cancelled: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An indicator that signifies that the auction has been cancelled.
            '''

        })
    '''
    An indicator that signifies that the auction has been cancelled.
    '''

    category: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The product category of an auction.
            '''

        })
    '''
    The product category of an auction.
    '''

    paymentTerms: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The terms which dictate the determination of the bid payment price.
            '''

        })
    '''
    The terms which dictate the determination of the bid payment price.
    '''

    rights: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The rights of use the transmission capacity acquired in an auction.
            '''

        })
    '''
    The rights of use the transmission capacity acquired in an auction.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of the Auction (e.g. implicit, explicit ...).
            '''

        })
    '''
    The kind of the Auction (e.g. implicit, explicit ...).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AvailablityPlan(IdentifiedObject):
    '''
    The collection of all the availability schedules for a given time range.
    Only one availability plan shall be valid for the same period.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAvailabilityPlans'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The base frequency.
            '''

        })
    '''
    The base frequency.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value used as base power.
            '''

        })
    '''
    Value used as base power.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BaseVoltage(IdentifiedObject):
    '''
    Defines a system base voltage which is referenced.
    '''

    nominalVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The power system resource's base voltage. Shall be a positive value and
            not zero.
            '''

        })
    '''
    The power system resource's base voltage. Shall be a positive value
    and not zero.
    '''

    NetworkAssetDeployment: list[AssetDeployment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetDeployment.BaseVoltage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A network asset deployment at this base voltage level.
            '''

        })
    '''
    A network asset deployment at this base voltage level.
    '''

    ConductingEquipment: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.BaseVoltage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The voltage levels having this base voltage.
            '''

        })
    '''
    The voltage levels having this base voltage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    value1Multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for value1.
            '''

        })
    '''
    Multiplier for value1.
    '''

    value1Unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for value2.
            '''

        })
    '''
    Multiplier for value2.
    '''

    value2Unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value2 units of measure.
            '''

        })
    '''
    Value2 units of measure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DynamicSchedule(BasicIntervalSchedule):
    '''
    A continuously variable component of a control area's MW net interchange
    schedule. Dynamic schedules are sent and received by control areas.
    '''

    dynSchedSignRev: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dynamic schedule sign reversal required (true/false)
            '''

        })
    '''
    Dynamic schedule sign reversal required (true/false)
    '''

    dynSchedStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The "active" or "inactive" status of the dynamic schedule
            '''

        })
    '''
    The "active" or "inactive" status of the dynamic schedule
    '''

    MktMeasurement: Optional[MktMeasurement] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktMeasurement.DynamicSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Receive_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.Receive_DynamicSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A control area can receive dynamic schedules from other control areas
            '''

        })
    '''
    A control area can receive dynamic schedules from other control areas
    '''

    Send_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.Send_DynamicSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A control area can send dynamic schedules to other control areas
            '''

        })
    '''
    A control area can send dynamic schedules to other control areas
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AreaLoadCurve(RegularIntervalSchedule):
    '''
    Area load curve definition.
    '''

    forecastType: Optional[ LoadForecastType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load forecast area type.
            '''

        })
    '''
    Load forecast area type.
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.AreaLoadCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TACArea: Optional[TACArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TACArea.AreaLoadCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidHourlyProductSchedule(RegularIntervalSchedule):
    '''
    Containment for bid parameters that are dependent on a market product type.
    '''

    ProductBid: Optional[ProductBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProductBid.BidHourlyProductSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PumpingCostSchedule(BidHourlyProductSchedule):
    '''
    The operating cost of a Pump Storage Hydro Unit operating as a hydro pump.
    This schedule is assocated with the hourly parameters in a resource bid
    associated with a specific product within the bid.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PumpingLevelSchedule(BidHourlyProductSchedule):
    '''
    The fixed operating level of a Pump Storage Hydro Unit operating as a hydro
    pump. Associated with the energy market product type.
    This schedule is assocated with the hourly parameters in a resource bid
    associated with a specific product within the bid.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PumpingShutDownCostSchedule(BidHourlyProductSchedule):
    '''
    The cost to shutdown a Pump Storage Hydro Unit (in pump mode) or a pump.
    This schedule is assocated with the hourly parameters in a resource bid
    associated with a specific product within the bid.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidHourlySchedule(RegularIntervalSchedule):
    '''
    Containment for bid hourly parameters that are not product dependent.
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Bid.BidHourlySchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HourlyPreDispatchSchedule(BidHourlySchedule):
    '''
    An indicator specifying that a resource shall have an Hourly Pre-Dispatch.
    The resource could be a RegisteredGenerator or a RegisteredInterTie.
    This schedule is assocated with the hourly parameters in a resource bid.
    '''

    value: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag defining that for this hour in the resource bid the resource shall
            have an hourly pre-dispatch.
            '''

        })
    '''
    Flag defining that for this hour in the resource bid the resource shall
    have an hourly pre-dispatch.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OpenTieSchedule(BidHourlySchedule):
    '''
    Result of bid validation against conditions that may exist on an interchange
    that becomes disconnected or is heavily discounted with respect the MW
    flow.
    This schedule is assocated with the hourly parameters in a resource bid.
    '''

    value: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WheelingReferenceSchedule(BidHourlySchedule):
    '''
    A unique identifier of a wheeling transaction. A wheeling transaction is
    a balanced Energy exchange among Supply and Demand Resources.
    This schedule is assocated with the hourly parameters in a resource bid.
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidPriceSchedule(RegularIntervalSchedule):
    '''
    Defines bid schedules to allow a product bid to use specified bid price
    curves for different time intervals.
    '''

    bidType: Optional[ BidMitigationType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            BID Type:
            I - Initial Bid;
            F - Final Bid
            '''

        })
    '''
    BID Type:
    I - Initial Bid;
    F - Final Bid
    '''

    mitigationStatus: Optional[ BidMitigationStatus ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mitigation Status:
            'S' - Mitigated by SMPM because of "misconduct"
            'L; - Mitigated by LMPM because of "misconduct"
            'R' - Modified by LMPM because of RMR rules
            'M' - Mitigated because of "misconduct" both by SMPM and LMPM
            'B' - Mitigated because of "misconduct" both by SMPM and modified by LMLM
            because of RMR rules
            'O' - original
            '''

        })
    '''
    Mitigation Status:
    'S' - Mitigated by SMPM because of "misconduct"
    'L; - Mitigated by LMPM because of "misconduct"
    'R' - Modified by LMPM because of RMR rules
    'M' - Mitigated because of "misconduct" both by SMPM and LMPM
    'B' - Mitigated because of "misconduct" both by SMPM and modified by
    LMLM because of RMR rules
    'O' - original
    '''

    BidPriceCurve: Optional[BidPriceCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BidPriceCurve.BidSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductBid: Optional[ProductBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProductBid.BidSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidSelfSched(RegularIntervalSchedule):
    '''
    Defines self schedule values to be used for specified time intervals.
    '''

    pumpSelfSchedMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Contains the PriceTaker, ExistingTransmissionContract, TransmissionOwnershipRights
            pumping self schedule quantity. If this value is not null, then the unit
            is in pumping mode.
            '''

        })
    '''
    Contains the PriceTaker, ExistingTransmissionContract, TransmissionOwnershipRights
    pumping self schedule quantity. If this value is not null, then the
    unit is in pumping mode.
    '''

    selfSchedMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Self scheduled value
            '''

        })
    '''
    Self scheduled value
    '''

    selfSchedSptResource: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price Taker Export Self Sched Support Resource
            '''

        })
    '''
    Price Taker Export Self Sched Support Resource
    '''

    wheelingTransactionReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A unique identifier of a wheeling transaction. A wheeling transaction is
            a balanced Energy exchange among Supply and Demand Resources.
            '''

        })
    '''
    A unique identifier of a wheeling transaction. A wheeling transaction
    is a balanced Energy exchange among Supply and Demand Resources.
    '''

    balancingFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is a Y/N flag for a self-schedule of a resource per market per date
            and hour, using a specific TR ID. It indicates whether a self-schedule
            using a TR is balanced with another self-schedule using the same TR ID.
            '''

        })
    '''
    This is a Y/N flag for a self-schedule of a resource per market per
    date and hour, using a specific TR ID. It indicates whether a self-schedule
    using a TR is balanced with another self-schedule using the same TR
    ID.
    '''

    bidType: Optional[ BidTypeRMR ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            bidType has two types as the required output of requirements and qualified
            pre-dispatch.
            '''

        })
    '''
    bidType has two types as the required output of requirements and qualified
    pre-dispatch.
    '''

    priorityFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is a Y/N flag for a self-schedule of a resource per market per date
            and hour, using a specific TR ID. It indicates whether a self-schedule
            using a TR has scheduling priority in DAM/RTM.
            '''

        })
    '''
    This is a Y/N flag for a self-schedule of a resource per market per
    date and hour, using a specific TR ID. It indicates whether a self-schedule
    using a TR has scheduling priority in DAM/RTM.
    '''

    referenceType: Optional[ SelfSchedReferenceType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication of which type of self schedule is being referenced.
            '''

        })
    '''
    Indication of which type of self schedule is being referenced.
    '''

    selfSchedType: Optional[ MarketProductSelfSchedType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This attribute is used to specify if a bid includes a self sched bid. If
            so what self sched type is it. The possible values are shown as follow
            but not limited to:
            'ETC' - Existing transmission contract
            'TOR' - Transmission ownership right
            'RMR' - Reliability must run
            'RGMR' - Regulatory must run
            "RMT" - Relaiability must take
            "PT" - Price taker
            "LPT" - Low price taker
            "SP" - Self provision
            "RA" - Resource adequacy
            This attribute is originally defined in the BidSelfSched class
            '''

        })
    '''
    This attribute is used to specify if a bid includes a self sched bid.
    If so what self sched type is it. The possible values are shown as
    follow but not limited to:
    'ETC' - Existing transmission contract
    'TOR' - Transmission ownership right
    'RMR' - Reliability must run
    'RGMR' - Regulatory must run
    "RMT" - Relaiability must take
    "PT" - Price taker
    "LPT" - Low price taker
    "SP" - Self provision
    "RA" - Resource adequacy
    This attribute is originally defined in the BidSelfSched class
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AdjacentCASet: Optional[AdjacentCASet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AdjacentCASet.BidSelfSched',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.BidSelfSched',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductBid: Optional[ProductBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProductBid.BidSelfSched',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.BidSelfSched',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContractRight.BidSelfSched',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GenUnitOpSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'HydroPump.HydroPumpOpSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'Reservoir.InflowForecasts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourcePerformanceTimeSeriesFactor(RegularIntervalSchedule):
    '''
    Represents the performance of a resource as time series data for a specified
    time period, time interval, and evaluation criteria.
    '''

    timeSeriesDataType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of the time series data, e.g. baseline data, meter read data, computed
            performance data.
            '''

        })
    '''
    Type of the time series data, e.g. baseline data, meter read data,
    computed performance data.
    '''

    timeSeriesDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Optional description of the time series data, e.g. baseline data, meter
            read data, computed performance data.
            '''

        })
    '''
    Optional description of the time series data, e.g. baseline data, meter
    read data, computed performance data.
    '''

    value1Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description for the value1 contained within the TimeSeriesFactor.
            '''

        })
    '''
    Description for the value1 contained within the TimeSeriesFactor.
    '''

    value2Description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description for the value2 contained within the TimeSeriesFactor.
            '''

        })
    '''
    Description for the value2 contained within the TimeSeriesFactor.
    '''

    ResourcePerformanceEvaluation: Optional[ResourcePerformanceEvaluation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ResourcePerformanceEvaluation.ResourcePerformanceTimeSeriesFactors',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Season for the Schedule.
            '''

        })
    '''
    Season for the Schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'ConformLoadGroup.ConformLoadSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The ConformLoadGroup where the ConformLoadSchedule belongs.
            '''

        })
    '''
    The ConformLoadGroup where the ConformLoadSchedule belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'NonConformLoadGroup.NonConformLoadSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The NonConformLoadGroup where the NonConformLoadSchedule belongs.
            '''

        })
    '''
    The NonConformLoadGroup where the NonConformLoadSchedule belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'RegulatingControl.RegulationSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A SwitchSchedule is associated with a Switch.
            '''

        })
    '''
    A SwitchSchedule is associated with a Switch.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'TapChanger.TapSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A TapSchedule is associated with a TapChanger.
            '''

        })
    '''
    A TapSchedule is associated with a TapChanger.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'CogenerationPlant.SteamSendoutSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidError(IdentifiedObject):
    '''
    This class represent the error information for a bid that is detected during
    bid validation.
    '''

    componentType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    endTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            hour wihthin the bid for which the error applies
            '''

        })
    '''
    hour wihthin the bid for which the error applies
    '''

    errMessage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            error message
            '''

        })
    '''
    error message
    '''

    errPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority number for the error message
            '''

        })
    '''
    Priority number for the error message
    '''

    logTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    msgLevel: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ruleID: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            hour wihthin the bid for which the error applies
            '''

        })
    '''
    hour wihthin the bid for which the error applies
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.BidError',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class BidSet(IdentifiedObject):
    '''
    As set of mutually exclusive bids for which a maximum of one may be scheduled.
    Of these generating bids, only one generating bid can be scheduled at a
    time.
    '''

    GeneratingBids: list[GeneratingBid] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingBid.BidSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BilateralExchangeActor(IdentifiedObject):
    '''
    BilateralExchangeActor describes an actor that provides ICCP data, consumes
    ICCP data or both. The ICCP data provider lists the data it makes available
    to an ICCP data consumer. This data is described by ProvidedBilateralPoints.
    The relation between an ICCP data provider and a consumer is established
    by a BilateralExchangeAgreement. It is up to the ICCP data consumer to
    select what ProvidedBilateralPoints to use. The selection made is not described
    in this information model.
    '''

    ConsumerBilateralExchange: list[BilateralExchangeAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BilateralExchangeAgreement.Consumer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Agreement to information subscriber.
            '''

        })
    '''
    Agreement to information subscriber.
    '''

    ProviderBilateralExchange: list[BilateralExchangeAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BilateralExchangeAgreement.Provider',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Agreement to information provider.
            '''

        })
    '''
    Agreement to information provider.
    '''

    CommunicationLink: list[CommunicationLink] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommunicationLink.BilateralExchangeActor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Communication addressing for a Bilateral Table used by a ICCP data provider
            or consumer.
            '''

        })
    '''
    Communication addressing for a Bilateral Table used by a ICCP data
    provider or consumer.
    '''

    ProvidedBilateralIOPoint: list[ProvidedBilateralPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProvidedBilateralPoint.BilateralExchangeActor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            ICCP information in a Bilateral table that will be exposed to a remote
            peer.
            '''

        })
    '''
    ICCP information in a Bilateral table that will be exposed to a remote
    peer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ICCPVCC(BilateralExchangeActor):
    '''
    Indicates that the ICCP information is global in nature and normally is
    available to all authorized peers.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ICCPVirtualControlCentre(BilateralExchangeActor):
    '''
    This contains the information that a particular actor exposes for a particular
    agreed upon ICCP Bilateral Table.
    '''

    calling: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to indicate if the Provider is responsible for initiating the TASE.2
            connection. If the value is TRUE, the provider is responsible for establishing
            the association. If the value is FALSE, the peer provider of the Bilateral
            Table will need to establish the association.
            '''

        })
    '''
    Used to indicate if the Provider is responsible for initiating the
    TASE.2 connection. If the value is TRUE, the provider is responsible
    for establishing the association. If the value is FALSE, the peer provider
    of the Bilateral Table will need to establish the association.
    '''

    clientAndServer: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If True the value indicates that the entity represented by the bilateral
            table is capable of issuing requests and responding to request (e.g. bidirectional
            support of ICCP requests).
            If False, this indicates that a calling entity (e.g. calling = True) will
            not be able to respond to ICCP requests. If False, and calling=False, this
            indicates that the entity will only respond to ICCP requests and not issue
            ICCP requests.
            '''

        })
    '''
    If True the value indicates that the entity represented by the bilateral
    table is capable of issuing requests and responding to request (e.g.
    bidirectional support of ICCP requests).
    If False, this indicates that a calling entity (e.g. calling = True)
    will not be able to respond to ICCP requests. If False, and calling=False,
    this indicates that the entity will only respond to ICCP requests and
    not issue ICCP requests.
    '''

    minimumUpdateInterval: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the fastest update interval that can be provided for integrity
            information and Transfer Set creation. The value is in seconds.
            '''

        })
    '''
    Specifies the fastest update interval that can be provided for integrity
    information and Transfer Set creation. The value is in seconds.
    '''

    nameOfLocalICC: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the ICC scope name that the remote can use to access the information
            in the Bilateral Table if the information is not VCC scoped. This value
            may not be null.
            '''

        })
    '''
    Specifies the ICC scope name that the remote can use to access the
    information in the Bilateral Table if the information is not VCC scoped.
    This value may not be null.
    '''

    supportForBlock1: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for basic services. Must
            always be true.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for basic services.
    Must always be true.
    '''

    supportForBlock2: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for extended conditions.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for extended conditions.
    '''

    supportForBlock3: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for blocked transfers.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for blocked transfers.
    '''

    supportForBlock4: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for information messages.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for information messages.
    '''

    supportForBlock5: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for device control.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for device control.
    '''

    supportForDepriciatedBlock8: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per IEC 60870-6-702: If true indicates support for accounts. The use of
            this block was deprecated in Edition 3.
            '''

        })
    '''
    Per IEC 60870-6-702: If true indicates support for accounts. The use
    of this block was deprecated in Edition 3.
    '''

    transportSecurityRequirement: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, then transport level security as specified by IEC 62351-6 is required.
            '''

        })
    '''
    If true, then transport level security as specified by IEC 62351-6
    is required.
    '''

    applicationSecurityRequirement: Optional[ ApplicationSecurityKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the expected security mechanism, per IEC 62351-4, to be utilized.
            '''

        })
    '''
    Specifies the expected security mechanism, per IEC 62351-4, to be utilized.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BilateralExchangeAgreement(IdentifiedObject):
    '''
    This is the representation of the information exchange agreement between
    peers.
    '''

    Consumer: Optional[BilateralExchangeActor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BilateralExchangeActor.ConsumerBilateralExchange',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Subscriber of information from a remote peer.
            '''

        })
    '''
    Subscriber of information from a remote peer.
    '''

    Provider: Optional[BilateralExchangeActor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BilateralExchangeActor.ProviderBilateralExchange',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provider of information to a remote peer.
            '''

        })
    '''
    Provider of information to a remote peer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TASE2BilateralTable(BilateralExchangeAgreement):
    '''
    This class describe the sending (providing) side in a bilateral ICCP data
    exchange. Hence the ICCP bilateral (table) descriptions are created by
    exchanging ICCP Provider data between the parties.
    '''

    bilateralTableID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the version of the Bilateral Table configuration that is being
            exchanged.
            '''

        })
    '''
    Specifies the version of the Bilateral Table configuration that is
    being exchanged.
    '''

    bilateralTableVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Version attribute identifies a unique version of the Bilateral Table.
            If any changes are made to a Bilateral Table, then a new unique value for
            this attribute shall be generated.
            '''

        })
    '''
    The Version attribute identifies a unique version of the Bilateral
    Table. If any changes are made to a Bilateral Table, then a new unique
    value for this attribute shall be generated.
    '''

    tase2version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the version of the TASE.2 that is needed to access the Bilateral
            Table information via TASE.2.
            In order for a link to be established, both sides must have the same value.
            '''

        })
    '''
    Specifies the version of the TASE.2 that is needed to access the Bilateral
    Table information via TASE.2.
    In order for a link to be established, both sides must have the same
    value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BlockDispatchInstruction(IdentifiedObject):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BlockDispatchOrder(IdentifiedObject):
    '''
    '''

    sequence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The directed branch group terminals to be summed.
            '''

        })
    '''
    The directed branch group terminals to be summed.
    '''

    PinBranchGroup: list[PinBranchGroup] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinBranchGroup.BranchGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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
            has been created they may linked to user defined ToplogicalNdes using BusNameMarkers.
            '''

        })
    '''
    A user defined topological node that was originally defined in a planning
    model not yet having topology described by ConnectivityNodes. Once
    ConnectivityNodes has been created they may linked to user defined
    ToplogicalNdes using BusNameMarkers.
    '''

    Terminal: list[ACDCTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACDCTerminal.BusNameMarker',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Topology'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BushingInsulationPF(IdentifiedObject):
    '''
    Bushing insulation power factor condition as a result of a test.
    Typical status values are: Acceptable, Minor Deterioration or Moisture
    Absorption, Major Deterioration or Moisture Absorption, Failed.
    '''

    testKind: Optional[ BushingInsulationPfTestKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of test for this bushing.
            '''

        })
    '''
    Kind of test for this bushing.
    '''

    Bushing: Optional[Bushing] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bushing.BushingInsulationPFs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransformerObservation: Optional[TransformerObservation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerObservation.BushingInsultationPFs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CRRSegment(IdentifiedObject):
    '''
    CRRSegment represents a segment of a CRR in a particular time frame.
    The segment class contains amount, clearing price, start date and time,
    end date and time.
    '''

    endDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            segment end date time
            '''

        })
    '''
    segment end date time
    '''

    quantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The MW amount associated with the CRR
            '''

        })
    '''
    The MW amount associated with the CRR
    '''

    startDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            segment start date time
            '''

        })
    '''
    segment start date time
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dollar amount = quantity x clearingPrice
            '''

        })
    '''
    Dollar amount = quantity x clearingPrice
    '''

    clearingPrice: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Clearing price of a CRR
            '''

        })
    '''
    Clearing price of a CRR
    '''

    CongestionRevenueRight: Optional[CongestionRevenueRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CongestionRevenueRight.CRRSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CongestionRevenueRights'
    @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.
    .
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'harmonization',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.CalculationMethodHierarchy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Measurement value to which this calculation method hierarchy applies.
            '''

        })
    '''
    Measurement value to which this calculation method hierarchy applies.
    '''

    CalculationMethodOrder: list[CalculationMethodOrder] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CalculationMethodOrder.CalculationMethodHierarchy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Order of a statistical calculation associated with this calculation method
            hierarchy.
            '''

        })
    '''
    Order of a statistical calculation associated with this calculation
    method hierarchy.
    '''

    Measurement: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.CalculationMethodHierarchy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Cashier(IdentifiedObject):
    '''
    The operator of the point of sale for the duration of CashierShift. Cashier
    is under the exclusive management control of Vendor.
    '''

    CashierShifts: list[CashierShift] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CashierShift.Cashier',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All shifts operated by this cashier.
            '''

        })
    '''
    All shifts operated by this cashier.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CatalogAssetType(IdentifiedObject):
    '''
    a Assets that may be used for planning, work or design purposes.
    '''

    stockItem: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if item is a stock item (default).
            '''

        })
    '''
    True if item is a stock item (default).
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of type of asset.
            '''

        })
    '''
    Description of type of asset.
    '''

    estimatedUnitCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated unit cost (or cost per unit length) of this type of asset. It
            does not include labor to install, construct or configure it.
            '''

        })
    '''
    Estimated unit cost (or cost per unit length) of this type of asset.
    It does not include labor to install, construct or configure it.
    '''

    kind: Optional[ AssetKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of asset (from enumerated list).
            '''

        })
    '''
    Kind of asset (from enumerated list).
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.CatalogAssetType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Generic nameplate information associated with this catalog asset type.
            '''

        })
    '''
    Generic nameplate information associated with this catalog asset type.
    '''

    TypeAssetCatalogue: Optional[TypeAssetCatalogue] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TypeAssetCatalogue.TypeAssets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.CatalogAssetType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Generic nameplate information associated with this catalog asset type.
            '''

        })
    '''
    Generic nameplate information associated with this catalog asset type.
    '''

    CompatibleUnits: list[CompatibleUnit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CompatibleUnit.GenericAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpBomItemDatas: list[ErpBomItemData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpBomItemData.TypeAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInventoryIssues: list[ErpIssueInventory] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpIssueInventory.TypeAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReqLineItems: list[ErpReqLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpReqLineItem.TypeAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductAssetModel: list[ProductAssetModel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProductAssetModel.CatalogAssetType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Product asset model conforming to this catalog asset type.
            '''

        })
    '''
    Product asset model conforming to this catalog asset type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeneratorTypeAsset(CatalogAssetType):
    '''
    Generic generation equipment that may be used for various purposes such
    as work planning. It defines both the Real and Reactive power properties
    (modelled at the PSR level as a GeneratingUnit + SynchronousMachine).
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum real power limit.
            '''

        })
    '''
    Maximum real power limit.
    '''

    maxQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power limit.
            '''

        })
    '''
    Maximum reactive power limit.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum real power generated.
            '''

        })
    '''
    Minimum real power generated.
    '''

    minQ: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power generated.
            '''

        })
    '''
    Minimum reactive power generated.
    '''

    rDirectSubtrans: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis subtransient resistance.
            '''

        })
    '''
    Direct-axis subtransient resistance.
    '''

    rDirectSync: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis synchronous resistance.
            '''

        })
    '''
    Direct-axis synchronous resistance.
    '''

    rDirectTrans: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis transient resistance.
            '''

        })
    '''
    Direct-axis transient resistance.
    '''

    rQuadSubtrans: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis subtransient resistance.
            '''

        })
    '''
    Quadrature-axis subtransient resistance.
    '''

    rQuadSync: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis synchronous resistance.
            '''

        })
    '''
    Quadrature-axis synchronous resistance.
    '''

    rQuadTrans: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis transient resistance.
            '''

        })
    '''
    Quadrature-axis transient resistance.
    '''

    xDirectSubtrans: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis subtransient reactance.
            '''

        })
    '''
    Direct-axis subtransient reactance.
    '''

    xDirectSync: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis synchronous reactance.
            '''

        })
    '''
    Direct-axis synchronous reactance.
    '''

    xDirectTrans: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis transient reactance.
            '''

        })
    '''
    Direct-axis transient reactance.
    '''

    xQuadSubtrans: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis subtransient reactance.
            '''

        })
    '''
    Quadrature-axis subtransient reactance.
    '''

    xQuadSync: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis synchronous reactance.
            '''

        })
    '''
    Quadrature-axis synchronous reactance.
    '''

    xQuadTrans: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis transient reactance.
            '''

        })
    '''
    Quadrature-axis transient reactance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfTypeAsset'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Channel(IdentifiedObject):
    '''
    A single path for the collection or reporting of register values over a
    period of time. For example, a register which measures forward energy can
    have two channels, one providing bulk quantity readings and the other providing
    interval readings of a fixed interval size.
    '''

    isVirtual: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the data is being calculated by an enterprise system rather than
            metered directly.
            '''

        })
    '''
    If true, the data is being calculated by an enterprise system rather
    than metered directly.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReadingType.Channel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reading type for register values reported/collected by this channel.
            '''

        })
    '''
    Reading type for register values reported/collected by this channel.
    '''

    Register: Optional[Register] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Register.Channels',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Register whose values are collected/reported by this channel.
            '''

        })
    '''
    Register whose values are collected/reported by this channel.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReadingType.Channel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Reading type for register values reported/collected by this channel.
            '''

        })
    '''
    Reading type for register values reported/collected by this channel.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Charge(IdentifiedObject):
    '''
    A charge element associated with other entities such as tariff structures,
    auxiliary agreements or other charge elements. The total charge amount
    applicable to this instance of charge is the sum of fixed and variable
    portion.
    '''

    kind: Optional[ ChargeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of charge to be applied.
            '''

        })
    '''
    The kind of charge to be applied.
    '''

    variablePortion: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The variable portion of this charge element, calculated as a percentage
            of the total amount of a parent charge.
            '''

        })
    '''
    The variable portion of this charge element, calculated as a percentage
    of the total amount of a parent charge.
    '''

    ParentCharge: Optional[Charge] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Charge.ChildCharges',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Parent of this charge sub-component.
            '''

        })
    '''
    Parent of this charge sub-component.
    '''

    ChildCharges: list[Charge] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Charge.ParentCharge',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All sub-components of this complex charge.
            '''

        })
    '''
    All sub-components of this complex charge.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ChargeComponent(IdentifiedObject):
    '''
    A Charge Component is a list of configurable charge quality items to feed
    into settlement calculation and/or bill determinants.
    '''

    deleteStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    equation: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    message: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    roundOff: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    sum: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ChargeGroup(IdentifiedObject):
    '''
    Charge Group is the grouping of Charge Types for settlement invoicing purpose.
    Examples such as Ancillary Services, Interests, etc.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeGroupParent: Optional[ChargeGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChargeGroup.ChargeGroupChild',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A ChargeGroup instance can have relationships with other ChargeGroup instances.
            '''

        })
    '''
    A ChargeGroup instance can have relationships with other ChargeGroup
    instances.
    '''

    ChargeGroupChild: list[ChargeGroup] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChargeGroup.ChargeGroupParent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A ChargeGroup instance can have relationships with other ChargeGroup instances.
            '''

        })
    '''
    A ChargeGroup instance can have relationships with other ChargeGroup
    instances.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ClassificationCondition(IdentifiedObject):
    '''
    A classification condition used to define preconditions that must be met
    by a phenomena classification.
    '''

    duration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The duration of the of the condition in seconds
            '''

        })
    '''
    The duration of the of the condition in seconds
    '''

    test: Optional[ TestKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The test applied to the value.
            '''

        })
    '''
    The test applied to the value.
    '''

    PhenomenonClassification: Optional[PhenomenonClassification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PhenomenonClassification.ClassificationCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phenomenon classification to which this condition relates.
            '''

        })
    '''
    Phenomenon classification to which this condition relates.
    '''

    EnvironmentalAnalog: list[EnvironmentalAnalog] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAnalog.ClassificationCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Analog which contributes to the definition of this classification condition.
            '''

        })
    '''
    Analog which contributes to the definition of this classification condition.
    '''

    EnvironmentalStringMeasurement: list[EnvironmentalStringMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalStringMeasurement.ClassificationCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            String measurement which contributes to the definition of this classification
            condition.
            '''

        })
    '''
    String measurement which contributes to the definition of this classification
    condition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CnodeDistributionFactor(IdentifiedObject):
    '''
    Participation factors per Cnode. Used to calculate "participation" of Cnode
    in an AggregateNode. Each Cnode associated to an AggregateNode would be
    assigned a participation factor for its participation within the AggregateNode.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to calculate "participation" of Cnode in an AggregateNode
            '''

        })
    '''
    Used to calculate "participation" of Cnode in an AggregateNode
    '''

    podLossFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Point of delivery loss factor
            '''

        })
    '''
    Point of delivery loss factor
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.CnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.CnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.CnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.CnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CombinedCycleConfigurationMember(IdentifiedObject):
    '''
    Configuration Member of CCP Configuration.
    '''

    primary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            primary configuration.
            '''

        })
    '''
    primary configuration.
    '''

    steam: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam plant.
            '''

        })
    '''
    Steam plant.
    '''

    CombinedCycleConfiguration: Optional[CombinedCycleConfiguration] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CombinedCycleConfiguration.CombinedCycleConfigurationMember',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktThermalGeneratingUnit: Optional[MktThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktThermalGeneratingUnit.CombinedCycleConfigurationMember',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CombinedCycleLogicalConfiguration(IdentifiedObject):
    '''
    Logical Configuration of a Combined Cycle plant.
    Operating Combined Cycle Plant (CCP) configurations are represented as
    Logical CCP Resources. Logical representation shall be used for Market
    applications to optimize and control Market Operations. Logical representation
    is also necessary for controlling the number of CCP configurations and
    to temper performance issues that may otherwise occur.
    For example,(2CT configuration),(1CT + 1ST configuration) are examples
    of logical configuration, without specifying the specific CT and ST participating
    in the configuration.
    '''

    MktCombinedCyclePlant: Optional[MktCombinedCyclePlant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktCombinedCyclePlant.CombinedCycleLogicalConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CombinedCycleConfiguration: list[CombinedCycleConfiguration] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleConfiguration.CombinedCycleLogicalConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CommodityDefinition(IdentifiedObject):
    '''
    Commodities in the context of IEC 62325 are MarketProducts (energy, regulation,
    reserve, etc) traded at a specific location, which in this case is a Pnode
    (either a specific pricing node or a pricing area or zone defined as a
    collection of pricing nodes). The CommodityDefinition is a container for
    these two parameters, plus the unit of measure and the currency in which
    the Commodity is traded. Each CommodityDefinition should be relatively
    static; defined once and rarely changed.
    '''

    commodityCurrency: Optional[ Currency ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The currency in which the Commodity is traded, using the standard conventions
            associated with the Currency enumeration.
            '''

        })
    '''
    The currency in which the Commodity is traded, using the standard conventions
    associated with the Currency enumeration.
    '''

    commodityUnit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure in which the Commodity is traded, using the standard
            conventions associated with the UnitSymbol enumeration.
            '''

        })
    '''
    The unit of measure in which the Commodity is traded, using the standard
    conventions associated with the UnitSymbol enumeration.
    '''

    commodityUnitMultiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit multiplier, e.g. "k" to convert the unit "W-h" to "kW-h", using
            the standard conventions associated with the UnitMultiplier enumeration.
            '''

        })
    '''
    The unit multiplier, e.g. "k" to convert the unit "W-h" to "kW-h",
    using the standard conventions associated with the UnitMultiplier enumeration.
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.CommodityDefinition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Pnode.CommodityDefinition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.CommodityDefinition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CommodityPrice: list[CommodityPrice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityPrice.CommodityDefinition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConnectivityNode(IdentifiedObject):
    '''
    Connectivity nodes are points where terminals of AC conducting equipment
    are connected together with zero impedance.
    '''

    ConnectivityNodeContainer: Optional[ConnectivityNodeContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ConnectivityNodeContainer.ConnectivityNodes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    Terminals: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.ConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SysLoadDistribuFactor: Optional[SysLoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SysLoadDistributionFactor.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CnodeDistributionFactor: list[CnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CnodeDistributionFactor.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LossPenaltyFactor: list[LossSensitivity] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossSensitivity.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    NodeConstraintTerm: list[NodeConstraintTerm] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NodeConstraintTerm.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SysLoadDistribuFactor: Optional[SysLoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SysLoadDistributionFactor.MktConnectivityNode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConstraintResults(IdentifiedObject):
    '''
    Provides the Market results for the constraint processing for either the
    DAM or RTM. The data includes the constraint type (binding or violated),
    the solved value for the constraint, and the associated shadow price.
    '''

    baseFlow: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Branch base Power Flow.
            '''

        })
    '''
    Branch base Power Flow.
    '''

    BGLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This value is determined in DA and RTM. The SCUC optimization ensures that
            the MW flow on the Branch Group will not exceed this limit in the relevant
            direction.
            '''

        })
    '''
    This value is determined in DA and RTM. The SCUC optimization ensures
    that the MW flow on the Branch Group will not exceed this limit in
    the relevant direction.
    '''

    BGTRResCap: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Branch Group TR Reservation Capacity - This value is determined in DA and
            RTM. It is the amount of spare transmission capacity that is left for the
            TR holder to use.
            '''

        })
    '''
    Branch Group TR Reservation Capacity - This value is determined in
    DA and RTM. It is the amount of spare transmission capacity that is
    left for the TR holder to use.
    '''

    bindingLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW Limit.
            '''

        })
    '''
    MW Limit.
    '''

    clearedValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cleared MW.
            '''

        })
    '''
    Cleared MW.
    '''

    overloadMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transmission overload MW.
            '''

        })
    '''
    Transmission overload MW.
    '''

    percentMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual MW flow as percent of limit.
            '''

        })
    '''
    Actual MW flow as percent of limit.
    '''

    shadowPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shadow Price ($/MW) for the commodity. Shadow price for the corresponding
            constraint.
            '''

        })
    '''
    Shadow Price ($/MW) for the commodity. Shadow price for the corresponding
    constraint.
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Update time stamp.
            '''

        })
    '''
    Update time stamp.
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Updated user.
            '''

        })
    '''
    Updated user.
    '''

    competitivePathConstraint: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Non-competitive path constraint Flag"(Y/N) indicating whether the shadow
            price on a non-competitive path was non-zero.
            '''

        })
    '''
    Non-competitive path constraint Flag"(Y/N) indicating whether the shadow
    price on a non-competitive path was non-zero.
    '''

    constraintType: Optional[ ResultsConstraintType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of constraint.
            '''

        })
    '''
    Type of constraint.
    '''

    limitFlag: Optional[ ConstraintLimitType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit flag ('Maximum', 'Minimum').
            '''

        })
    '''
    Limit flag ('Maximum', 'Minimum').
    '''

    optimizationFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Included in optimization Y/N.
            '''

        })
    '''
    Included in optimization Y/N.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MQS change type.
            '''

        })
    '''
    MQS change type.
    '''

    ConstraintClearing: Optional[ConstraintClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConstraintClearing.ConstraintResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Flowgate.ConstraintResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktContingency: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktContingency.ConstraintResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConstraintTerm(IdentifiedObject):
    '''
    A constraint term is one element of a linear constraint.
    '''

    factor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    function: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The function is an enumerated value that can be 'active', 'reactive', or
            'VA' to indicate the type of flow.
            '''

        })
    '''
    The function is an enumerated value that can be 'active', 'reactive',
    or 'VA' to indicate the type of flow.
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.ConstraintTerms',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NodeConstraintTerm(ConstraintTerm):
    '''
    To be used only to constrain a quantity that cannot be associated with
    a terminal. For example, a registered generating unit that is not electrically
    connected to the network.
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.NodeConstraintTerm',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TerminalConstraintTerm(ConstraintTerm):
    '''
    A constraint term associated with a specific terminal on a physical piece
    of equipment.
    '''

    MktTerminal: Optional[MktTerminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktTerminal.TerminalConstraintTerm',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class Contingency(IdentifiedObject):
    '''
    An event threatening system reliability, consisting of one or more contingency
    elements.
    '''

    mustStudy: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set true if must study this contingency.
            '''

        })
    '''
    Set true if must study this contingency.
    '''

    ContingencyElement: list[ContingencyElement] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContingencyElement.Contingency',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A contingency can have any number of contingency elements.
            '''

        })
    '''
    A contingency can have any number of contingency elements.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Contingency'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktContingency(Contingency):
    '''
    Subclass of IEC 61970:Contingency.
    '''

    loadRolloverFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            load change flag
            Flag that indicates whether load rollover and load pickup should be processed
            for this contingency
            '''

        })
    '''
    load change flag
    Flag that indicates whether load rollover and load pickup should be
    processed for this contingency
    '''

    ltcControlFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ltc enable flag
            Flag that indicates if LTCs regulate voltage during the solution of the
            contingency
            '''

        })
    '''
    ltc enable flag
    Flag that indicates if LTCs regulate voltage during the solution of
    the contingency
    '''

    participationFactorSet: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Participation Factor flag
            An indication which set of generator participation factors should be used
            to re-allocate generation in this contingency
            '''

        })
    '''
    Participation Factor flag
    An indication which set of generator participation factors should be
    used to re-allocate generation in this contingency
    '''

    screeningFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            sceening flag for outage
            Flag that indicated whether screening is bypassed for the contingency
            '''

        })
    '''
    sceening flag for outage
    Flag that indicated whether screening is bypassed for the contingency
    '''

    TransferInterfaceSolutionA: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.MktContingencyA',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterfaceSolutionB: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.MktContingencyB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConstraintResults: list[ConstraintResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConstraintResults.MktContingency',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContingencyConstraintLimit: list[ContingencyConstraintLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContingencyConstraintLimit.MktContingency',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterfaceSolutionA: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.MktContingencyA',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterfaceSolutionB: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.MktContingencyB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContingencyElement(IdentifiedObject):
    '''
    An element of a system event to be studied by contingency analysis, representing
    a change in status of a single piece of equipment.
    '''

    Contingency: Optional[Contingency] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Contingency.ContingencyElement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A contingency element belongs to one contingency.
            '''

        })
    '''
    A contingency element belongs to one contingency.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Contingency'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContingencyEquipment(ContingencyElement):
    '''
    Equipment whose in service status is to change, such as a power transformer
    or AC line segment.
    '''

    contingentStatus: Optional[ ContingencyEquipmentStatusKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The status for the associated equipment when in the contingency state.
            This status is independent of the case to which the contingency is originally
            applied, but defines the equipment status when the contingency is applied.
            '''

        })
    '''
    The status for the associated equipment when in the contingency state.
    This status is independent of the case to which the contingency is
    originally applied, but defines the equipment status when the contingency
    is applied.
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Equipment.ContingencyEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The single piece of equipment to which to apply the contingency.
            '''

        })
    '''
    The single piece of equipment to which to apply the contingency.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Contingency'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContractRight(IdentifiedObject):
    '''
    Provides definition of Transmission Ownership Right and Existing Transmission
    Contract identifiers for use by SCUC. RMR contract hosting: Startup lead
    time, Contract Service Limits, Max Service Hours, Max MWhs, Max Start-ups,
    Ramp Rate, Max Net Dependable Capacity, Min Capacity and Unit Substitution
    for DAM/RTM to retrieve.
    '''

    chainOrder: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            When used in conjunction with a Transmission Right contract chain, this
            is the precedence for the contracts.
            '''

        })
    '''
    When used in conjunction with a Transmission Right contract chain,
    this is the precedence for the contracts.
    '''

    contractMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW value of the contract
            '''

        })
    '''
    MW value of the contract
    '''

    contractPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority for the contract. This should be unique amoung all contracts for
            a specific resource. This value is the directive for the SCUC algorithm
            on the order to satisfy/cut contracts.
            '''

        })
    '''
    Priority for the contract. This should be unique amoung all contracts
    for a specific resource. This value is the directive for the SCUC algorithm
    on the order to satisfy/cut contracts.
    '''

    contractStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Contract status
            '''

        })
    '''
    Contract status
    '''

    fuelAdder: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated Fuel Adder
            '''

        })
    '''
    Estimated Fuel Adder
    '''

    latestSchedMinutes: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This indicates the latest schedule minutes (e.g. t - xx) that this resource
            can be notified to respond. This attribute is only used if the market type
            is not supplied.
            '''

        })
    '''
    This indicates the latest schedule minutes (e.g. t - xx) that this
    resource can be notified to respond. This attribute is only used if
    the market type is not supplied.
    '''

    maximumScheduleQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum schedule MW quantity
            '''

        })
    '''
    Maximum schedule MW quantity
    '''

    maximumServiceHours: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum service hours
            '''

        })
    '''
    Maximum service hours
    '''

    maximumStartups: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum startups
            '''

        })
    '''
    Maximum startups
    '''

    maxNetDependableCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Net Dependable Capacity
            '''

        })
    '''
    Maximum Net Dependable Capacity
    '''

    minimumLoad: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum Load
            '''

        })
    '''
    Minimum Load
    '''

    minimumScheduleQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum schedule quanity
            '''

        })
    '''
    Minimum schedule quanity
    '''

    startupLeadTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start up lead time
            '''

        })
    '''
    Start up lead time
    '''

    contractPrice: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Financial value of the contract
            '''

        })
    '''
    Financial value of the contract
    '''

    contractType: Optional[ ContractType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            type of the contract. Possible values are but not limited by:
            ETC, TOR or RMR and RMT self schedules
            '''

        })
    '''
    type of the contract. Possible values are but not limited by:
    ETC, TOR or RMR and RMT self schedules
    '''

    financialLocation: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator if the location associated with this contract is financial (e.g.
            pricing nodes) or physical (e.g. connectivity nodes).
            '''

        })
    '''
    Indicator if the location associated with this contract is financial
    (e.g. pricing nodes) or physical (e.g. connectivity nodes).
    '''

    financialRightsDAM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate this contract provides financial rights in the DA Market
            '''

        })
    '''
    Flag to indicate this contract provides financial rights in the DA
    Market
    '''

    financialRightsRTM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate this contract provides financial rights in the RT Market
            '''

        })
    '''
    Flag to indicate this contract provides financial rights in the RT
    Market
    '''

    latestSchedMktType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This indicates the latest schedule market type a contract can be applied
            to. This is used in conjunction with the latestSchedMinutes attribute to
            determine the latest time this contract can be called in. The possible
            values for this attribute are: DAM, RTM or it can be omitted. If omitted,
            the latestSchedMinutes attribute defines the value.
            '''

        })
    '''
    This indicates the latest schedule market type a contract can be applied
    to. This is used in conjunction with the latestSchedMinutes attribute
    to determine the latest time this contract can be called in. The possible
    values for this attribute are: DAM, RTM or it can be omitted. If omitted,
    the latestSchedMinutes attribute defines the value.
    '''

    physicalRightsDAM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate this contract provides physical rights in the DA Market
            '''

        })
    '''
    Flag to indicate this contract provides physical rights in the DA Market
    '''

    physicalRightsRTM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate this contract provides physical rights in the RT Market
            '''

        })
    '''
    Flag to indicate this contract provides physical rights in the RT Market
    '''

    TRType: Optional[ TRType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transmission Right type - is this an individual contract right or a chain
            contract right. Types = CHAIN or INDIVIDUAL
            '''

        })
    '''
    Transmission Right type - is this an individual contract right or a
    chain contract right. Types = CHAIN or INDIVIDUAL
    '''

    Chain_TransmissionRightChain: Optional[TransmissionRightChain] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionRightChain.Chain_ContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Ind_TransmissionRightChain: Optional[TransmissionRightChain] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionRightChain.Ind_ContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SchedulingCoordinator: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSelfSched: list[BidSelfSched] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidSelfSched.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContractDistributionFactor: list[ContractDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractDistributionFactor.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubstitutionResourceList: list[SubstitutionResourceList] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubstitutionResourceList.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TREntitlement: list[TREntitlement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TREntitlement.TransmissionContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionInterfaceEntitlement: list[TransmissionInterfaceRightEntitlement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionInterfaceRightEntitlement.ContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Chain_TransmissionRightChain: Optional[TransmissionRightChain] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionRightChain.Chain_ContractRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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': '1',
        'maxOccurs': '1',
        'inverse': 'ControlArea.ControlAreaGeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.ControlAreaGeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CoolingPowerRating(IdentifiedObject):
    '''
    There are often stages of power which are associated with stages of cooling.
    For instance, a transformer may be rated 121kV on the primary, 15kV on
    the secondary and 4kV on the tertiary winding. These are voltage ratings
    and the power ratings are generally the same for all three windings and
    independent of the voltage ratings, there are instances where the tertiary
    may have a lower power rating.
    For example, for three stages, the power rating may be 15/20/25 MVA and
    the cooling is OA/FA/FOA. The 15 MVA rating goes with the OA cooling (Oil
    and Air cooling). This is called the self cooled rating as there are no
    external cooling enhancements. The 20 MVA rating goes with the FA cooling
    (Forced Air cooling), this means that when the fans are running and thus
    enhancing the cooling characteristics, the transformer can operate at a
    power level of 20 MVA. The 25 MVA rating goes with the FOA cooling (Forced
    Oil and Air cooling), this means that when the fans and pumps are running
    and thus enhancing the cooling characteristics even more than before, the
    transformer can operate at a power level of 25 MVA. This 15/20/25 MVA does
    not state how the power is split between the various windings. It may be
    25 MVA input on the primary, 25 MVA output on the secondary and 0 MVA output
    on the tertiary. It may also operate at 25 MVA input on the primary, 17
    MVA output on the secondary and 8 MVA output on the tertiary.
    '''

    stage: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stage of cooling and associated power rating.
            '''

        })
    '''
    Stage of cooling and associated power rating.
    '''

    coolingKind: Optional[ CoolingKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of cooling system.
            '''

        })
    '''
    Kind of cooling system.
    '''

    powerRating: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The power rating associated with type of cooling specified for this stage.
            '''

        })
    '''
    The power rating associated with type of cooling specified for this
    stage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @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://iec.ch/TC57/CIM100#',
        '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::4.3.2.6
            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::4.3.2.6
    A profile should limit this code to a set of allowed URNs agreed to
    by all sending and receiving parties.
    '''

    Locations: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.CoordinateSystem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Craft(IdentifiedObject):
    '''
    Craft of a person or a crew. Examples include overhead electric, underground
    electric, high pressure gas, etc. This ensures necessary knowledge and
    skills before being allowed to perform certain types of work.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's work mangement standards and practices.
            '''

        })
    '''
    Classification by utility's work mangement standards and practices.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Crew(IdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The location this crew is assigned to.
            '''

        })
    '''
    The location this crew is assigned to.
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.Crew',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching action that is assigned to this crew.
            '''

        })
    '''
    The switching action that is assigned to this crew.
    '''

    CrewMembers: list[CrewMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CrewMember.Crew',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The dispatch history associated with the crew.
            '''

        })
    '''
    The dispatch history associated with the crew.
    '''

    WorkAssets: list[WorkAsset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkAsset.Crew',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All work assets used by this crew.
            '''

        })
    '''
    All work assets used by this crew.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 OldCrew(Crew):
    '''
    A crew is a group of people with specific skills, tools, and vehicles.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's work management standards and practices.
            '''

        })
    '''
    Classification by utility's work management standards and practices.
    '''

    Route: Optional[Route] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Route.Crews',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Capabilities: list[Capability] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Capability.Crew',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All crews of this type.
            '''

        })
    '''
    All crews of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentEmergencyScheduledInterchange(IdentifiedObject):
    '''
    Control area emergency schedules
    '''

    emergencyScheduleMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net tie MW. These are three entries, the current emergency schedule interchange
            and the two future schedules if they exist.
            '''

        })
    '''
    Net tie MW. These are three entries, the current emergency schedule
    interchange and the two future schedules if they exist.
    '''

    emergencyScheduleRampTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramp time, the ramping time for a schedule. This is calculated as the remaining
            time to ramp if a schedule is ramping. Measured in seconds, but can be
            negattive.
            '''

        })
    '''
    Ramp time, the ramping time for a schedule. This is calculated as the
    remaining time to ramp if a schedule is ramping. Measured in seconds,
    but can be negattive.
    '''

    emergencyScheduleStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net tie time, the start time for a schedule. This is calculated as the
            current time if a schedule is ramping.
            '''

        })
    '''
    Net tie time, the start time for a schedule. This is calculated as
    the current time if a schedule is ramping.
    '''

    InternalControlArea: Optional[InternalControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'InternalControlArea.CurrentEmergencySI',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentState(IdentifiedObject):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetPropertyCurve(Curve):
    '''
    An Asset Property that is described through curves rather than as a data
    point. The relationship is to be defined between an independent variable
    (X-axis) and one or two dependent variables (Y1-axis and Y2-axis).
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.AssetPropertyCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BaseCaseConstraintLimit(Curve):
    '''
    Possibly time-varying max MW or MVA and optionally Min MW limit or MVA
    limit (Y1 and Y2, respectively) assigned to a contingency analysis base
    case. Use CurveSchedule XAxisUnits to specify MW or MVA. To be used only
    if the BaseCaseConstraintLimit differs from the DefaultConstraintLimit.
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.BaseCaseConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.BaseCaseConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidPriceCurve(Curve):
    '''
    Relationship between unit operating price in $/hour (Y-axis) and unit output
    in MW (X-axis).
    '''

    BidSchedule: list[BidPriceSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidPriceSchedule.BidPriceCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@dataclass(repr=False)
class CTTempActivePowerCurve(Curve):
    '''
    Relationship between the combustion turbine's power output rating in gross
    active power (X-axis) and the ambient air temperature (Y-axis).
    '''

    CombustionTurbine: Optional[CombustionTurbine] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CombustionTurbine.CTTempActivePowerCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A combustion turbine may have an active power versus ambient temperature
            relationship.
            '''

        })
    '''
    A combustion turbine may have an active power versus ambient temperature
    relationship.
    '''

    CombustionTurbine: Optional[CombustionTurbine] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CombustionTurbine.CTTempActivePowerCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A combustion turbine may have an active power versus ambient temperature
            relationship.
            '''

        })
    '''
    A combustion turbine may have an active power versus ambient temperature
    relationship.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContingencyConstraintLimit(Curve):
    '''
    Possibly time-varying max MW or MVA and optionally Min MW limit or MVA
    limit (Y1 and Y2, respectively) assigned to a constraint for a specific
    contingency. Use CurveSchedule XAxisUnits to specify MW or MVA.
    '''

    MktContingency: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktContingency.ContingencyConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MWLimitSchedules: Optional[MWLimitSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MWLimitSchedule.SecurityConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.ContingencyConstraintLimits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MWLimitSchedules: Optional[MWLimitSchedule] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MWLimitSchedule.SecurityConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DefaultBidCurve(Curve):
    '''
    Default bid curve for default energy bid curve and default startup curves
    (cost and time).
    '''

    curveType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            To indicate a type used for a default energy bid curve, such as LMP, cost
            or consultative based.
            '''

        })
    '''
    To indicate a type used for a default energy bid curve, such as LMP,
    cost or consultative based.
    '''

    debAdderFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Default energy bid adder flag
            '''

        })
    '''
    Default energy bid adder flag
    '''

    DefaultBid: Optional[DefaultBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBid.DefaultBidCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultBid: Optional[DefaultBid] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBid.DefaultBidCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DefaultConstraintLimit(Curve):
    '''
    Possibly time-varying max MW or MVA and optionally Min MW limit or MVA
    limit (Y1 and Y2, respectively) applied as a default value if no specific
    constraint limits are specified for a contingency analysis. Use CurveSchedule
    XAxisUnits to specify MW or MVA.
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.DefaultConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraintSum: Optional[SecurityConstraintSum] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraintSum.DefaultConstraintLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.EmmissionAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.EmissionCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'FossilFuel.FuelAllocationSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.FuelAllocationSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FuelCostCurve(Curve):
    '''
    Relationship between unit fuel cost in $/kWh(Y-axis) and unit output in
    MW (X-axis).
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.FuelCostCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.FuelCostCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GenUnitOpCostCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'GeneratingUnit.GrossToNetActivePowerCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Heat input - offset adjustment factor.
            '''

        })
    '''
    Heat input - offset adjustment factor.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatInputCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.HeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktHeatRateCurve(HeatRateCurve):
    '''
    Subclass of IEC 61970: Generation: Production:HeatRateCurve.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.MktHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.MktHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.MktHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.MktHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.HydroGeneratingEfficiencyCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.IncrementalHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 InterchangeSchedule(Curve):
    '''
    Interchange schedule class to hold information for interchange schedules
    such as import export type, energy type, and etc.
    '''

    intervalLength: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval length.
            '''

        })
    '''
    Interval length.
    '''

    operatingDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating date, hour.
            '''

        })
    '''
    Operating date, hour.
    '''

    outOfMarketType: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            To indicate an out-of-market (OOM) schedule.
            '''

        })
    '''
    To indicate an out-of-market (OOM) schedule.
    '''

    wcrID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wheeling Counter-Resource ID (required when Schedule Type=Wheel).
            '''

        })
    '''
    Wheeling Counter-Resource ID (required when Schedule Type=Wheel).
    '''

    checkOutType: Optional[ CheckOutType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            To indicate a check out type such as adjusted capacity or dispatch capacity.
            '''

        })
    '''
    To indicate a check out type such as adjusted capacity or dispatch
    capacity.
    '''

    directionType: Optional[ InterTieDirection ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Import or export.
            '''

        })
    '''
    Import or export.
    '''

    energyType: Optional[ MarketProductType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy product type.
            '''

        })
    '''
    Energy product type.
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market type.
            '''

        })
    '''
    Market type.
    '''

    scheduleType: Optional[ EnergyProductType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Schedule type.
            '''

        })
    '''
    Schedule type.
    '''

    InterTie: Optional[SchedulingPoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SchedulingPoint.InterchangeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredInterTie: Optional[RegisteredInterTie] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredInterTie.InterchangeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterchangeETCData: list[InterchangeETCData] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterchangeETCData.InterchangeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'Reservoir.LevelVsVolumeCurves',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadReductionPriceCurve(Curve):
    '''
    This is the price sensitivity that bidder expresses for allowing market
    load interruption. Relationship between price (Y1-axis) vs. MW (X-axis).
    '''

    LoadBid: Optional[LoadBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'LoadBid.LoadReductionPriceCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadReductionTimeCurve(Curve):
    '''
    This is the cureve that describes the load reduction time. Relationship
    between time (Y1-axis) vs. MW (X-axis).
    '''

    loadReductionTimeCurveType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            type of the curve: Possible values are but not limited to:
            Max, Min,
            '''

        })
    '''
    type of the curve: Possible values are but not limited to:
    Max, Min,
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaxStartUpCostCurve(Curve):
    '''
    The maximum Startup costs and time as a function of down time. Relationship
    between unit startup cost (Y1-axis) vs. unit elapsed down time (X-axis).
    This is used to validate the information provided in the Bid.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NotificationTimeCurve(Curve):
    '''
    Notification time curve as a function of down time. Relationship between
    crew notification time (Y1-axis) and unit startup time (Y2-axis) vs. unit
    elapsed down time (X-axis).
    '''

    GeneratingBids: list[GeneratingBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingBid.NotificationTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.PenstockLossCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMRHeatRateCurve(Curve):
    '''
    Model to support processing of reliability must run units.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRHeatRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMRStartUpCostCurve(Curve):
    '''
    Model to support processing of reliability must run units.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpCostCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpCostCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMRStartUpEnergyCurve(Curve):
    '''
    Model to support processing of reliability must run units.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpEnergyCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpEnergyCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMRStartUpFuelCurve(Curve):
    '''
    Model to support processing of reliability must run units.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMRStartUpTimeCurve(Curve):
    '''
    Model to support processing of reliability must run units.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RMRStartUpTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RampRateCurve(Curve):
    '''
    Ramp rate as a function of resource MW output.
    '''

    condition: Optional[ RampRateCondition ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            condition for the ramp rate
            '''

        })
    '''
    condition for the ramp rate
    '''

    constraintRampType: Optional[ ConstraintRampType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The condition that identifies whether a Generating Resource should be constrained
            from Ancillary Service provision if its Schedule or Dispatch change across
            Trading Hours or Trading Intervals requires more than a specified fraction
            of the duration of the Trading Hour or Trading Interval.
            Valid values are Fast/Slow
            '''

        })
    '''
    The condition that identifies whether a Generating Resource should
    be constrained from Ancillary Service provision if its Schedule or
    Dispatch change across Trading Hours or Trading Intervals requires
    more than a specified fraction of the duration of the Trading Hour
    or Trading Interval.
    Valid values are Fast/Slow
    '''

    rampRateType: Optional[ RampRateType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            How ramp rate is applied (e.g. raise or lower, as when applied to a generation
            resource)
            '''

        })
    '''
    How ramp rate is applied (e.g. raise or lower, as when applied to a
    generation resource)
    '''

    GeneratingBid: Optional[GeneratingBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingBid.RampRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieBid: Optional[InterTieBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterTieBid.RampRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadBid: Optional[LoadBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadBid.RampRateCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The hydrogen coolant pressure.
            '''

        })
    '''
    The hydrogen coolant pressure.
    '''

    EquivalentInjection: list[EquivalentInjection] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquivalentInjection.ReactiveCapabilityCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The equivalent injection using this reactive capability curve.
            '''

        })
    '''
    The equivalent injection using this reactive capability curve.
    '''

    InitiallyUsedBySynchronousMachines: list[SynchronousMachine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SynchronousMachine.InitialReactiveCapabilityCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machines using this curve as default.
            '''

        })
    '''
    Synchronous machines using this curve as default.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReserveDemandCurve(Curve):
    '''
    Reserve demand curve. Models maximum quantities of reserve required per
    Market Region and models a reserve demand curve for the minimum quantities
    of reserve. The ReserveDemandCurve is a relationship between unit operating
    reserve price in $/MWhr (Y-axis) and unit reserves in MW (X-axis).
    '''

    reqMaxMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Region requirement maximum limit
            '''

        })
    '''
    Region requirement maximum limit
    '''

    reserveRequirementType: Optional[ ReserveRequirementType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reserve requirement type that the max and curve apply to. For example,
            operating reserve, regulation and contingency.
            '''

        })
    '''
    Reserve requirement type that the max and curve apply to. For example,
    operating reserve, regulation and contingency.
    '''

    ASRequirements: Optional[ASRequirements] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ASRequirements.ReserveDemandCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegion: Optional[MarketRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketRegion.ReserveDemandCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ReserveReqCurve(Curve):
    '''
    A curve relating reserve requirement versus time, showing the values of
    a specific reserve requirement for each unit of the period covered. The
    curve can be based on "absolute" time or on "normalized' time.
    X is time, typically expressed in absolute time
    Y1 is reserve requirement, typically expressed in MW
    '''

    ReserveReq: Optional[ReserveReq] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ReserveReq.ReserveReqCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReserveReq: Optional[ReserveReq] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReserveReq.ReserveReqCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceOperationMaintenanceCost(Curve):
    '''
    To model the Operation and Maintenance (O and M) costs of a generation
    resource.
    '''

    omCostColdStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable O&amp;M Cost ($), Cold Startup
            '''

        })
    '''
    Verifiable O&amp;M Cost ($), Cold Startup
    '''

    omCostHotStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable O&amp;M Cost ($), Hot Startup
            '''

        })
    '''
    Verifiable O&amp;M Cost ($), Hot Startup
    '''

    omCostIntermediateStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable O&amp;M Cost ($), Intermediate Startup
            '''

        })
    '''
    Verifiable O&amp;M Cost ($), Intermediate Startup
    '''

    omCostLowSustainedLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable O&amp;M Cost ($/MWh), LSL
            '''

        })
    '''
    Verifiable O&amp;M Cost ($/MWh), LSL
    '''

    gasPercentAboveLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Index Price (gas) for operating above Low Sustained
            Limit (LSL)
            '''

        })
    '''
    Percentage of Fuel Index Price (gas) for operating above Low Sustained
    Limit (LSL)
    '''

    oilPercentAboveLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Oil Price (FOP) for operating above Low Sustained Limit
            (LSL)
            '''

        })
    '''
    Percentage of Fuel Oil Price (FOP) for operating above Low Sustained
    Limit (LSL)
    '''

    solidfuelPercentAboveLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Solid Fuel for operating above Low Sustained Limit (LSL)
            '''

        })
    '''
    Percentage of Solid Fuel for operating above Low Sustained Limit (LSL)
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.ResourceOperationMaintenanceCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.ResourceOperationMaintenanceCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class SensitivityPriceCurve(Curve):
    '''
    Optionally, this curve expresses elasticity of the associated requirement.
    For example, used to reduce requirements when clearing price exceeds reasonable
    values when the supply quantity becomes scarce. For example, a single point
    value of $1000/MW for a spinning reserve will cause a reduction in the
    required spinning reserve.
    X axis is constrained quantity (e.g., MW)
    Y1 axis is money per constrained quantity
    '''

    ReserveReq: Optional[ReserveReq] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReserveReq.SensitivityPriceCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReserveReq: Optional[ReserveReq] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReserveReq.SensitivityPriceCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fixed shutdown cost.
            '''

        })
    '''
    Fixed shutdown cost.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.ShutdownCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of ignition fuel.
            '''

        })
    '''
    Type of ignition fuel.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartIgnFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of main fuel.
            '''

        })
    '''
    Type of main fuel.
    '''

    StartupModel: Optional[StartupModel] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartMainFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'StartupModel.StartRampCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StartUpCostCurve(Curve):
    '''
    Startup costs and time as a function of down time. Relationship between
    unit startup cost (Y1-axis) vs. unit elapsed down time (X-axis).
    '''

    GeneratingBid: list[GeneratingBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingBid.StartUpCostCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StartUpEnergyCurve(Curve):
    '''
    The energy consumption of a generating resource to complete a start-up
    from the StartUpEnergyCurve. Definition of the StartUpEnergyCurve includes,
    xvalue as the cooling time and y1value as the MW value.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpEnergyCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpEnergyCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StartUpFuelCurve(Curve):
    '''
    The fuel consumption of a Generating Resource to complete a Start-Up.(x=cooling
    time) Form Startup Fuel Curve. xAxisData -&gt; cooling time, y1AxisData
    -&gt; MBtu.
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpFuelCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StartUpTimeCurve(Curve):
    '''
    Startup time curve as a function of down time, where time is specified
    in minutes. Relationship between unit startup time (Y1-axis) vs. unit elapsed
    down time (X-axis).
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeneratingBid: list[GeneratingBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingBid.StartUpTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.StartUpTimeCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SubscribePowerCurve(Curve):
    '''
    Price curve for specifying the cost of energy (X) at points in time (y1)
    according to a prcing structure, which is based on a tariff.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'HydroGeneratingUnit.TailbayLossCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Reservoir.TargetLevelSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    VsConverterDCSides: list[VsConverter] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VsConverter.CapabilityCurve',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All converters with this capability curve.
            '''

        })
    '''
    All converters with this capability curve.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'DCEquipmentContainer.DCNodes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The DC container for the DC nodes.
            '''

        })
    '''
    The DC container for the DC nodes.
    '''

    DCTopologicalNode: Optional[DCTopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCTopologicalNode.DCNodes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DERGroupDispatch(IdentifiedObject):
    '''
    Specifies the capabilities of the DER Group that are to be dispatched according
    to a schedule. Each dispatch identifies a DER Group and the specific monitorable
    parameter to be dispatched over a specific time interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DERGroupForecast(IdentifiedObject):
    '''
    Specifies the forecasted values of the DERMonitorableParameters for a DER
    Group over a specific time interval.
    '''

    predictionCreationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The timestamp for when the DER Group forecast was created
            '''

        })
    '''
    The timestamp for when the DER Group forecast was created
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Schedules that use this DayType.
            '''

        })
    '''
    Schedules that use this DayType.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DemandResponseProgram(IdentifiedObject):
    '''
    Demand response program.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of demand response program; examples are CPP (critical-peak pricing),
            RTP (real-time pricing), DLC (direct load control), DBP (demand bidding
            program), BIP (base interruptible program). Note that possible types change
            a lot and it would be impossible to enumerate them all.
            '''

        })
    '''
    Type of demand response program; examples are CPP (critical-peak pricing),
    RTP (real-time pricing), DLC (direct load control), DBP (demand bidding
    program), BIP (base interruptible program). Note that possible types
    change a lot and it would be impossible to enumerate them all.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    orientation: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A description of the orientation of the object relative to the dimensions.
            As an example, a vault may have north-south orientation for the sizeLength
            measurement and sizeDepth may be the height of the vault.
            '''

        })
    '''
    A description of the orientation of the object relative to the dimensions.
    As an example, a vault may have north-south orientation for the sizeLength
    measurement and sizeDepth may be the height of the vault.
    '''

    sizeDepth: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Depth measurement.
            '''

        })
    '''
    Depth measurement.
    '''

    sizeDiameter: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Diameter measurement.
            '''

        })
    '''
    Diameter measurement.
    '''

    sizeLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length measurement.
            '''

        })
    '''
    Length measurement.
    '''

    sizeWidth: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Width measurement.
            '''

        })
    '''
    Width measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DispatchInstReply(IdentifiedObject):
    '''
    Response from registered resource acknowledging receipt of dispatch instructions.
    '''

    certificationName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Subject DN is the X509 Certificate Subject DN. This is the essentially
            the certificate name presented by the client. In the case of ADS Certificates,
            this will be the user name. It may be from an API Client or the MP Client
            (GUI).
            The Subject ID normally includes more than just the user name (Common Name),
            it can also contain information such as City, Company ID, etc.
            '''

        })
    '''
    The Subject DN is the X509 Certificate Subject DN. This is the essentially
    the certificate name presented by the client. In the case of ADS Certificates,
    this will be the user name. It may be from an API Client or the MP
    Client (GUI).
    The Subject ID normally includes more than just the user name (Common
    Name), it can also contain information such as City, Company ID, etc.
    '''

    instructionTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The target date/time for the received instruction.
            '''

        })
    '''
    The target date/time for the received instruction.
    '''

    instructionType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            instruction type:
            commitment
            out of sequence
            dispatch
            '''

        })
    '''
    instruction type:
    commitment
    out of sequence
    dispatch
    '''

    receivedTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp indicating the time at which the instruction was received.
            '''

        })
    '''
    Timestamp indicating the time at which the instruction was received.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            start time
            '''

        })
    '''
    start time
    '''

    acceptMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The accepted mw amount by the responder. aka response mw.
            '''

        })
    '''
    The accepted mw amount by the responder. aka response mw.
    '''

    acceptStatus: Optional[ DispatchResponseType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The accept status submitted by the responder. enumeration type needs to
            be defined
            '''

        })
    '''
    The accept status submitted by the responder. enumeration type needs
    to be defined
    '''

    clearedMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW amount associated with instruction. For 5 minute binding dispatches,
            this is the Goto MW or DOT
            '''

        })
    '''
    MW amount associated with instruction. For 5 minute binding dispatches,
    this is the Goto MW or DOT
    '''

    passIndicator: Optional[ PassIndicatorType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of run for the market clearing.
            '''

        })
    '''
    The type of run for the market clearing.
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DispatchInstReply',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @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.
    '''

    authorName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of the author of this document.
            '''

        })
    '''
    Name of the author of this document.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free text comment.
            '''

        })
    '''
    Free text comment.
    '''

    createdDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Document subject.
            '''

        })
    '''
    Document subject.
    '''

    title: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Document title.
            '''

        })
    '''
    Document title.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.).
    '''

    Approver: Optional[Approver] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Approver.Documents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Approver of this document.
            '''

        })
    '''
    Approver of this document.
    '''

    Author: Optional[Author] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Author.Documents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Author of this document.
            '''

        })
    '''
    Author of this document.
    '''

    Editor: Optional[Editor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Editor.Documents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Editor of this document.
            '''

        })
    '''
    Editor of this document.
    '''

    Issuer: Optional[Issuer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Issuer.Documents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Issuer of this document.
            '''

        })
    '''
    Issuer of this document.
    '''

    ActivityRecord: list[ActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ActivityRecord.Document',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The activity record for a document
            '''

        })
    '''
    The activity record for a document
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedDocument',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this document.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    signDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AuxiliaryAgreement(Agreement):
    '''
    An ad-hoc auxiliary account agreement associated with a customer agreement,
    not part of the customer's account, but typically subject to formal agreement
    between customer and supplier (utility). Typically this is used to collect
    revenue owed by the customer for other services or arrears accrued with
    the utility for other services. It is typically linked to a prepaid token
    purchase transaction, thus forcing the customer to make a payment towards
    settlement of the auxiliary account balance whenever the customer needs
    to purchase a prepaid token for electricity.
    The present status of the auxiliary agreement can be defined in the context
    of the utility's business rules, for example: enabled, disabled, pending,
    over recovered, under recovered, written off, etc.
    '''

    auxCycle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The frequency for automatically recurring auxiliary charges, where 'AuxiliaryAccount.initialCharge'
            is recursively added to 'AuxiliaryAccount.dueCurrent' at the start of each
            'auxCycle'. For example: on a specified date and time; hourly; daily; weekly;
            monthly; 3-monthly; 6-monthly; 12-monthly; etc.
            '''

        })
    '''
    The frequency for automatically recurring auxiliary charges, where
    'AuxiliaryAccount.initialCharge' is recursively added to 'AuxiliaryAccount.dueCurrent'
    at the start of each 'auxCycle'. For example: on a specified date and
    time; hourly; daily; weekly; monthly; 3-monthly; 6-monthly; 12-monthly;
    etc.
    '''

    auxPriorityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded priority indicating the priority that this auxiliary agreement
            has above other auxiliary agreements (associated with the same customer
            agreement) when it comes to competing for settlement from a payment transaction
            or token purchase.
            '''

        })
    '''
    The coded priority indicating the priority that this auxiliary agreement
    has above other auxiliary agreements (associated with the same customer
    agreement) when it comes to competing for settlement from a payment
    transaction or token purchase.
    '''

    payCycle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The contractually expected payment frequency (by the customer). Examples
            are: ad-hoc; on specified date; hourly, daily, weekly, monthly. etc.
            '''

        })
    '''
    The contractually expected payment frequency (by the customer). Examples
    are: ad-hoc; on specified date; hourly, daily, weekly, monthly. etc.
    '''

    subType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sub-classification of the inherited 'type' for this AuxiliaryAgreement.
            '''

        })
    '''
    Sub-classification of the inherited 'type' for this AuxiliaryAgreement.
    '''

    arrearsInterest: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The interest per annum to be charged prorata on 'AuxiliaryAccount.dueArrears'
            at the end of each 'payCycle'.
            '''

        })
    '''
    The interest per annum to be charged prorata on 'AuxiliaryAccount.dueArrears'
    at the end of each 'payCycle'.
    '''

    fixedAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The fixed amount that has to be collected from each vending transaction
            towards settlement of this auxiliary agreement. Note that there may be
            multiple tokens vended per vending transaction, but this is not relevant.
            '''

        })
    '''
    The fixed amount that has to be collected from each vending transaction
    towards settlement of this auxiliary agreement. Note that there may
    be multiple tokens vended per vending transaction, but this is not
    relevant.
    '''

    minAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum amount that has to be paid at any transaction towards settling
            this auxiliary agreement or reducing the balance.
            '''

        })
    '''
    The minimum amount that has to be paid at any transaction towards settling
    this auxiliary agreement or reducing the balance.
    '''

    vendPortion: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The percentage of the transaction amount that has to be collected from
            each vending transaction towards settlement of this auxiliary agreement
            when payments are not in arrears. Note that there may be multiple tokens
            vended per vending transaction, but this is not relevant.
            '''

        })
    '''
    The percentage of the transaction amount that has to be collected from
    each vending transaction towards settlement of this auxiliary agreement
    when payments are not in arrears. Note that there may be multiple tokens
    vended per vending transaction, but this is not relevant.
    '''

    vendPortionArrear: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The percentage of the transaction amount that has to be collected from
            each vending transaction towards settlement of this auxiliary agreement
            when payments are in arrears. Note that there may be multiple tokens vended
            per vending transaction, but this is not relevant.
            '''

        })
    '''
    The percentage of the transaction amount that has to be collected from
    each vending transaction towards settlement of this auxiliary agreement
    when payments are in arrears. Note that there may be multiple tokens
    vended per vending transaction, but this is not relevant.
    '''

    CustomerAgreement: Optional[CustomerAgreement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAgreement.AuxiliaryAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer agreement this (non-service related) auxiliary agreement refers
            to.
            '''

        })
    '''
    Customer agreement this (non-service related) auxiliary agreement refers
    to.
    '''

    AuxiliaryAccounts: list[AuxiliaryAccount] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryAccount.AuxiliaryAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All auxiliary accounts regulated by this agreement.
            '''

        })
    '''
    All auxiliary accounts regulated by this agreement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CustomerAgreement(Agreement):
    '''
    Agreement between the customer and the service supplier to pay for service
    at a specific service location. It records certain billing information
    about the type of service provided at the service location and is used
    during charge creation to determine the type of service.
    '''

    isPrePay: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the customer is a pre-pay customer for the specified service.
            '''

        })
    '''
    If true, the customer is a pre-pay customer for the specified service.
    '''

    loadMgmt: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load management code.
            '''

        })
    '''
    Load management code.
    '''

    shutOffDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Final date and time the service will be billed to the previous customer.
            '''

        })
    '''
    Final date and time the service will be billed to the previous customer.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Customer.CustomerAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer for this agreement.
            '''

        })
    '''
    Customer for this agreement.
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.CustomerAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer account owning this agreement.
            '''

        })
    '''
    Customer account owning this agreement.
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.CustomerAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the customer agreement
            '''

        })
    '''
    Meter read schedule that applies to the customer agreement
    '''

    ServiceCategory: Optional[ServiceCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceCategory.CustomerAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service category for this agreement.
            '''

        })
    '''
    Service category for this agreement.
    '''

    ServiceSupplier: Optional[ServiceSupplier] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ServiceSupplier.CustomerAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service supplier for this customer agreement.
            '''

        })
    '''
    Service supplier for this customer agreement.
    '''

    StandardIndustryCode: Optional[StandardIndustryCode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StandardIndustryCode.CustomerAgreements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AuxiliaryAgreements: list[AuxiliaryAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryAgreement.CustomerAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All (non-service related) auxiliary agreements that refer to this customer
            agreement.
            '''

        })
    '''
    All (non-service related) auxiliary agreements that refer to this customer
    agreement.
    '''

    MeterReadings: list[MeterReading] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterReading.CustomerAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            (could be deprecated in the future) All meter readings for this customer
            agreement.
            '''

        })
    '''
    (could be deprecated in the future) All meter readings for this customer
    agreement.
    '''

    UsagePoints: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.CustomerAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All service delivery points regulated by this customer agreement.
            '''

        })
    '''
    All service delivery points regulated by this customer agreement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class EnergyProduct(Agreement):
    '''
    An EnergyProduct is offered commercially as a ContractOrTariff.
    '''

    GenerationProvider: Optional[GenerationProvider] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'GenerationProvider.ProvidedBy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TitleHeldBy_Marketer: Optional[Marketer] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Marketer.HoldsTitleTo_EnergyProducts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A Marketer holds title to an EnergyProduct.
            '''

        })
    '''
    A Marketer holds title to an EnergyProduct.
    '''

    EnergyTransactions: list[EnergyTransaction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyTransaction.EnergyProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The "Source" for an EnergyTransaction is an EnergyProduct which is injected
            into a ControlArea. Typically this is a ServicePoint.
            '''

        })
    '''
    The "Source" for an EnergyTransaction is an EnergyProduct which is
    injected into a ControlArea. Typically this is a ServicePoint.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExternalCustomerAgreement(Agreement):
    '''
    A type of customer agreement involving an external agency. For example,
    a customer may form a contracts with an Energy Service Supplier if Direct
    Access is permitted.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FTR(Agreement):
    '''
    Financial Transmission Rights (FTR) regarding transmission capacity at
    a flowgate.
    '''

    action: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Buy, Sell
            '''

        })
    '''
    Buy, Sell
    '''

    _class: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Peak, Off-peak, 24-hour
            '''

        })
    '''
    Peak, Off-peak, 24-hour
    '''

    ftrType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of rights being offered (product) allowed to be auctioned (option,
            obligation).
            '''

        })
    '''
    Type of rights being offered (product) allowed to be auctioned (option,
    obligation).
    '''

    optimized: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fixed (covers re-configuration, grandfathering) or Optimized (up for sale/purchase
            '''

        })
    '''
    Fixed (covers re-configuration, grandfathering) or Optimized (up for
    sale/purchase
    '''

    baseEnergy: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quantity, typically MWs - Seller owns all rights being offered, MWs over
            time on same Point of Receipt, Point of Delivery, or Resource.
            '''

        })
    '''
    Quantity, typically MWs - Seller owns all rights being offered, MWs
    over time on same Point of Receipt, Point of Delivery, or Resource.
    '''

    EnergyPriceCurve: Optional[EnergyPriceCurve] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyPriceCurve.FTRs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.FTRs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCongestionRevenueRights'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntSchedAgreement(Agreement):
    '''
    A type of agreement that provides the default method by which interchange
    schedules are to be integrated to obtain hourly MWh schedules for accounting.
    '''

    defaultIntegrationMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The default method by which interchange schedules are to be integrated
            to obtain hourly MWh schedules for accounting. Method #1 is to integrate
            the instantaneous schedule between the hourly boundaries. Method #2 compensates
            for any up/down ramping that occurs across the hourly boundary (this is
            called block accounting).
            '''

        })
    '''
    The default method by which interchange schedules are to be integrated
    to obtain hourly MWh schedules for accounting. Method #1 is to integrate
    the instantaneous schedule between the hourly boundaries. Method #2
    compensates for any up/down ramping that occurs across the hourly boundary
    (this is called block accounting).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LocationGrant(Agreement):
    '''
    A grant provides a right, as defined by type, for a parcel of land. Note
    that the association to Location, Asset, Organisation, etc. for the Grant
    is inherited from Agreement, a type of Document.
    '''

    propertyData: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Property related information that describes the Grant's land parcel. For
            example, it may be a deed book number, deed book page number, and parcel
            number.
            '''

        })
    '''
    Property related information that describes the Grant's land parcel.
    For example, it may be a deed book number, deed book page number, and
    parcel number.
    '''

    LandProperty: Optional[LandProperty] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LandProperty.LocationGrants',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Land property this location grant applies to.
            '''

        })
    '''
    Land property this location grant applies to.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MerchantAgreement(Agreement):
    '''
    A formal controlling contractual agreement between supplier and merchant,
    in terms of which the merchant is authorised to vend tokens and receipt
    payments on behalf of the supplier. The merchant is accountable to the
    supplier for revenue collected at point of sale.
    '''

    MerchantAccounts: list[MerchantAccount] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MerchantAccount.MerchantAgreement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All merchant accounts instantiated as a result of this merchant agreement.
            '''

        })
    '''
    All merchant accounts instantiated as a result of this merchant agreement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OpenAccessProduct(Agreement):
    '''
    Contracts for services offered commercially.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RightOfWay(Agreement):
    '''
    A right-of-way (ROW) is for land where it is lawful to use for a public
    road, an electric power line, etc. Note that the association to Location,
    Asset, Organisation, etc. for the Grant is inherited from Agreement, a
    type of Document.
    '''

    propertyData: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Property related information that describes the ROW's land parcel. For
            example, it may be a deed book number, deed book page number, and parcel
            number.
            '''

        })
    '''
    Property related information that describes the ROW's land parcel.
    For example, it may be a deed book number, deed book page number, and
    parcel number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Analytic(Document):
    '''
    An algorithm or calculation for making an assessment about an asset or
    asset grouping for lifecycle decision making.
    '''

    bestValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value that indicates best possible numeric value.
            '''

        })
    '''
    Value that indicates best possible numeric value.
    '''

    worstValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value that indicates worst possible numeric value.
            '''

        })
    '''
    Value that indicates worst possible numeric value.
    '''

    kind: Optional[ AnalyticKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analytic this analytic is.
            '''

        })
    '''
    Kind of analytic this analytic is.
    '''

    scaleKind: Optional[ ScaleKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The scoring scale kind.
            '''

        })
    '''
    The scoring scale kind.
    '''

    AnalyticScore: list[AnalyticScore] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalyticScore.Analytic',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Analytic score produced by this analytic.
            '''

        })
    '''
    Analytic score produced by this analytic.
    '''

    Asset: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.Analytic',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset on which this analytic can be performed.
            '''

        })
    '''
    Asset on which this analytic can be performed.
    '''

    AssetHealthEvent: list[AssetHealthEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetHealthEvent.Analytic',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset health event which can be generated by this analytic.
            '''

        })
    '''
    Asset health event which can be generated by this analytic.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetGroup(Document):
    '''
    A grouping of assets created for a purpose such as fleet analytics, inventory
    or compliance management.
    '''

    kind: Optional[ AssetGroupKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of asset group this asset group is.
            '''

        })
    '''
    Kind of asset group this asset group is.
    '''

    AnalyticScore: list[AnalyticScore] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalyticScore.AssetGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Analytic score for this asset group.
            '''

        })
    '''
    Analytic score for this asset group.
    '''

    Asset: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.AssetGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset which is a part of this asset group.
            '''

        })
    '''
    Asset which is a part of this asset group.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetModelCatalogueItem(Document):
    '''
    Provides pricing and other relevant information about a specific manufacturer's
    product (i.e., AssetModel), and its price from a given supplier. A single
    AssetModel may be availble from multiple suppliers. Note that manufacturer
    and supplier are both types of organisation, which the association is inherited
    from Document.
    '''

    unitCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit cost for an asset model from a specific supplier, either for a unit
            cost or cost per unit length. Cost is for material or asset only and does
            not include labor to install/construct or configure it.
            '''

        })
    '''
    Unit cost for an asset model from a specific supplier, either for a
    unit cost or cost per unit length. Cost is for material or asset only
    and does not include labor to install/construct or configure it.
    '''

    AssetModel: Optional[ProductAssetModel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProductAssetModel.AssetModelCatalogueItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AssetModelCatalogue: Optional[AssetModelCatalogue] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AssetModelCatalogue.AssetModelCatalogueItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPOLineItems: list[ErpPOLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpPOLineItem.AssetModelCatalogueItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItems: list[ErpQuoteLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpQuoteLineItem.AssetModelCatalogueItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AuxiliaryAccount(Document):
    '''
    Variable and dynamic part of auxiliary agreement, generally representing
    the current state of the account related to the outstanding balance defined
    in auxiliary agreement.
    '''

    balance: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The total amount currently remaining on this account that is required to
            be paid in order to settle the account to zero. This excludes any due amounts
            not yet paid.
            '''

        })
    '''
    The total amount currently remaining on this account that is required
    to be paid in order to settle the account to zero. This excludes any
    due amounts not yet paid.
    '''

    principleAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The initial principle amount, with which this account was instantiated.
            '''

        })
    '''
    The initial principle amount, with which this account was instantiated.
    '''

    AuxiliaryAgreement: Optional[AuxiliaryAgreement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AuxiliaryAgreement.AuxiliaryAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Auxiliary agreement regulating this account.
            '''

        })
    '''
    Auxiliary agreement regulating this account.
    '''

    PaymentTransactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.AuxiliaryAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All payments against this account.
            '''

        })
    '''
    All payments against this account.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BankAccount(Document):
    '''
    Bank account.
    '''

    accountNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Account reference number.
            '''

        })
    '''
    Account reference number.
    '''

    Bank: Optional[Bank] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bank.BankAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bank that provides this BankAccount.
            '''

        })
    '''
    Bank that provides this BankAccount.
    '''

    ServiceSupplier: Optional[ServiceSupplier] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceSupplier.BankAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ServiceSupplier that is owner of this BankAccount.
            '''

        })
    '''
    ServiceSupplier that is owner of this BankAccount.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpBankAccount(BankAccount):
    '''
    Relationship under a particular name, usually evidenced by a deposit against
    which withdrawals can be made. Types of bank accounts include: demand,
    time, custodial, joint, trustee, corporate, special, and regular accounts.
    A statement of transactions during a fiscal period and the resulting balance
    is maintained on each account.
    For Payment metering, the account is associated with Bank and Supplier,
    reflecting details of the bank account used for depositing revenue collected
    by TokenVendor. The name of the account holder should be specified in 'name'
    attribute.
    '''

    bankABA: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bank ABA.
            '''

        })
    '''
    Bank ABA.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BaseWork(Document):
    '''
    Common representation for work and work tasks.
    '''

    kind: Optional[ ServiceRequestKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of work.
            '''

        })
    '''
    Kind of work.
    '''

    statusKind: Optional[ WorkStatusKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of work status.
            '''

        })
    '''
    Kind of work status.
    '''

    WorkLocation: Optional[WorkLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkLocation.BaseWorks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location for this work/task.
            '''

        })
    '''
    Location for this work/task.
    '''

    WorkActivityRecords: list[WorkActivityRecord] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkActivityRecord.BaseWork',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All activity records for this work or work task.
            '''

        })
    '''
    All activity records for this work or work task.
    '''

    TimeSchedules: list[WorkTimeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTimeSchedule.BaseWork',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All time schedules for this work or work task.
            '''

        })
    '''
    All time schedules for this work or work task.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Work(BaseWork):
    '''
    Document used to request, initiate, track and record work.
    '''

    requestDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time work was requested.
            '''

        })
    '''
    Date and time work was requested.
    '''

    workOrderNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Work order number (or other unique identifying information) for this work.
            '''

        })
    '''
    Work order number (or other unique identifying information) for this
    work.
    '''

    BusinessCase: Optional[BusinessCase] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BusinessCase.Works',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpProjectAccounting: Optional[ErpProjectAccounting] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpProjectAccounting.Works',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Project: Optional[Project] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Project.Works',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkBillingInfo: Optional[WorkBillingInfo] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkBillingInfo.Works',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Designs: list[Design] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Design.Work',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkFlowSteps: list[WorkFlowStep] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkFlowStep.Work',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTasks: list[WorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTask.Work',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All tasks in this work.
            '''

        })
    '''
    All tasks in this work.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkTask(BaseWork):
    '''
    A task within a set of work.
    '''

    completedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time work task was completed.
            '''

        })
    '''
    Date and time work task was completed.
    '''

    crewETA: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated time of arrival, so that customer or police/fire department can
            be informed when the crew will arrive.
            '''

        })
    '''
    Estimated time of arrival, so that customer or police/fire department
    can be informed when the crew will arrive.
    '''

    estimatedCompletionTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time and Date when the work task will be completed.
            '''

        })
    '''
    Time and Date when the work task will be completed.
    '''

    instruction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Instructions for performing this task.
            '''

        })
    '''
    Instructions for performing this task.
    '''

    schedOverride: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If specified, override schedule and perform this task in accordance with
            instructions specified here.
            '''

        })
    '''
    If specified, override schedule and perform this task in accordance
    with instructions specified here.
    '''

    startedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time work task was started.
            '''

        })
    '''
    Date and time work task was started.
    '''

    contractorCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total contractor costs associated with the work task.
            '''

        })
    '''
    Total contractor costs associated with the work task.
    '''

    laborCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total labor costs associated with the work task.
            '''

        })
    '''
    Total labor costs associated with the work task.
    '''

    laborHours: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hours of labor expended under work task.
            '''

        })
    '''
    Hours of labor expended under work task.
    '''

    materiallCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total material costs associated with the work task.
            '''

        })
    '''
    Total material costs associated with the work task.
    '''

    taskKind: Optional[ WorkTaskKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of work.
            '''

        })
    '''
    Kind of work.
    '''

    toolCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total tool costs associated with the work task.
            '''

        })
    '''
    Total tool costs associated with the work task.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching plan executed by this work task.
            '''

        })
    '''
    Switching plan executed by this work task.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The trouble order that contains the work tasks.
            '''

        })
    '''
    The trouble order that contains the work tasks.
    '''

    Work: Optional[Work] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Work.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Work this task belongs to.
            '''

        })
    '''
    Work this task belongs to.
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets on which this non-replacement work task is performed.
            '''

        })
    '''
    All assets on which this non-replacement work task is performed.
    '''

    MaterialItems: list[MaterialItem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MaterialItem.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The material items that are required to perform the work task.
            '''

        })
    '''
    The material items that are required to perform the work task.
    '''

    ProcedureDataSet: list[ProcedureDataSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProcedureDataSet.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Procedure data set associated with this work task.
            '''

        })
    '''
    Procedure data set associated with this work task.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaintenanceWorkTask(WorkTask):
    '''
    Maintenance work task. Costs associated with this are considered preventive
    maintenance (PM) costs.
    '''

    breakerMaintenanceKind: Optional[ BreakerMaintenanceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of breaker maintenance performed by this maintenance work task.
            '''

        })
    '''
    Kind of breaker maintenance performed by this maintenance work task.
    '''

    transformerMaintenanceKind: Optional[ TransformerMaintenanceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of transformer maintenance performed by this maintenance work task.
            '''

        })
    '''
    Kind of transformer maintenance performed by this maintenance work
    task.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeterWorkTask(WorkTask):
    '''
    Work task involving meters.
    '''

    Meter: Optional[Meter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Meter.MeterServiceWorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter on which this non-replacement work task is performed.
            '''

        })
    '''
    Meter on which this non-replacement work task is performed.
    '''

    OldMeter: Optional[Meter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Meter.MeterReplacementWorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Old meter replaced by this work task.
            '''

        })
    '''
    Old meter replaced by this work task.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.MeterServiceWorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage point to which this meter service work task applies.
            '''

        })
    '''
    Usage point to which this meter service work task applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class OldWorkTask(WorkTask):
    '''
    A set of tasks is required to implement a design.
    '''

    Design: Optional[Design] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Design.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OverheadCost: Optional[OverheadCost] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OverheadCost.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkFlowStep: Optional[WorkFlowStep] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkFlowStep.WorkTasks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContractorItems: list[ContractorItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractorItem.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LaborItems: list[LaborItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LaborItem.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MiscCostItems: list[MiscCostItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MiscCostItem.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Usages: list[Usage] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Usage.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetails: list[WorkCostDetail] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkCostDetail.WorkTask',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RepairWorkTask(WorkTask):
    '''
    Work task for asset repair. Costs associated with this are considered corrective
    maintenance (CM) costs.
    '''

    emergency: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Repair work is emergency.
            '''

        })
    '''
    Repair work is emergency.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Bid(Document):
    '''
    Represents both bids to purchase and offers to sell energy or ancillary
    services in an RTO-sponsored market.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time and date for which bid applies.
            '''

        })
    '''
    Start time and date for which bid applies.
    '''

    stopTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stop time and date for which bid is applicable.
            '''

        })
    '''
    Stop time and date for which bid is applicable.
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The market type, DAM or RTM.
            '''

        })
    '''
    The market type, DAM or RTM.
    '''

    ActionRequest: Optional[ActionRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ActionRequest.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnergyMarket: Optional[EnergyMarket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyMarket.Bids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketParticipant: Optional[MarketParticipant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketParticipant.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidHourlySchedule: list[BidHourlySchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidHourlySchedule.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfiles: list[ChargeProfile] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChargeProfile.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MitigatedBid: list[MitigatedBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MitigatedBid.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MitigatedBidSegment: list[MitigatedBidSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MitigatedBidSegment.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductBids: list[ProductBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProductBid.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A bid comprises one or more product bids of market products
            '''

        })
    '''
    A bid comprises one or more product bids of market products
    '''

    RMRDetermination: list[RMRDetermination] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RMRDetermination.Bid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AreaLoadBid(Bid):
    '''
    AreaLoadBid is not submitted by a market participant into the Markets.
    Instead, it is simply an aggregation of all LoadBids contained wtihin a
    specific SubControlArea. This entity should inherit from Bid for representation
    of the timeframe (startTime, stopTime) and the market type.
    '''

    demandBidMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Demand Bid Megawatt for the area case.
            Attribute Usage: This is Scheduled demand MW in Day Ahead
            '''

        })
    '''
    The Demand Bid Megawatt for the area case.
    Attribute Usage: This is Scheduled demand MW in Day Ahead
    '''

    LoadBid: list[LoadBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadBid.AreaLoadBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DefaultBid(Bid):
    '''
    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.
    '''

    bidType: Optional[ BidType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Default bid type such as Default Energy Bid, Default Minimum Load Bid,
            and Default Startup Bid
            '''

        })
    '''
    Default bid type such as Default Energy Bid, Default Minimum Load Bid,
    and Default Startup Bid
    '''

    minLoadCost: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum load cost in $/hr
            '''

        })
    '''
    Minimum load cost in $/hr
    '''

    peakFlag: Optional[ OnOff ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            on-peak, off-peak, or all
            '''

        })
    '''
    on-peak, off-peak, or all
    '''

    DefaultBidCurve: Optional[DefaultBidCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBidCurve.DefaultBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DefaultBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultBidCurve: Optional[DefaultBidCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBidCurve.DefaultBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.DefaultBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceBid(Bid):
    '''
    Energy bid for generation, load, or virtual type for the whole of the market-trading
    period (i.e., one day in day ahead market or one hour in the real time
    market).
    '''

    aggregationFlag: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregation flag
            0: individual resource level
            1: Aggregated node location
            2: Aggregated price location)
            '''

        })
    '''
    Aggregation flag
    0: individual resource level
    1: Aggregated node location
    2: Aggregated price location)
    '''

    bidStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    commodityType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy product (commodity) type:
            'En' - Energy
            'Ru' - Regulation Up
            'Rd' - Regulation Dn
            'Sr' - Spinning Reserve
            'Nr' - Non-Spinning Reserve
            'Or' - Operating Reserve
            '''

        })
    '''
    Energy product (commodity) type:
    'En' - Energy
    'Ru' - Regulation Up
    'Rd' - Regulation Dn
    'Sr' - Spinning Reserve
    'Nr' - Non-Spinning Reserve
    'Or' - Operating Reserve
    '''

    energyMaxDay: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum amount of energy per day which can be produced during the trading
            period in MWh
            '''

        })
    '''
    Maximum amount of energy per day which can be produced during the trading
    period in MWh
    '''

    energyMinDay: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum amount of energy per day which has to be produced during the trading
            period in MWh
            '''

        })
    '''
    Minimum amount of energy per day which has to be produced during the
    trading period in MWh
    '''

    marketSepFlag: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market Separation Flag
            'Y' - Enforce market separation constraints for this bid
            'N' - Don't enforce market separation constraints for this bid.
            '''

        })
    '''
    Market Separation Flag
    'Y' - Enforce market separation constraints for this bid
    'N' - Don't enforce market separation constraints for this bid.
    '''

    minDispatchTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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
    '''

    resourceLoadingType: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource loading curve type
            1 - step-wise continuous loading
            2 - piece-wise linear continuous loading
            3 - block loading
            '''

        })
    '''
    Resource loading curve type
    1 - step-wise continuous loading
    2 - piece-wise linear continuous loading
    3 - block loading
    '''

    shutDownsMaxDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of shutdowns per day.
            '''

        })
    '''
    Maximum number of shutdowns per day.
    '''

    shutDownsMaxWeek: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of shutdowns per week.
            '''

        })
    '''
    Maximum number of shutdowns per week.
    '''

    startUpsMaxDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of startups per day.
            '''

        })
    '''
    Maximum number of startups per day.
    '''

    startUpsMaxWeek: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of startups per week.
            '''

        })
    '''
    Maximum number of startups per week.
    '''

    virtual: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if bid is virtual. Bid is assumed to be non-virtual if attribute is
            absent
            '''

        })
    '''
    True if bid is virtual. Bid is assumed to be non-virtual if attribute
    is absent
    '''

    contingencyAvailFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            contingent operating reserve availiability (Yes/No). Resource is availiable
            to participate with capacity only in contingency dispatch.
            '''

        })
    '''
    contingent operating reserve availiability (Yes/No). Resource is availiable
    to participate with capacity only in contingency dispatch.
    '''

    createdISO: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A Yes indicates that this bid was created by the ISO.
            '''

        })
    '''
    A Yes indicates that this bid was created by the ISO.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeneratingBid(ResourceBid):
    '''
    Offer to supply energy/ancillary services from a generating unit or resource.
    '''

    combinedCycleUnitOffer: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Will indicate if the unit is part of a CC offer or not
            '''

        })
    '''
    Will indicate if the unit is part of a CC offer or not
    '''

    downTimeMax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum down time.
            '''

        })
    '''
    Maximum down time.
    '''

    installedCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Installed Capacity value
            '''

        })
    '''
    Installed Capacity value
    '''

    maximumEconomicMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum high economic MW limit, that should not exceed the maximum operating
            MW limit
            '''

        })
    '''
    Maximum high economic MW limit, that should not exceed the maximum
    operating MW limit
    '''

    minimumEconomicMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low economic MW limit that shall be greater than or equal to the minimum
            operating MW limit
            '''

        })
    '''
    Low economic MW limit that shall be greater than or equal to the minimum
    operating MW limit
    '''

    noLoadCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource fixed no load cost.
            '''

        })
    '''
    Resource fixed no load cost.
    '''

    notificationTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time required for crew notification prior to start up of the unit.
            '''

        })
    '''
    Time required for crew notification prior to start up of the unit.
    '''

    operatingMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid operating mode ('C' - cycling, 'F' - fixed, 'M' - must run, 'U' - unavailable)
            '''

        })
    '''
    Bid operating mode ('C' - cycling, 'F' - fixed, 'M' - must run, 'U'
    - unavailable)
    '''

    rampCurveType: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramp curve type:
            0 - Fixed ramp rate independent of rate function unit MW output
            1 - Static ramp rates as a function of unit MW output only
            2 - Dynamic ramp rates as a function of unit MW output and ramping time
            '''

        })
    '''
    Ramp curve type:
    0 - Fixed ramp rate independent of rate function unit MW output
    1 - Static ramp rates as a function of unit MW output only
    2 - Dynamic ramp rates as a function of unit MW output and ramping
    time
    '''

    startupCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Startup cost/price
            '''

        })
    '''
    Startup cost/price
    '''

    startUpType: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource startup type:
            1 - Fixed startup time and fixed startup cost
            2 - Startup time as a function of down time and fixed startup cost
            3 - Startup cost as a function of down time
            '''

        })
    '''
    Resource startup type:
    1 - Fixed startup time and fixed startup cost
    2 - Startup time as a function of down time and fixed startup cost
    3 - Startup cost as a function of down time
    '''

    upTimeMax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum up time.
            '''

        })
    '''
    Maximum up time.
    '''

    lowerRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Dn ramp rate in MW/min
            '''

        })
    '''
    Maximum Dn ramp rate in MW/min
    '''

    maxEmergencyMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power rating available for unit under emergency conditions greater than
            or equal to maximum economic limit.
            '''

        })
    '''
    Power rating available for unit under emergency conditions greater
    than or equal to maximum economic limit.
    '''

    minEmergencyMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum power rating for unit under emergency conditions, which is less
            than or equal to the economic minimum.
            '''

        })
    '''
    Minimum power rating for unit under emergency conditions, which is
    less than or equal to the economic minimum.
    '''

    raiseRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Up ramp rate in MW/min
            '''

        })
    '''
    Maximum Up ramp rate in MW/min
    '''

    startUpRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource startup ramp rate (MW/minute)
            '''

        })
    '''
    Resource startup ramp rate (MW/minute)
    '''

    BidSet: Optional[BidSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BidSet.GeneratingBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    NotificationTimeCurve: Optional[NotificationTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NotificationTimeCurve.GeneratingBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.GeneratingBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpCostCurve: Optional[StartUpCostCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpCostCurve.GeneratingBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpTimeCurve: Optional[StartUpTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpTimeCurve.GeneratingBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RampRateCurve: list[RampRateCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RampRateCurve.GeneratingBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraints: list[SecurityConstraints] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SecurityConstraints.GeneratingBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterTieBid(ResourceBid):
    '''
    This class represents the inter tie bid.
    '''

    minHourlyBlock: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum hourly block for an Inter-Tie Resource supplied within the
            bid.
            '''

        })
    '''
    The minimum hourly block for an Inter-Tie Resource supplied within
    the bid.
    '''

    RegisteredInterTie: Optional[RegisteredInterTie] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredInterTie.InterTieBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RampRateCurve: list[RampRateCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RampRateCurve.InterTieBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredInterTie: Optional[RegisteredInterTie] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredInterTie.InterTieBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadBid(ResourceBid):
    '''
    Offer to supply energy/ancillary services from a load resource (participating
    load reduces consumption).
    '''

    loadRedInitiationTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            load reduction initiation time
            '''

        })
    '''
    load reduction initiation time
    '''

    marketDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date represents the NextMarketDate for which the load response bids
            apply to.
            '''

        })
    '''
    The date represents the NextMarketDate for which the load response
    bids apply to.
    '''

    meteredValue: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag indicated that the load reduction is metered. (See above)
            If priceSetting and meteredValue both equal 1, then the facility is eligible
            to set LMP in the real time market.
            '''

        })
    '''
    Flag indicated that the load reduction is metered. (See above)
    If priceSetting and meteredValue both equal 1, then the facility is
    eligible to set LMP in the real time market.
    '''

    minLoadReductionInterval: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shortest period load reduction shall be maintained before load can be restored
            to normal levels.
            '''

        })
    '''
    Shortest period load reduction shall be maintained before load can
    be restored to normal levels.
    '''

    minTimeBetLoadRed: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shortest time that load shall be left at normal levels before a new load
            reduction.
            '''

        })
    '''
    Shortest time that load shall be left at normal levels before a new
    load reduction.
    '''

    priceSetting: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate that the facility can set LMP Works in tandem with Metered
            Value. Greater chance of this being dynamic than the Metered Value, however,
            it is requested that Price Setting and Metered Value stay at the same source.
            Currently no customers have implemented the metering capability, but if
            this option is implemented, then Price Setting could become dynamic. However,
            Metered Value will remain static.
            '''

        })
    '''
    Flag to indicate that the facility can set LMP Works in tandem with
    Metered Value. Greater chance of this being dynamic than the Metered
    Value, however, it is requested that Price Setting and Metered Value
    stay at the same source. Currently no customers have implemented the
    metering capability, but if this option is implemented, then Price
    Setting could become dynamic. However, Metered Value will remain static.
    '''

    reqNoticeTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time period that is required from an order to reduce a load to the time
            that it takes to get to the minimum load reduction.
            '''

        })
    '''
    Time period that is required from an order to reduce a load to the
    time that it takes to get to the minimum load reduction.
    '''

    dropRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate that load can be reduced (MW/minute)
            '''

        })
    '''
    Maximum rate that load can be reduced (MW/minute)
    '''

    loadRedInitiationCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            load reduction initiation cost
            '''

        })
    '''
    load reduction initiation cost
    '''

    minLoad: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum MW load below which it may not be reduced.
            '''

        })
    '''
    Minimum MW load below which it may not be reduced.
    '''

    minLoadReduction: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum MW for a load reduction (e.g. MW rating of a discrete pump.
            '''

        })
    '''
    Minimum MW for a load reduction (e.g. MW rating of a discrete pump.
    '''

    minLoadReductionCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost in $ at the minimum reduced load
            '''

        })
    '''
    Cost in $ at the minimum reduced load
    '''

    pickUpRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate load may be restored (MW/minute)
            '''

        })
    '''
    Maximum rate load may be restored (MW/minute)
    '''

    shutdownCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The fixed cost associated with committing a load reduction.
            '''

        })
    '''
    The fixed cost associated with committing a load reduction.
    '''

    AreaLoadBid: Optional[AreaLoadBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AreaLoadBid.LoadBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredLoad: Optional[RegisteredLoad] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredLoad.LoadBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadReductionPriceCurve: list[LoadReductionPriceCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadReductionPriceCurve.LoadBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RampRateCurve: list[RampRateCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RampRateCurve.LoadBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class TransactionBid(Bid):
    '''
    Bilateral or scheduled transactions for energy and ancillary services considered
    by market clearing process.
    '''

    demandTransaction: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set true if this is a demand transaction.
            '''

        })
    '''
    Set true if this is a demand transaction.
    '''

    dispatchable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set true if this is a dispatchable transaction.
            '''

        })
    '''
    Set true if this is a dispatchable transaction.
    '''

    payCongestion: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set true if this is a willing to pay transaction. This flag is used to
            determine whether a schedule is willing-to-pay-congestion or not.
            '''

        })
    '''
    Set true if this is a willing to pay transaction. This flag is used
    to determine whether a schedule is willing-to-pay-congestion or not.
    '''

    Delivery_Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.DeliveryTransactionBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Receipt_Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.ReceiptTransactionBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionReservation: Optional[TransmissionReservation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionReservation.TransactionBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnergyProfiles: list[EnergyProfile] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyProfile.TransactionBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransactionBidResults: list[TransactionBidResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransactionBidResults.TransactionBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionReservation: Optional[TransmissionReservation] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionReservation.TransactionBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class BillDeterminant(Document):
    '''
    Models various charges to support billing and settlement.
    '''

    calculationLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Level in charge calculation order.
            '''

        })
    '''
    Level in charge calculation order.
    '''

    configVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The version of configuration of calculation logic in the settlement.
            '''

        })
    '''
    The version of configuration of calculation logic in the settlement.
    '''

    deleteStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    exception: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    factor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    frequency: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    numberInterval: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of intervals of bill determiant in trade day, e.g. 300 for five
            minute intervals.
            '''

        })
    '''
    Number of intervals of bill determiant in trade day, e.g. 300 for five
    minute intervals.
    '''

    offset: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    precisionLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The level of precision in the current value.
            '''

        })
    '''
    The level of precision in the current value.
    '''

    primaryYN: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    referenceFlag: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    reportable: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    roundOff: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    source: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    unitOfMeasure: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The UOM for the current value of the Bill Determinant.
            '''

        })
    '''
    The UOM for the current value of the Bill Determinant.
    '''

    ChargeProfile: Optional[ChargeProfile] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChargeProfile.BillDeterminant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfile: Optional[ChargeProfile] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChargeProfile.BillDeterminant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfileData: list[ChargeProfileData] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChargeProfileData.BillDeterminant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusinessPlan(Document):
    '''
    A BusinessPlan is an organized sequence of predetermined actions required
    to complete a future organizational objective. It is a type of document
    that typically references a schedule, physical and/or logical resources
    (assets and/or PowerSystemResources), locations, etc.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    chargeVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    factor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    frequencyType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    totalInterval: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CongestionRevenueRight(Document):
    '''
    Congestion Revenue Rights (CRR) class that is inherited from a Document
    class.
    A CRR is a financial concept that is used to hedge congestion charges.
    The CRR is usually settled based on the Locational Marginal Prices (LMPs)
    that are calculated in the day-ahead market. These LMPs are determined
    by the Day-ahead resource schedules/bids. CRRs will not hedge against marginal
    losses. If the congestion component of LMP at the sink is greater than
    at the source, then the CRR owner is entitled to receive a portion of congestion
    revenues. If the congestion component at the sink is less than at the source,
    then an obligation-type CRR owner will be charged, but an option-type CRR
    owner will not.
    '''

    tradeSliceID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment of the CRR described in the current record.
            '''

        })
    '''
    Segment of the CRR described in the current record.
    '''

    cRRcategory: Optional[ CRRCategoryType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            CRR category represents 'PTP' for a point-to-point CRR, or 'NSR' for a
            Network Service Right. If CRR category is 'PTP', both Source ID and Sink
            ID fields are required. If CRR category is 'NSR' only one field, either
            Source ID or Sink ID, shall be not null and the other shall be null. However,
            the 'NSR' category will include at least three records.
            '''

        })
    '''
    CRR category represents 'PTP' for a point-to-point CRR, or 'NSR' for
    a Network Service Right. If CRR category is 'PTP', both Source ID and
    Sink ID fields are required. If CRR category is 'NSR' only one field,
    either Source ID or Sink ID, shall be not null and the other shall
    be null. However, the 'NSR' category will include at least three records.
    '''

    cRRtype: Optional[ CRRSegmentType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of the CRR, from the possible type definitions in the CRR System (e.g.
            'LSE', 'ETC').
            '''

        })
    '''
    Type of the CRR, from the possible type definitions in the CRR System
    (e.g. 'LSE', 'ETC').
    '''

    hedgeType: Optional[ CRRHedgeType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hedge type Obligation or Option. An obligation type requires the holder
            to receive or pay the congestion rent. An option type gives the holder
            the option of receiving or paying the congestion rent.
            '''

        })
    '''
    Hedge type Obligation or Option. An obligation type requires the holder
    to receive or pay the congestion rent. An option type gives the holder
    the option of receiving or paying the congestion rent.
    '''

    timeOfUse: Optional[ TimeOfUse ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time of Use flag of the CRR - Peak (ON), Offpeak (OFF) or all 24 hours
            (24HR).
            '''

        })
    '''
    Time of Use flag of the CRR - Peak (ON), Offpeak (OFF) or all 24 hours
    (24HR).
    '''

    CRRMarket: Optional[CRRMarket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CRRMarket.CongestionRevenueRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.CongestionRevenueRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CRROrgRole: list[CRROrgRole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CRROrgRole.CongestionRevenueRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CRRSegment: list[CRRSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CRRSegment.CongestionRevenueRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.CongestionRevenueRight',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CongestionRevenueRights'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CustomerAccount(Document):
    '''
    Assignment of a group of products and services purchased by the customer
    through a customer agreement, used as a mechanism for customer billing
    and payment. It contains common information from the various types of customer
    agreements to create billings (invoices) for a customer and receive payment.
    '''

    billingCycle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cycle day on which the associated customer account will normally be billed,
            used to determine when to produce the billing.
            '''

        })
    '''
    Cycle day on which the associated customer account will normally be
    billed, used to determine when to produce the billing.
    '''

    budgetBill: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Budget bill code.
            '''

        })
    '''
    Budget bill code.
    '''

    lastBillAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The last amount that will be billed to the customer prior to shut off of
            the account.
            '''

        })
    '''
    The last amount that will be billed to the customer prior to shut off
    of the account.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Customer.CustomerAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer owning this account.
            '''

        })
    '''
    Customer owning this account.
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the customer account
            '''

        })
    '''
    Meter read schedule that applies to the customer account
    '''

    AccountNotification: list[AccountNotification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AccountNotification.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The notification for the customer account.
            '''

        })
    '''
    The notification for the customer account.
    '''

    CustomerAgreements: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All agreements for this customer account.
            '''

        })
    '''
    All agreements for this customer account.
    '''

    CustomerBillingInfos: list[CustomerBillingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerBillingInfo.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoicees: list[ErpInvoice] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpInvoice.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PaymentTransactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All payment transactions for this customer account.
            '''

        })
    '''
    All payment transactions for this customer account.
    '''

    WorkBillingInfos: list[WorkBillingInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkBillingInfo.CustomerAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CustomerBillingInfo(Document):
    '''
    The creation of the monthly customer billing statements is the method employed
    to notify Customers of charges, adjustments and credits applied to their
    account for Services and Products. The actuall billing occurs through an
    ErpInvoice. The CustomerBillingInfo includes information from the payment,
    collection, meter reading, installed meter, service, site, customer, customer
    account, customer agreement, services and pricing subject areas. Each component
    price shows up as a separate line item on the ErpInvoice.
    The Customer Billing Statement may include collection and account messages,
    marketing/civic event messages and bill inserts.
    One Customer Billing Statement is produced for all Agreements under a CustomerAccount
    per billing cycle date defined in 'CustomerAccount.billingCycle'.
    The history of CustomerBillingInfo, Invoices and Payments is to be maintained
    in associated ActivityRecords.
    '''

    billingDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Business date designated for the billing run which produced this CustomerBillingInfo.
            '''

        })
    '''
    Business date designated for the billing run which produced this CustomerBillingInfo.
    '''

    dueDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Calculated date upon which a customer billing amount is due, used in the
            invoicing process to determine when a Customer's Payment is delinquent.
            It takes into consideration the regulatory criteria and the Customer's
            requested due date. In the absence of a Customer requested due date, the
            due date is typically calculated from the regulated number of days and
            the 'billingDate'.
            '''

        })
    '''
    Calculated date upon which a customer billing amount is due, used in
    the invoicing process to determine when a Customer's Payment is delinquent.
    It takes into consideration the regulatory criteria and the Customer's
    requested due date. In the absence of a Customer requested due date,
    the due date is typically calculated from the regulated number of days
    and the 'billingDate'.
    '''

    lastPaymentDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of the last payment received from the customer. It is retained in
            the Customer Billing system, although the details of each payment are tracked
            in the ERP system.
            '''

        })
    '''
    Date of the last payment received from the customer. It is retained
    in the Customer Billing system, although the details of each payment
    are tracked in the ERP system.
    '''

    pymtPlanType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of payment plan.
            '''

        })
    '''
    Type of payment plan.
    '''

    kind: Optional[ CustomerBillingKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of bill customer receives.
            '''

        })
    '''
    Kind of bill customer receives.
    '''

    lastPaymentAmt: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of the last payment received from the customer. It is retained in
            the Customer Billing system, although the details of each payment are tracked
            in the ERP system.
            '''

        })
    '''
    Amount of the last payment received from the customer. It is retained
    in the Customer Billing system, although the details of each payment
    are tracked in the ERP system.
    '''

    outBalance: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outstanding balance on the CustomerAccount as of the statement date.
            '''

        })
    '''
    Outstanding balance on the CustomerAccount as of the statement date.
    '''

    pymtPlanAmt: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Monthly amortized amount due during each billing cycle for the CustomerAccount
            balance for which the Payment Plan is set-up.
            '''

        })
    '''
    Monthly amortized amount due during each billing cycle for the CustomerAccount
    balance for which the Payment Plan is set-up.
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.CustomerBillingInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class EnergyTransaction(Document):
    '''
    Specifies the schedule for energy transfers between interchange areas that
    are necessary to satisfy the associated interchange transaction.
    '''

    capacityBacked: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interchange capacity flag. When the flag is set to true, it indicates a
            transaction is capacity backed.
            '''

        })
    '''
    Interchange capacity flag. When the flag is set to true, it indicates
    a transaction is capacity backed.
    '''

    firmInterchangeFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Firm interchange flag indicates whether or not this energy transaction
            can be changed without potential financial consequences.
            '''

        })
    '''
    Firm interchange flag indicates whether or not this energy transaction
    can be changed without potential financial consequences.
    '''

    payCongestion: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Willing to Pay congestion flag
            '''

        })
    '''
    Willing to Pay congestion flag
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for energy transaction.
            '''

        })
    '''
    Reason for energy transaction.
    '''

    congestChargeMax: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum congestion charges in monetary units.
            '''

        })
    '''
    Maximum congestion charges in monetary units.
    '''

    deliveryPointP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Delivery point active power.
            '''

        })
    '''
    Delivery point active power.
    '''

    energyMin: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transaction minimum active power if dispatchable.
            '''

        })
    '''
    Transaction minimum active power if dispatchable.
    '''

    receiptPointP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Receipt point active power.
            '''

        })
    '''
    Receipt point active power.
    '''

    state: Optional[ EnergyTransactionType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            { Approve | Deny | Study }
            '''

        })
    '''
    { Approve | Deny | Study }
    '''

    EnergyProduct: Optional[EnergyProduct] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyProduct.EnergyTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The "Source" for an EnergyTransaction is an EnergyProduct which is injected
            into a ControlArea. Typically this is a ServicePoint.
            '''

        })
    '''
    The "Source" for an EnergyTransaction is an EnergyProduct which is
    injected into a ControlArea. Typically this is a ServicePoint.
    '''

    Export_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.Export_EnergyTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy is transferred between interchange areas
            '''

        })
    '''
    Energy is transferred between interchange areas
    '''

    Import_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.Import_EnergyTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy is transferred between interchange areas
            '''

        })
    '''
    Energy is transferred between interchange areas
    '''

    TransmissionReservation: Optional[TransmissionReservation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionReservation.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CurtailmentProfiles: list[CurtailmentProfile] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CurtailmentProfile.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An EnergyTransaction may be curtailed by any of the participating entities.
            '''

        })
    '''
    An EnergyTransaction may be curtailed by any of the participating entities.
    '''

    EnergyProfiles: list[EnergyProfile] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyProfile.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An EnergyTransaction shall have at least one EnergyProfile.
            '''

        })
    '''
    An EnergyTransaction shall have at least one EnergyProfile.
    '''

    LossProfiles: list[LossProfile] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossProfile.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An EnergyTransaction may have a LossProfile.
            '''

        })
    '''
    An EnergyTransaction may have a LossProfile.
    '''

    TieLines: list[TieLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieLine.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A dynamic energy transaction can act as a pseudo tie line.
            '''

        })
    '''
    A dynamic energy transaction can act as a pseudo tie line.
    '''

    TransmissionReservation: Optional[TransmissionReservation] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionReservation.EnergyTransaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpDocument(Document):
    '''
    Shadow class for Document, to isolate subclassing from this package. If
    any subclass gets normative and needs inheritance, it will inherit directly
    from Document.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpBOM(ErpDocument):
    '''
    Information that generally describes the Bill of Material Structure and
    its contents for a utility.
    This is used by ERP systems to transfer Bill of Material information between
    two business applications.
    '''

    Design: Optional[Design] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Design.ErpBOMs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpBomItemDatas: list[ErpBomItemData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpBomItemData.ErpBOM',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpChartOfAccounts(ErpDocument):
    '''
    Accounting structure of a business. Each account represents a financial
    aspect of a business, such as its Accounts Payable, or the value of its
    inventory, or its office supply expenses.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpEngChangeOrder(ErpDocument):
    '''
    General Utility Engineering Change Order information.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpInvoice(ErpDocument):
    '''
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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[ BillMediaKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of media by which the CustomerBillingInfo was delivered.
            '''

        })
    '''
    Kind of media by which the CustomerBillingInfo was delivered.
    '''

    kind: Optional[ ErpInvoiceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of invoice (default is 'sales').
            '''

        })
    '''
    Kind of invoice (default is 'sales').
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.ErpInvoicees',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItems: list[ErpInvoiceLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpInvoiceLineItem.ErpInvoice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpInvoiceLineItem(ErpDocument):
    '''
    An individual line item on an invoice.
    '''

    glAccount: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            General Ledger account code, must be a valid combination.
            '''

        })
    '''
    General Ledger account code, must be a valid combination.
    '''

    glDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous line item charge amount.
            '''

        })
    '''
    Previous line item charge amount.
    '''

    kind: Optional[ ErpInvoiceLineItemKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of line item.
            '''

        })
    '''
    Kind of line item.
    '''

    ContainerErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ComponentErpInvoiceLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoice: Optional[ErpInvoice] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpInvoice.ErpInvoiceLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPayableLineItem: Optional[ErpPayableLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPayableLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecDelvLineItem: Optional[ErpRecDelvLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecDelvLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecLineItem: Optional[ErpRecLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ComponentErpInvoiceLineItems: list[ErpInvoiceLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpInvoiceLineItem.ContainerErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpJournalEntries: list[ErpJournalEntry] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpJournalEntry.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPayableLineItem: Optional[ErpPayableLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPayableLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecDelvLineItem: Optional[ErpRecDelvLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecDelvLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecLineItem: Optional[ErpRecLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecLineItem.ErpInvoiceLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpJournal(ErpDocument):
    '''
    Book for recording accounting transactions as they occur. Transactions
    and adjustments are first recorded in a journal, which is like a diary
    of instructions, advising which account to be charged and by how much.
    A journal represents a change in the balances of a business's financial
    accounts. Many tasks or transactions throughout an enterprise will result
    in the creation of a journal. Some examples are creating a customer invoice,
    paying a vendor, transferring inventory, or paying employees.
    '''

    ErpJournalEntries: list[ErpJournalEntry] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpJournalEntry.ErpJournal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpLedger(ErpDocument):
    '''
    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 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.
    '''

    ErpLedgerEntries: list[ErpLedgerEntry] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpLedgerEntry.ErpLedger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpLedgerBudget(ErpDocument):
    '''
    Information for utility Ledger Budgets. They support the transfer budget
    amounts between all possible source applications throughout an enterprise
    and a general ledger or budget application.
    '''

    ErpLedBudLineItems: list[ErpLedBudLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpLedBudLineItem.ErpLedgerBudget',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpPOLineItem(ErpDocument):
    '''
    Of an ErpPurchaseOrder, this is an individually ordered item or product
    along with the quantity, price and other descriptive information.
    '''

    AssetModelCatalogueItem: Optional[AssetModelCatalogueItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetModelCatalogueItem.ErpPOLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPurchaseOrder: Optional[ErpPurchaseOrder] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpPurchaseOrder.ErpPOLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecDelLineItem: Optional[ErpRecDelvLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecDelvLineItem.ErpPOLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReqLineItem: Optional[ErpReqLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpReqLineItem.ErpPOLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRecDelLineItem: Optional[ErpRecDelvLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpRecDelvLineItem.ErpPOLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReqLineItem: Optional[ErpReqLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpReqLineItem.ErpPOLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpPayable(ErpDocument):
    '''
    A transaction that represents an invoice from a supplier. A payable (or
    voucher) is an open item, approved and ready for payment, in the Accounts
    Payable ledger.
    '''

    ErpPayableLineItems: list[ErpPayableLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpPayableLineItem.ErpPayable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpPayment(ErpDocument):
    '''
    Payment infromation and status for any individual line item of an ErpInvoice
    (e.g., when payment is from a customer). ErpPayable is also updated when
    payment is to a supplier and ErpReceivable is updated when payment is from
    a customer. Multiple payments can be made against a single line item and
    an individual payment can apply to more that one line item.
    '''

    termsPayment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Payment terms (e.g., net 30).
            '''

        })
    '''
    Payment terms (e.g., net 30).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpProjectAccounting(ErpDocument):
    '''
    Utility Project Accounting information, used by ERP applications to enable
    all relevant sub-systems that submit single sided transactions to transfer
    information with a Project Accounting Application. This would include,
    but not necessarily be limited to: Accounts Payable, Accounts Receivable,
    Budget, Order Management, Purchasing, Time and Labor, Travel and Expense.
    '''

    ErpTimeEntries: list[ErpTimeEntry] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpTimeEntry.ErpProjectAccounting',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Projects: list[Project] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Project.ErpProjectAccounting',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Works: list[Work] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Work.ErpProjectAccounting',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetails: list[WorkCostDetail] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkCostDetail.ErpProjectAccounting',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpPurchaseOrder(ErpDocument):
    '''
    A document that communicates an order to purchase goods from a buyer to
    a supplier. The PurchaseOrder carries information to and from the buyer
    and supplier. It is a legally binding document once both Parties agree
    to the contents and the specified terms and conditions of the order.
    '''

    ErpPOLineItems: list[ErpPOLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpPOLineItem.ErpPurchaseOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpQuote(ErpDocument):
    '''
    Document describing the prices of goods or services provided by a supplier.
    It includes the terms of the purchase, delivery proposals, identification
    of goods or services ordered, as well as their quantities.
    '''

    ErpQuoteLineItems: list[ErpQuoteLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpQuoteLineItem.ErpQuote',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpReceivable(ErpDocument):
    '''
    Transaction representing an invoice, credit memo or debit memo to a customer.
    It is an open (unpaid) item in the Accounts Receivable ledger.
    '''

    ErpRecLineItems: list[ErpRecLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpRecLineItem.ErpReceivable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpReceiveDelivery(ErpDocument):
    '''
    Transaction for an Organisation receiving goods or services that may be
    used to indicate receipt of goods in conjunction with a purchase order.
    A receivable is an open (unpaid) item in the Accounts Receivable ledger.
    '''

    ErpRecDelvLineItems: list[ErpRecDelvLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpRecDelvLineItem.ErpReceiveDelivery',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpRequisition(ErpDocument):
    '''
    General information that applies to a utility requisition that is a request
    for the purchase of goods or services. Typically, a requisition leads to
    the creation of a purchase order to a specific supplier.
    '''

    ErpReqLineItems: list[ErpReqLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpReqLineItem.ErpRequisition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpSalesOrder(ErpDocument):
    '''
    General purpose Sales Order is used for utility service orders, etc.
    As used by the OAG, the SalesOrder is a step beyond a PurchaseOrder in
    that the receiving entity of the order also communicates SalesInformoration
    about the Order along with the Order itself.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpTimeSheet(ErpDocument):
    '''
    Time sheet for employees and contractors. Note that ErpTimeSheet inherits
    the relationship to ErpPerson from Document.
    '''

    ErpTimeEntries: list[ErpTimeEntry] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpTimeEntry.ErpTimeSheet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @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.
    '''

    cause: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cause of this incident.
            '''

        })
    '''
    Cause of this incident.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this incident.
            '''

        })
    '''
    Location of this incident.
    '''

    Outage: Optional[Outage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Outage.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outage for this incident.
            '''

        })
    '''
    Outage for this incident.
    '''

    Owner: Optional[Operator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Operator.Incidents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operator who owns this incident.
            '''

        })
    '''
    Operator who owns this incident.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The trouble order that is associated to the incident
            '''

        })
    '''
    The trouble order that is associated to the incident
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unplanned outage that may be associated with the incidents.
            '''

        })
    '''
    The unplanned outage that may be associated with the incidents.
    '''

    CustomerNotifications: list[CustomerNotification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerNotification.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All notifications for a customer related to the status change of this incident.
            '''

        })
    '''
    All notifications for a customer related to the status change of this
    incident.
    '''

    Hazard: list[Hazard] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Hazard.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IncidentHazard: list[IncidentHazard] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IncidentHazard.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All hazards associated with this incident.
            '''

        })
    '''
    All hazards associated with this incident.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Location of this incident.
            '''

        })
    '''
    Location of this incident.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The trouble order that is associated to the incident
            '''

        })
    '''
    The trouble order that is associated to the incident
    '''

    TroubleTickets: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.Incident',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All trouble tickets reporting this incident.
            '''

        })
    '''
    All trouble tickets reporting this incident.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketDocument(Document):
    '''
    Electronic document containing the information necessary to satisfy a given
    business process set of requirements.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketAgreement(MarketDocument):
    '''
    An identification or eventually the contents of an agreement between two
    or more parties.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketFactors(Document):
    '''
    Aggregation of market information relative for a specific time interval.
    '''

    intervalEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The end of the time interval for which requirement is defined.
            '''

        })
    '''
    The end of the time interval for which requirement is defined.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start of the time interval for which requirement is defined.
            '''

        })
    '''
    The start of the time interval for which requirement is defined.
    '''

    Market: Optional[Market] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Market.MarketFactors',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AncillaryServiceClearing(MarketFactors):
    '''
    Model of results of market clearing with respect to Ancillary Service products.
    '''

    MarketCaseClearing: Optional[MarketCaseClearing] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketCaseClearing.MarketProductClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegionResults: list[MarketRegionResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketRegionResults.AncillaryServiceClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CommitmentClearing(MarketFactors):
    '''
    Models results of market clearing which call for commitment of units.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConstraintClearing(MarketFactors):
    '''
    Groups all items associated with Binding Constraints and Constraint Violations
    per interval and market.
    '''

    ConstraintResults: list[ConstraintResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConstraintResults.ConstraintClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostLoss(MarketFactors):
    '''
    Model of ex-post calcultion of MW losses.
    '''

    ExPostLossResults: list[ExPostLossResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostLossResults.ExPostLoss',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostMarketRegion(MarketFactors):
    '''
    Model of ex-post calculation of cleared MW on a regional basis.
    '''

    ExPostMarketRegionResults: Optional[ExPostMarketRegionResults] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExPostMarketRegionResults.ExPostMarketRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExPostMarketRegionResults: Optional[ExPostMarketRegionResults] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExPostMarketRegionResults.ExPostMarketRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostPricing(MarketFactors):
    '''
    Model of ex-post pricing of nodes.
    '''

    energyPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            market energy price
            '''

        })
    '''
    market energy price
    '''

    ExPostResults: list[ExPostPricingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostPricingResults.ExPostPricing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExPostResource(MarketFactors):
    '''
    Model of ex-post pricing of resources.
    '''

    ExPostResourceResults: list[ExPostResourceResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostResourceResults.ExPostResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeneralClearing(MarketFactors):
    '''
    Model of clearing result of the market run at the market level. Identifies
    interval.
    '''

    GeneralClearingResults: list[GeneralClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneralClearingResults.GeneralClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InstructionClearing(MarketFactors):
    '''
    Model of market clearing, relating to commitment instructions. Identifies
    interval.
    '''

    ActualDemandResponseEvent: Optional[DistributedResourceActualEvent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DistributedResourceActualEvent.InstructionClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ActualDemandResponseEvents may exist that are not part of a cordinated
            MarketActualEvent associated to a Market. These ActualDemandResponseEvents
            can have many InstructionClearing Instructions for specified RegisteredResources
            or Distributed Energy Resource type of AggregateNodes.
            '''

        })
    '''
    ActualDemandResponseEvents may exist that are not part of a cordinated
    MarketActualEvent associated to a Market. These ActualDemandResponseEvents
    can have many InstructionClearing Instructions for specified RegisteredResources
    or Distributed Energy Resource type of AggregateNodes.
    '''

    ResourceDeploymentStatus: list[ResourceDeploymentStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceDeploymentStatus.InstructionClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InstructionClearingDOP(MarketFactors):
    '''
    Model of market clearing, related to Dispatch Operating Point. Identifies
    interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InstructionClearingDOT(MarketFactors):
    '''
    Model of market clearing, related to Dispatch Operating Target (model of
    anticipatory dispatch). Identifies interval.
    '''

    contingencyActive: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that the system is currently operating in a contingency mode.
            '''

        })
    '''
    Indication that the system is currently operating in a contingency
    mode.
    '''

    dispatchMode: Optional[ AutomaticDispatchMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DemandResponseActualEvent: Optional[DistributedResourceActualEvent] = field(
        default=None,
        metadata={
        'type': 'IRC-DR',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DistributedResourceActualEvent.InstructionClearingDOT',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class InterTieClearing(MarketFactors):
    '''
    Model of market clearing related to results at the inter-ties. Identifies
    interval
    '''

    InterTieResults: list[InterTieResults] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterTieResults.InterTieClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntermittentResourceEligibility(MarketFactors):
    '''
    Indicates whether unit is eligible for treatment as a intermittent variable
    renewable resource.
    '''

    eligibilityStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether a resource is eligible for PIRP program for a given hour
            '''

        })
    '''
    Indicates whether a resource is eligible for PIRP program for a given
    hour
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.IntermittentResourceEligibility',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LossClearing(MarketFactors):
    '''
    RT only and is published on 5 minute intervals for the previous RT time
    interval results.
    '''

    LossClearingResults: list[LossClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossClearingResults.LossClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LossSensitivity(MarketFactors):
    '''
    Loss sensitivity applied to a ConnectivityNode for a given time interval.
    '''

    lossFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss penalty factor.
            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).
            '''

        })
    '''
    Loss penalty factor.
    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).
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.LossPenaltyFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MPMClearing(MarketFactors):
    '''
    Model of results of Market Power tests, and possible mitigation. Interval
    based.
    '''

    LMPMFinalFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    mitigationOccuredFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SMPMFinalFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMTestResults: list[MPMTestResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMTestResults.MPMClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class MarketCaseClearing(MarketFactors):
    '''
    Market case clearing results are posted for a given settlement period.
    '''

    caseType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Settlement period:
            'DA - Bid-in'
            'DA - Reliability'
            'DA - Amp1'
            'DA - Amp2'
            'RT - Ex-Ante'
            'RT - Ex-Post'
            'RT - Amp1'
            'RT - Amp2'
            '''

        })
    '''
    Settlement period:
    'DA - Bid-in'
    'DA - Reliability'
    'DA - Amp1'
    'DA - Amp2'
    'RT - Ex-Ante'
    'RT - Ex-Post'
    'RT - Amp1'
    'RT - Amp2'
    '''

    modifiedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Last time and date clearing results were manually modified.
            '''

        })
    '''
    Last time and date clearing results were manually modified.
    '''

    postedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid clearing results posted time and date.
            '''

        })
    '''
    Bid clearing results posted time and date.
    '''

    MarketProductClearing: list[AncillaryServiceClearing] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AncillaryServiceClearing.MarketCaseClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MitigatedBidClearing(MarketFactors):
    '''
    Model of market power mitigation through reference or mitigated bids. Interval
    based.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PnodeClearing(MarketFactors):
    '''
    Pricing node clearing results posted for a given settlement period.
    '''

    CommodityPrice: list[CommodityPrice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityPrice.PnodeClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeResults: list[PnodeResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PnodeResults.PnodeClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RMROperatorInput(MarketFactors):
    '''
    RMR Operator's entry of the RMR requirement per market interval.
    '''

    manuallySchedRMRMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lower of the original pre-dispatch or the AC run schedule (Also known
            as the RMR Reguirement) becomes the pre-dispatch value.
            '''

        })
    '''
    The lower of the original pre-dispatch or the AC run schedule (Also
    known as the RMR Reguirement) becomes the pre-dispatch value.
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.RMROperatorInput',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceAwardClearing(MarketFactors):
    '''
    Models details of bid and offer market clearing. Class indicates whether
    a contingency is active and whether the automatic dispatching system is
    active for this interval of the market solution.
    '''

    contingencyActive: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that the system is currently operating in a contingency mode.
            '''

        })
    '''
    Indication that the system is currently operating in a contingency
    mode.
    '''

    dispatchMode: Optional[ AutomaticDispatchMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceClearing(MarketFactors):
    '''
    Model of market results, including cleaing result of resources. Associated
    with ResourceDispatchResults.
    '''

    ResourceDispatchResults: list[ResourceDispatchResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceDispatchResults.ResourceClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceLoadFollowingInst: list[ResourceLoadFollowingInst] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceLoadFollowingInst.ResourceClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SecurityConstraintSum(MarketFactors):
    '''
    Typically provided by RTO systems, constraints identified in both base
    case and critical contingency cases have to be transferred.
    A constraint has N (&gt;=1) constraint terms. A term is represented by
    an instance of TerminalConstraintTerm.
    The constraint expression is:
    minValue &lt;= c1*x1 + c2*x2 + .... cn*xn + k &lt;= maxValue
    where:
    - cn is ConstraintTerm.factor
    - xn is the flow at the terminal
    Flow into the associated equipment is positive for the purpose of ConnectivityNode
    NodeConstraintTerm.
    k is SecurityConstraintsLinear.resourceMW.
    The units of k are assumed to be same as the units of the flows, xn. The
    constants, cn, are dimensionless.
    With these conventions, cn and k are all positive for a typical constraint
    such as "weighted sum of generation shall be less than limit". Furthermore,
    cn are all 1.0 for a case such as "interface flow shall be less than limit",
    assuming the terminals are chosen on the importing side of the interface.
    '''

    BaseCaseConstraintLimit: Optional[BaseCaseConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseCaseConstraintLimit.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultConstraintLimit: Optional[DefaultConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultConstraintLimit.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.SecurityConstraintsLinear',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BaseCaseConstraintLimit: Optional[BaseCaseConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseCaseConstraintLimit.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConstraintTerms: list[ConstraintTerm] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConstraintTerm.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContingencyConstraintLimits: list[ContingencyConstraintLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContingencyConstraintLimit.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultConstraintLimit: Optional[DefaultConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultConstraintLimit.SecurityConstraintSum',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SecurityConstraintsClearing(MarketFactors):
    '''
    Binding security constrained clearing results posted for a given settlement
    period.
    '''

    mwFlow: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Optimal MW flow
            '''

        })
    '''
    Optimal MW flow
    '''

    mwLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Binding MW limit.
            '''

        })
    '''
    Binding MW limit.
    '''

    shadowPrice: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Security constraint shadow price.
            '''

        })
    '''
    Security constraint shadow price.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransactionBidClearing(MarketFactors):
    '''
    Contains the intervals relavent for the associated TransactionBidResults.
    For example, Day Ahead cleared results for the transaction bids for each
    interval of the market day.
    '''

    TransactionBidResults: list[TransactionBidResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransactionBidResults.TransactionBidClearing',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketSkill(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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the skill became effective.
            '''

        })
    '''
    Date and time the skill became effective.
    '''

    level: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Level of skill for a Craft.
            '''

        })
    '''
    Level of skill for a Craft.
    '''

    MarketPerson: Optional[MarketPerson] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketPerson.MarketSkills',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketStatement(Document):
    '''
    A statement is a roll up of statement line items. Each statement along
    with its line items provide the details of specific charges at any given
    time. Used by Billing and Settlement.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The end of a bill period.
            '''

        })
    '''
    The end of a bill period.
    '''

    referenceNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The version number of previous statement (in the case of true up).
            '''

        })
    '''
    The version number of previous statement (in the case of true up).
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start of a bill period.
            '''

        })
    '''
    The start of a bill period.
    '''

    tradeDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date of which Settlement is run.
            '''

        })
    '''
    The date of which Settlement is run.
    '''

    transactionDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date of which this statement is issued.
            '''

        })
    '''
    The date of which this statement is issued.
    '''

    MarketStatementLineItem: list[MarketStatementLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketStatementLineItem.MarketStatement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MerchantAccount(Document):
    '''
    The operating account controlled by merchant agreement, against which the
    vendor may vend tokens or receipt payments. Transactions via vendor shift
    debit the account and bank deposits via bank statement credit the account.
    '''

    currentBalance: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The current operating balance of this account.
            '''

        })
    '''
    The current operating balance of this account.
    '''

    provisionalBalance: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The balance of this account after taking into account any pending debits
            from VendorShift.merchantDebitAmount and pending credits from BankStatement.merchantCreditAmount
            or credits (see also BankStatement attributes and VendorShift attributes).
            '''

        })
    '''
    The balance of this account after taking into account any pending debits
    from VendorShift.merchantDebitAmount and pending credits from BankStatement.merchantCreditAmount
    or credits (see also BankStatement attributes and VendorShift attributes).
    '''

    MerchantAgreement: Optional[MerchantAgreement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MerchantAgreement.MerchantAccounts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Merchant agreement that instantiated this merchant account.
            '''

        })
    '''
    Merchant agreement that instantiated this merchant account.
    '''

    VendorShifts: list[VendorShift] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VendorShift.MerchantAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All vendor shifts that operate on this merchant account.
            '''

        })
    '''
    All vendor shifts that operate on this merchant account.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeterReadSchedule(Document):
    '''
    '''

    CustomerAccount: list[CustomerAccount] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAccount.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All customer accounts for the meter read schedule.
            '''

        })
    '''
    All customer accounts for the meter read schedule.
    '''

    CustomerAgreement: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All customer agreements for the meter read schedule.
            '''

        })
    '''
    All customer agreements for the meter read schedule.
    '''

    EndDevice: list[EndDevice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDevice.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end devices for the meter read schedule.
            '''

        })
    '''
    All end devices for the meter read schedule.
    '''

    EndDeviceGroup: list[EndDeviceGroup] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceGroup.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device groups for the meter read schedule.
            '''

        })
    '''
    All end device groups for the meter read schedule.
    '''

    ReadingType: list[ReadingType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReadingType.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All reading types for the meter read schedule.
            '''

        })
    '''
    All reading types for the meter read schedule.
    '''

    TimeSchedule: list[TimeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TimeSchedule.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All time schedules for the meter read schedule.
            '''

        })
    '''
    All time schedules for the meter read schedule.
    '''

    UsagePoint: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage points for the meter read schedule.
            '''

        })
    '''
    All usage points for the meter read schedule.
    '''

    UsagePointGroup: list[UsagePointGroup] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePointGroup.MeterReadSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage point groups for the meter read schedule.
            '''

        })
    '''
    All usage point groups for the meter read schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationalRestriction(Document):
    '''
    A document that can be associated with equipment to describe any sort of
    restrictions compared with the original manufacturer's specification or
    with the usual operational practice e.g. temporary maximum loadings, maximum
    switching current, do not operate if bus couplers are open, etc.
    In the UK, for example, if a breaker or switch ever mal-operates, this
    is reported centrally and utilities use their asset systems to identify
    all the installed devices of the same manufacturer's type. They then apply
    operational restrictions in the operational systems to warn operators of
    potential problems. After appropriate inspection and maintenance, the operational
    restrictions may be removed.
    '''

    ProductAssetModel: Optional[ProductAssetModel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProductAssetModel.OperationalRestrictions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset model to which this restriction applies.
            '''

        })
    '''
    Asset model to which this restriction applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationalUpdatedRating(OperationalRestriction):
    '''
    Lowered capability because of deterioration or inadequacy (sometimes referred
    to as derating or partial outage) or other kind of operational rating change.
    '''

    changeType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of operational updated rating, e.g. a derate, a rerate or a return
            to normal.
            '''

        })
    '''
    Type of operational updated rating, e.g. a derate, a rerate or a return
    to normal.
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.UpdatedRatings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned equipment outage with this updated rating.
            '''

        })
    '''
    Planned equipment outage with this updated rating.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationalTag(Document):
    '''
    Operational tag placed on a power system resource or asset in the context
    of switching plan execution or other work in the field.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.OperationalTags',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset on which this tag has been placed.
            '''

        })
    '''
    Asset on which this tag has been placed.
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.OperationalTags',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power system resource on which this tag has been placed.
            '''

        })
    '''
    Power system resource on which this tag has been placed.
    '''

    TagAction: Optional[TagAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TagAction.OperationalTag',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tag action associated with this tag.
            '''

        })
    '''
    Tag action associated with this tag.
    '''

    TagAction: Optional[TagAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TagAction.OperationalTag',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Tag action associated with this tag.
            '''

        })
    '''
    Tag action associated with this tag.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @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.
    '''

    communityDescriptor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            a name to denote the community - this could be a name or a code of some
            kind.
            '''

        })
    '''
    a name to denote the community - this could be a name or a code of
    some kind.
    '''

    customersRestored: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            number of customers that have been restored in the area.
            '''

        })
    '''
    number of customers that have been restored in the area.
    '''

    metersAffected: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The updated number of meters affected by the outage as reported by the
            OMS within the utility. It is assumed this number will be updated repeatedly
            until the full outage is resolved.
            '''

        })
    '''
    The updated number of meters affected by the outage as reported by
    the OMS within the utility. It is assumed this number will be updated
    repeatedly until the full outage is resolved.
    '''

    originalCustomersServed: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the total number of customers that are served in the area (both outaged
            and not outaged).
            '''

        })
    '''
    the total number of customers that are served in the area (both outaged
    and not outaged).
    '''

    originalMetersAffected: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The original number of meters that were affected as reported by the OMS
            within the utility. That is, this is the total number of meters that were
            out at the beginning of the outage.
            '''

        })
    '''
    The original number of meters that were affected as reported by the
    OMS within the utility. That is, this is the total number of meters
    that were out at the beginning of the outage.
    '''

    utilityDisclaimer: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This contains an disclaimers the utility would like to place on the data
            provided to any stakeholder. This may be different for different stakeholders.
            This should possibly be an attribute under the Organization class but it
            is placed here for now.
            '''

        })
    '''
    This contains an disclaimers the utility would like to place on the
    data provided to any stakeholder. This may be different for different
    stakeholders. This should possibly be an attribute under the Organization
    class but it is placed here for now.
    '''

    outageKind: Optional[ OutageStatusKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Defines if the outage has been verified or is only estimated
            '''

        })
    '''
    Defines if the outage has been verified or is only estimated
    '''

    statusKind: Optional[ CrewStatusKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            defines the status of the crew as in dispatched or arrived, etc.
            '''

        })
    '''
    defines the status of the crew as in dispatched or arrived, etc.
    '''

    EstimatedRestorationTime: Optional[EstimatedRestorationTime] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EstimatedRestorationTime.Outage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The estimated time that the power will be restored after an outage
            '''

        })
    '''
    The estimated time that the power will be restored after an outage
    '''

    OutageIsolationEquipment: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.Outage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The equipment that isolates this outage
            '''

        })
    '''
    The equipment that isolates this outage
    '''

    Faults: list[Fault] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Fault.Outage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All faults involved in this outage.
            '''

        })
    '''
    All faults involved in this outage.
    '''

    Incident: list[Incident] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Incident.Outage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Incident reported in trouble call that results in this outage.
            '''

        })
    '''
    Incident reported in trouble call that results in this outage.
    '''

    PlannedSwitchActions: list[SwitchAction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchAction.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All switch actions to apply within the scope of this planned outage. Each
            such action groups switches to which the action is to apply in order to
            produce the desired network state considered as outage.
            '''

        })
    '''
    All switch actions to apply within the scope of this planned outage.
    Each such action groups switches to which the action is to apply in
    order to produce the desired network state considered as outage.
    '''

    SwitchingPlans: list[SwitchingPlan] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingPlan.Outage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All switching plans that lead to supply restoration due to this outage.
            Only one will be retained for execution.
            '''

        })
    '''
    All switching plans that lead to supply restoration due to this outage.
    Only one will be retained for execution.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PlannedOutage(Outage):
    '''
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reason for the planned outage.
            '''

        })
    '''
    The reason for the planned outage.
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The dispatch history associated with the planned outage
            '''

        })
    '''
    The dispatch history associated with the planned outage
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outage plan for executing a planned outage.
            '''

        })
    '''
    Outage plan for executing a planned outage.
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The dispatch history associated with the planned outage
            '''

        })
    '''
    The dispatch history associated with the planned outage
    '''

    UpdatedRatings: list[OperationalUpdatedRating] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalUpdatedRating.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All updated ratings for this planned equipment outage.
            '''

        })
    '''
    All updated ratings for this planned equipment outage.
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.PlannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Outage plan for executing a planned outage.
            '''

        })
    '''
    Outage plan for executing a planned outage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    cause: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cause of this outage. This is the cause that is used to present to
            external entities. That is, the cause is weather, equipment failure, etc.
            Note: At present, this is a free string text; it could be replaced with
            an enumeration in the future.
            '''

        })
    '''
    The cause of this outage. This is the cause that is used to present
    to external entities. That is, the cause is weather, equipment failure,
    etc.
    Note: At present, this is a free string text; it could be replaced
    with an enumeration in the future.
    '''

    reportedStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The earliest start time of the Outage - as reported by some system or individual
            '''

        })
    '''
    The earliest start time of the Outage - as reported by some system
    or individual
    '''

    causeKind: Optional[ OutageCauseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The possible cause that could be associated with this unplanned outage.
            '''

        })
    '''
    The possible cause that could be associated with this unplanned outage.
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.UnplannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The dispatch history associated with the unplanned outage
            '''

        })
    '''
    The dispatch history associated with the unplanned outage
    '''

    FieldDispatchHistory: Optional[FieldDispatchHistory] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldDispatchHistory.UnplannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The dispatch history associated with the unplanned outage
            '''

        })
    '''
    The dispatch history associated with the unplanned outage
    '''

    Incident: list[Incident] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Incident.UnplannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The incidents that are associated with the unplanned outage
            '''

        })
    '''
    The incidents that are associated with the unplanned outage
    '''

    TroubleOrder: list[TroubleOrder] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleOrder.UnplannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The trouble order that is associated to the unplanned outage.
            '''

        })
    '''
    The trouble order that is associated to the unplanned outage.
    '''

    TroubleTicket: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.UnplannedOutage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The ticket called in by the customer that describes the trouble
            '''

        })
    '''
    The ticket called in by the customer that describes the trouble
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OutageOrder(Document):
    '''
    Transmits an outage plan to a crew in order for the planned outage to be
    executed.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free-form comment associated with the outage order
            '''

        })
    '''
    Free-form comment associated with the outage order
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.OutageOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage plan that is defined to address the outage order.
            '''

        })
    '''
    The outage plan that is defined to address the outage order.
    '''

    Location: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.OutageOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Location of this outage order.
            '''

        })
    '''
    Location of this outage order.
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.OutageOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The outage plan that is defined to address the outage order.
            '''

        })
    '''
    The outage plan that is defined to address the outage order.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OutagePlan(Document):
    '''
    Document containing the definition of planned outages of equipment and/or
    usage points. It will reference switching plans that are used to execute
    the planned outage.
    '''

    approvedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time the outage plan was approved
            '''

        })
    '''
    The date and time the outage plan was approved
    '''

    cancelledDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and Time the planned outage was canceled.
            '''

        })
    '''
    Date and Time the planned outage was canceled.
    '''

    purpose: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Purpose of this outage plan, such as whether it is to replace equipment
            or perform maintenance or repairs or to reconfigure network topology.
            '''

        })
    '''
    Purpose of this outage plan, such as whether it is to replace equipment
    or perform maintenance or repairs or to reconfigure network topology.
    '''

    OutageOrder: Optional[OutageOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutageOrder.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage order that will address the outage plan.
            '''

        })
    '''
    The outage order that will address the outage plan.
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage resulting from the execution of the outage plan.
            '''

        })
    '''
    The outage resulting from the execution of the outage plan.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The swiching plan that is associated with the outage plan.
            '''

        })
    '''
    The swiching plan that is associated with the outage plan.
    '''

    Customer: list[Customer] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Customer.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The customers that are affected by this planned outage.
            '''

        })
    '''
    The customers that are affected by this planned outage.
    '''

    OutageOrder: Optional[OutageOrder] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutageOrder.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The outage order that will address the outage plan.
            '''

        })
    '''
    The outage order that will address the outage plan.
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The outage resulting from the execution of the outage plan.
            '''

        })
    '''
    The outage resulting from the execution of the outage plan.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.OutagePlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The swiching plan that is associated with the outage plan.
            '''

        })
    '''
    The swiching plan that is associated with the outage plan.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PassThroughBill(Document):
    '''
    Pass Through Bill is used for:
    1)Two sided charge transactions with or without ISO involvement
    2) Specific direct charges or payments that are calculated outside or provided
    directly to settlements
    3) Specific charge bill determinants that are externally supplied and used
    in charge calculations
    '''

    billedTo: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The company to which the PTB transaction is billed.
            '''

        })
    '''
    The company to which the PTB transaction is billed.
    '''

    billEnd: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bill period end date
            '''

        })
    '''
    Bill period end date
    '''

    billRunType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The settlement run type, for example: prelim, final, and rerun.
            '''

        })
    '''
    The settlement run type, for example: prelim, final, and rerun.
    '''

    billStart: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bill period start date
            '''

        })
    '''
    Bill period start date
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The effective date of the transaction
            '''

        })
    '''
    The effective date of the transaction
    '''

    isDisputed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Disputed transaction indicator
            '''

        })
    '''
    Disputed transaction indicator
    '''

    isProfiled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A flag indicating whether there is a profile data associated with the PTB.
            '''

        })
    '''
    A flag indicating whether there is a profile data associated with the
    PTB.
    '''

    paidTo: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The company to which the PTB transaction is paid.
            '''

        })
    '''
    The company to which the PTB transaction is paid.
    '''

    previousEnd: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The previous bill period end date
            '''

        })
    '''
    The previous bill period end date
    '''

    previousStart: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The previous bill period start date
            '''

        })
    '''
    The previous bill period start date
    '''

    productCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The product identifier for determining the charge type of the transaction.
            '''

        })
    '''
    The product identifier for determining the charge type of the transaction.
    '''

    providedBy: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The company by which the PTB transaction service is provided.
            '''

        })
    '''
    The company by which the PTB transaction service is provided.
    '''

    serviceEnd: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The end date of service provided, if periodic.
            '''

        })
    '''
    The end date of service provided, if periodic.
    '''

    serviceStart: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start date of service provided, if periodic.
            '''

        })
    '''
    The start date of service provided, if periodic.
    '''

    soldTo: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The company to which the PTB transaction is sold.
            '''

        })
    '''
    The company to which the PTB transaction is sold.
    '''

    timeZone: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The time zone code
            '''

        })
    '''
    The time zone code
    '''

    tradeDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The trade date
            '''

        })
    '''
    The trade date
    '''

    transactionDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date the transaction occurs.
            '''

        })
    '''
    The date the transaction occurs.
    '''

    transactionType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of transaction. For example, charge customer, bill customer, matching
            AR/AP, or bill determinant
            '''

        })
    '''
    The type of transaction. For example, charge customer, bill customer,
    matching AR/AP, or bill determinant
    '''

    adjustedAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The charge amount of the product/service.
            '''

        })
    '''
    The charge amount of the product/service.
    '''

    price: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The price of product/service.
            '''

        })
    '''
    The price of product/service.
    '''

    taxAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The tax on services taken.
            '''

        })
    '''
    The tax on services taken.
    '''

    MarketStatementLineItem: Optional[MarketStatementLineItem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketStatementLineItem.PassThroughBill',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfiles: list[ChargeProfile] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChargeProfile.PassTroughBill',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketStatementLineItem: Optional[MarketStatementLineItem] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketStatementLineItem.PassThroughBill',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PlannedOutageNotification(Document):
    '''
    This class will be used to generate call ahead lists for customers who
    will be affected by a planned outage.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.PlannedOutageNotification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching plan that contains the planned outage notification.
            '''

        })
    '''
    The switching plan that contains the planned outage notification.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.PlannedOutageNotification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching plan that contains the planned outage notification.
            '''

        })
    '''
    The switching plan that contains the planned outage notification.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerQualityPricing(Document):
    '''
    Pricing can be based on power quality.
    '''

    powerFactorMin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Threshold minimum power factor for this PricingStructure, specified in
            instances where a special charge is levied if the actual power factor for
            a Service falls below the value specified here.
            '''

        })
    '''
    Threshold minimum power factor for this PricingStructure, specified
    in instances where a special charge is levied if the actual power factor
    for a Service falls below the value specified here.
    '''

    valueUninterruptedServiceP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of uninterrupted service (Cost per active power).
            '''

        })
    '''
    Value of uninterrupted service (Cost per active power).
    '''

    voltImbalanceViolCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage imbalance violation cost (Cost per unit Voltage).
            '''

        })
    '''
    Voltage imbalance violation cost (Cost per unit Voltage).
    '''

    voltLimitViolCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage limit violation cost (Cost per unit Voltage).
            '''

        })
    '''
    Voltage limit violation cost (Cost per unit Voltage).
    '''

    emergencyHighVoltLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Emergency high voltage limit.
            '''

        })
    '''
    Emergency high voltage limit.
    '''

    emergencyLowVoltLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Emergency low voltage limit.
            '''

        })
    '''
    Emergency low voltage limit.
    '''

    normalHighVoltLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Normal high voltage limit.
            '''

        })
    '''
    Normal high voltage limit.
    '''

    normalLowVoltLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Normal low voltage limit.
            '''

        })
    '''
    Normal low voltage limit.
    '''

    valueUninterruptedServiceEnergy: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of uninterrupted service (Cost per energy).
            '''

        })
    '''
    Value of uninterrupted service (Cost per energy).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PricingStructure(Document):
    '''
    Grouping of pricing components and prices used in the creation of customer
    charges and the eligibility criteria under which these terms may be offered
    to a customer. The reasons for grouping include state, customer classification,
    site characteristics, classification (i.e. fee price structure, deposit
    price structure, electric service price structure, etc.) and accounting
    requirements.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique user-allocated key for this pricing structure, used by company representatives
            to identify the correct price structure for allocating to a customer. For
            rate schedules it is often prefixed by a state code.
            '''

        })
    '''
    Unique user-allocated key for this pricing structure, used by company
    representatives to identify the correct price structure for allocating
    to a customer. For rate schedules it is often prefixed by a state code.
    '''

    dailyCeilingUsage: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Absolute maximum valid non-demand usage quantity used in validating a customer's
            billed non-demand usage.
            '''

        })
    '''
    Absolute maximum valid non-demand usage quantity used in validating
    a customer's billed non-demand usage.
    '''

    dailyEstimatedUsage: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used in place of actual computed estimated average when history of usage
            is not available, and typically manually entered by customer accounting.
            '''

        })
    '''
    Used in place of actual computed estimated average when history of
    usage is not available, and typically manually entered by customer
    accounting.
    '''

    dailyFloorUsage: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Absolute minimum valid non-demand usage quantity used in validating a customer's
            billed non-demand usage.
            '''

        })
    '''
    Absolute minimum valid non-demand usage quantity used in validating
    a customer's billed non-demand usage.
    '''

    taxExemption: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if this pricing structure is not taxable.
            '''

        })
    '''
    True if this pricing structure is not taxable.
    '''

    revenueKind: Optional[ RevenueKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (accounting) Kind of revenue, often used to determine the grace period
            allowed, before collection actions are taken on a customer (grace periods
            vary between revenue classes).
            '''

        })
    '''
    (accounting) Kind of revenue, often used to determine the grace period
    allowed, before collection actions are taken on a customer (grace periods
    vary between revenue classes).
    '''

    ServiceCategory: Optional[ServiceCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ServiceCategory.PricingStructures',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service category to which this pricing structure applies.
            '''

        })
    '''
    Service category to which this pricing structure applies.
    '''

    Transactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.PricingStructure',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transactions applying this pricing structure.
            '''

        })
    '''
    All transactions applying this pricing structure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Procedure(Document):
    '''
    Documented procedure for various types of work or work tasks on assets.
    '''

    instruction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Textual description of this procedure.
            '''

        })
    '''
    Textual description of this procedure.
    '''

    sequenceNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sequence number in a sequence of procedures being performed.
            '''

        })
    '''
    Sequence number in a sequence of procedures being performed.
    '''

    kind: Optional[ ProcedureKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of procedure.
            '''

        })
    '''
    Kind of procedure.
    '''

    ProcedureDataSets: list[ProcedureDataSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProcedureDataSet.Procedure',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All data sets captured by this procedure.
            '''

        })
    '''
    All data sets captured by this procedure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProcedureDataSet(Document):
    '''
    A data set recorded each time a procedure is executed. Observed results
    are captured in associated measurement values and/or values for properties
    relevant to the type of procedure performed.
    '''

    completedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time procedure was completed.
            '''

        })
    '''
    Date and time procedure was completed.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ProcedureDataSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset to which this procedure data set applies.
            '''

        })
    '''
    Asset to which this procedure data set applies.
    '''

    Procedure: Optional[Procedure] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Procedure.ProcedureDataSets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Procedure capturing this data set.
            '''

        })
    '''
    Procedure capturing this data set.
    '''

    WorkTask: Optional[WorkTask] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkTask.ProcedureDataSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Work task that created this procedure data set.
            '''

        })
    '''
    Work task that created this procedure data set.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiagnosisDataSet(ProcedureDataSet):
    '''
    The result of a problem (typically an asset failure) diagnosis. Contains
    complete information like what might be received from a lab doing forensic
    analysis of a failed asset.
    '''

    effect: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effect of problem.
            '''

        })
    '''
    Effect of problem.
    '''

    failureMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Failuer mode, for example: Failure to Insulate; Failure to conduct; Failure
            to contain oil; Failure to provide ground plane; Other.
            '''

        })
    '''
    Failuer mode, for example: Failure to Insulate; Failure to conduct;
    Failure to contain oil; Failure to provide ground plane; Other.
    '''

    finalCause: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cause of problem determined during diagnosis.
            '''

        })
    '''
    Cause of problem determined during diagnosis.
    '''

    finalCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code for diagnosed probem type.
            '''

        })
    '''
    Code for diagnosed probem type.
    '''

    finalOrigin: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Origin of problem determined during diagnosis.
            '''

        })
    '''
    Origin of problem determined during diagnosis.
    '''

    finalRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks pertaining to findings during problem diagnosis.
            '''

        })
    '''
    Remarks pertaining to findings during problem diagnosis.
    '''

    preliminaryCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code for problem type determined during preliminary assessment.
            '''

        })
    '''
    Code for problem type determined during preliminary assessment.
    '''

    preliminaryDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time preliminary assessment of problem was performed.
            '''

        })
    '''
    Date and time preliminary assessment of problem was performed.
    '''

    preliminaryRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks pertaining to preliminary assessment of problem.
            '''

        })
    '''
    Remarks pertaining to preliminary assessment of problem.
    '''

    rootCause: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Root cause of problem determined during diagnosis.
            '''

        })
    '''
    Root cause of problem determined during diagnosis.
    '''

    rootOrigin: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Root origin of problem determined during diagnosis.
            '''

        })
    '''
    Root origin of problem determined during diagnosis.
    '''

    rootRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks pertaining to root cause findings during problem diagnosis.
            '''

        })
    '''
    Remarks pertaining to root cause findings during problem diagnosis.
    '''

    phaseCode: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase(s) diagnosed.
            '''

        })
    '''
    Phase(s) diagnosed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 InspectionDataSet(ProcedureDataSet):
    '''
    Documents the result of one inspection, for a given attribute of an asset.
    '''

    locationCondition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the conditions of the location where the asset resides.
            '''

        })
    '''
    Description of the conditions of the location where the asset resides.
    '''

    AccordingToSchedules: list[ScheduledEventData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledEventData.InspectionDataSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LabTestDataSet(ProcedureDataSet):
    '''
    Results of testing done by a lab.
    '''

    conclusion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Conclusion drawn from test results.
            '''

        })
    '''
    Conclusion drawn from test results.
    '''

    conclusionConfidence: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of confidence in conclusion.
            '''

        })
    '''
    Description of confidence in conclusion.
    '''

    testEquipmentID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identity of lab equipment used to perform test.
            '''

        })
    '''
    Identity of lab equipment used to perform test.
    '''

    reasonForTest: Optional[ TestReason ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for performing test.
            '''

        })
    '''
    Reason for performing test.
    '''

    AssetTestLab: Optional[AssetTestLab] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetTestLab.LabTestDataSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Test lab which produced this set of lab test results.
            '''

        })
    '''
    Test lab which produced this set of lab test results.
    '''

    Specimen: Optional[Specimen] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specimen.LabTestDataSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specimen on which lab testing done in determining results.
            '''

        })
    '''
    Specimen on which lab testing done in determining results.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaintenanceDataSet(ProcedureDataSet):
    '''
    The result of a maintenance activity, a type of Procedure, for a given
    attribute of an asset.
    '''

    conditionAfter: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Condition of asset just following maintenance procedure.
            '''

        })
    '''
    Condition of asset just following maintenance procedure.
    '''

    conditionBefore: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the condition of the asset just prior to maintenance being
            performed.
            '''

        })
    '''
    Description of the condition of the asset just prior to maintenance
    being performed.
    '''

    maintCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code for the type of maintenance performed.
            '''

        })
    '''
    Code for the type of maintenance performed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TestDataSet(ProcedureDataSet):
    '''
    Test results, usually obtained by a lab or other independent organisation.
    '''

    conclusion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Conclusion drawn from test results.
            '''

        })
    '''
    Conclusion drawn from test results.
    '''

    specimenID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifier of specimen used in inspection or test.
            '''

        })
    '''
    Identifier of specimen used in inspection or test.
    '''

    specimenToLabDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the specimen was received by the lab.
            '''

        })
    '''
    Date and time the specimen was received by the lab.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SafetyDocument(Document):
    '''
    Document restricting or authorising works on electrical equipment (for
    example a permit to work, sanction for test, limitation of access, or certificate
    of isolation), defined based upon organisational practices.
    '''

    issuedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this safety document has been issued.
            '''

        })
    '''
    Date and time this safety document has been issued.
    '''

    releasedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this safety document has been released.
            '''

        })
    '''
    Date and time this safety document has been released.
    '''

    IssuedBySupervisor: Optional[OperationsSafetySupervisor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationsSafetySupervisor.IssuedSafetyDocuments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supervisor that issued this safety document.
            '''

        })
    '''
    Supervisor that issued this safety document.
    '''

    IssuedToSupervisor: Optional[FieldSafetySupervisor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldSafetySupervisor.IssuedSafetyDocuments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supervisor to whom this safety document is issued.
            '''

        })
    '''
    Supervisor to whom this safety document is issued.
    '''

    ReleasedBySupervisor: Optional[FieldSafetySupervisor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FieldSafetySupervisor.ReleasedSafetyDocuments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supervisor that released this safety document.
            '''

        })
    '''
    Supervisor that released this safety document.
    '''

    ReleasedToSupervisor: Optional[OperationsSafetySupervisor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationsSafetySupervisor.ReleasedSafetyDocuments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supervisor to which this safety document is released.
            '''

        })
    '''
    Supervisor to which this safety document is released.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.SafetyDocuments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching plan to which this safety document applies.
            '''

        })
    '''
    Switching plan to which this safety document applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ClearanceDocument(SafetyDocument):
    '''
    Safety document used to authorise work on conducting equipment in the field.
    Tagged equipment is not allowed to be operated.
    '''

    mustBeDeenergised: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the equipment must be deenergised.
            '''

        })
    '''
    If true, the equipment must be deenergised.
    '''

    mustBeGrounded: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the equipment must be grounded.
            '''

        })
    '''
    If true, the equipment must be grounded.
    '''

    ClearanceAction: Optional[ClearanceAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClearanceAction.Clearance',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Clearance action associated with this clearance.
            '''

        })
    '''
    Clearance action associated with this clearance.
    '''

    ClearanceAction: Optional[ClearanceAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClearanceAction.Clearance',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Clearance action associated with this clearance.
            '''

        })
    '''
    Clearance action associated with this clearance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceGuarantee(Document):
    '''
    A service guarantee, often imposed by a regulator, defines conditions that,
    if not satisfied, will result in the utility making a monetary payment
    to the customer. Note that guarantee's identifier is in the 'name' attribute
    and the status of the guarantee is in the 'Status.status' attribute.
    Example service requirements include:
    1) If power is not restored within 24 hours, customers can claim $50 for
    residential customers or $100 for commercial and industrial customers.
    In addition for each extra period of 12 hours the customer's supply has
    not been activated, the customer can claim $25.
    2) If a customer has a question about their electricity bill, the utility
    will investigate and respond to the inquiry within 15 working days. If
    utility fails to meet its guarantee, utility will automatically pay the
    customer $50.
    '''

    automaticPay: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if utility must autmatically pay the specified amount whenever the
            condition is not satisified, otherwise customer must make a claim to receive
            payment.
            '''

        })
    '''
    True if utility must autmatically pay the specified amount whenever
    the condition is not satisified, otherwise customer must make a claim
    to receive payment.
    '''

    serviceRequirement: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Explanation of the requirement and conditions for satisfying it.
            '''

        })
    '''
    Explanation of the requirement and conditions for satisfying it.
    '''

    payAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount to be paid by the service provider to the customer for each violation
            of the 'serviceRequirement'.
            '''

        })
    '''
    Amount to be paid by the service provider to the customer for each
    violation of the 'serviceRequirement'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Settlement(Document):
    '''
    Specifies a settlement run.
    '''

    tradeDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The trade date on which the settlement is run.
            '''

        })
    '''
    The trade date on which the settlement is run.
    '''

    EnergyMarket: Optional[EnergyMarket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyMarket.Settlements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @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://iec.ch/TC57/CIM100#',
        '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 Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Level of skill for a Craft.
            '''

        })
    '''
    Level of skill for a Craft.
    '''

    ErpPerson: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldPerson.Skills',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @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.
    '''

    AssetPropertyCurves: list[AssetPropertyCurve] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetPropertyCurve.Specification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Mediums: list[Medium] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Medium.Specification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReliabilityInfos: list[ReliabilityInfo] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReliabilityInfo.Specification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AssetProperites: list[UserAttribute] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UserAttribute.PropertySpecification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class StandardIndustryCode(Document):
    '''
    The Standard Industrial Classification (SIC) are the codes that identify
    the type of products/service an industry is involved in, and used for statutory
    reporting purposes. For example, in the USA these codes are located by
    the federal government, and then published in a book entitled "The Standard
    Industrial Classification Manual". The codes are arranged in a hierarchical
    structure.
    Note that Residential Service Agreements are not classified according to
    the SIC codes.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Standard alphanumeric code assigned to a particular product/service within
            an industry.
            '''

        })
    '''
    Standard alphanumeric code assigned to a particular product/service
    within an industry.
    '''

    CustomerAgreements: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.StandardIndustryCode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @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.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free-form comment associated with the switching order.
            '''

        })
    '''
    Free-form comment associated with the switching order.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.SwitchingOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching plan that is defined in the switching order.
            '''

        })
    '''
    The switching plan that is defined in the switching order.
    '''

    Location: list[Location] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Location.SwitchingOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Location of this switching order.
            '''

        })
    '''
    Location of this switching order.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.SwitchingOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching plan that is defined in the switching order.
            '''

        })
    '''
    The switching plan that is defined in the switching order.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingPlan(Document):
    '''
    A sequence of grouped or atomic steps intended to:
    - de-energise equipment or part of the network for safe work, and/or
    - bring back in service previously de-energised equipment or part of the
    network.
    '''

    approvedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time the switching plan was approved
            '''

        })
    '''
    The date and time the switching plan was approved
    '''

    cancelledDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and Time the switching plan was cancelled.
            '''

        })
    '''
    Date and Time the switching plan was cancelled.
    '''

    purpose: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Purpose of this plan, such as whether it is to move the state from normal
            to some abnormal condition, or to restore the normal state after an abnormal
            condition, or to perform some kind of optimisation such as correction of
            overload, voltage control, etc.
            '''

        })
    '''
    Purpose of this plan, such as whether it is to move the state from
    normal to some abnormal condition, or to restore the normal state after
    an abnormal condition, or to perform some kind of optimisation such
    as correction of overload, voltage control, etc.
    '''

    rank: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ranking in comparison to other switching plans.
            '''

        })
    '''
    Ranking in comparison to other switching plans.
    '''

    Outage: Optional[Outage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Outage.SwitchingPlans',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outage that will be activated or eliminated when this switching plan gets
            executed.
            '''

        })
    '''
    Outage that will be activated or eliminated when this switching plan
    gets executed.
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage plan for which the switching plan is defined.
            '''

        })
    '''
    The outage plan for which the switching plan is defined.
    '''

    PlannedOutageNotification: Optional[PlannedOutageNotification] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutageNotification.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The planned outage notification that is associated to the switching plan.
            '''

        })
    '''
    The planned outage notification that is associated to the switching
    plan.
    '''

    SwitchingOrder: Optional[SwitchingOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingOrder.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching order that specified the switching plan to be implemented.
            '''

        })
    '''
    The switching order that specified the switching plan to be implemented.
    '''

    SwitchingPlanRequest: Optional[SwitchingPlanRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlanRequest.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The request for the specified switching plan.
            '''

        })
    '''
    The request for the specified switching plan.
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The outage plan for which the switching plan is defined.
            '''

        })
    '''
    The outage plan for which the switching plan is defined.
    '''

    PlannedOutageNotification: Optional[PlannedOutageNotification] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutageNotification.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The planned outage notification that is associated to the switching plan.
            '''

        })
    '''
    The planned outage notification that is associated to the switching
    plan.
    '''

    SafetyDocuments: list[SafetyDocument] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SafetyDocument.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All safety documents applicable to this swtiching plan.
            '''

        })
    '''
    All safety documents applicable to this swtiching plan.
    '''

    SwitchingAction: list[SwitchingAction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingAction.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching actions that are associated with the switching plan.
            '''

        })
    '''
    The switching actions that are associated with the switching plan.
    '''

    SwitchingOrder: Optional[SwitchingOrder] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingOrder.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching order that specified the switching plan to be implemented.
            '''

        })
    '''
    The switching order that specified the switching plan to be implemented.
    '''

    SwitchingStepGroups: list[SwitchingStepGroup] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingStepGroup.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All groups of switching steps within this switching plan.
            '''

        })
    '''
    All groups of switching steps within this switching plan.
    '''

    WorkTasks: list[WorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTask.SwitchingPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All work tasks to execute this switching plan.
            '''

        })
    '''
    All work tasks to execute this switching plan.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingPlanRequest(Document):
    '''
    A document used to request that a switching plan be created for a particular
    purpose.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free-form text to describe the request
            '''

        })
    '''
    Free-form text to describe the request
    '''

    equipmentToBeIsolated: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            free-form list of the equipment to be isolated by the switching
            '''

        })
    '''
    free-form list of the equipment to be isolated by the switching
    '''

    groundingPoints: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            free-form list of equipment to be grounded or other actions to be taken
            in order to accomplish the required grounding.
            '''

        })
    '''
    free-form list of equipment to be grounded or other actions to be taken
    in order to accomplish the required grounding.
    '''

    isolationArea: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            free-form description of the area to be isolated by the switching
            '''

        })
    '''
    free-form description of the area to be isolated by the switching
    '''

    isolationPoints: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            free-form list of equipment to be operated or other actions to be taken
            in order to accomplish the required isolation.
            '''

        })
    '''
    free-form list of equipment to be operated or other actions to be taken
    in order to accomplish the required isolation.
    '''

    purpose: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The purpose of this switching plan request.
            '''

        })
    '''
    The purpose of this switching plan request.
    '''

    switchingRequestDetails: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The details of this switching plan request.
            '''

        })
    '''
    The details of this switching plan request.
    '''

    RequestingOrganization: Optional[Organisation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Organisation.SwitchingPlanRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The organization that requested the switching plan.
            '''

        })
    '''
    The organization that requested the switching plan.
    '''

    SwitchingPlan: list[SwitchingPlan] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingPlan.SwitchingPlanRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching plan for the request.
            '''

        })
    '''
    The switching plan for the request.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tariff(Document):
    '''
    Document, approved by the responsible regulatory agency, listing the terms
    and conditions, including a schedule of prices, under which utility services
    will be provided. It has a unique number within the state or province.
    For rate schedules it is frequently allocated by the affiliated Public
    utilities commission (PUC).
    '''

    endDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if tariff became inactive) Date tariff was terminated.
            '''

        })
    '''
    (if tariff became inactive) Date tariff was terminated.
    '''

    startDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date tariff was activated.
            '''

        })
    '''
    Date tariff was activated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TariffProfile(Document):
    '''
    A schedule of charges; structure associated with Tariff that allows the
    definition of complex tarif structures such as step and time of use when
    used in conjunction with TimeTariffInterval and Charge. Inherited 'status.value'
    is defined in the context of the utility's business rules, for example:
    active, inactive, etc.
    '''

    tariffCycle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The frequency at which the tariff charge schedule is repeated. Examples
            are: once off on a specified date and time; hourly; daily; weekly; monthly;
            3-monthly; 6-monthly; 12-monthly; etc. At the end of each cycle, the business
            rules are reset to start from the beginning again.
            '''

        })
    '''
    The frequency at which the tariff charge schedule is repeated. Examples
    are: once off on a specified date and time; hourly; daily; weekly;
    monthly; 3-monthly; 6-monthly; 12-monthly; etc. At the end of each
    cycle, the business rules are reset to start from the beginning again.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @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).
    '''

    disabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.).
    '''

    offset: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.TimeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule for which the time schedule applies
            '''

        })
    '''
    Meter read schedule for which the time schedule applies
    '''

    TimePoints: list[TimePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TimePoint.TimeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkTimeSchedule(TimeSchedule):
    '''
    Time schedule specific to work.
    '''

    kind: Optional[ WorkTimeScheduleKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this work schedule.
            '''

        })
    '''
    Kind of this work schedule.
    '''

    BaseWork: Optional[BaseWork] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseWork.TimeSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time schedule for this work or work task.
            '''

        })
    '''
    Time schedule for this work or work task.
    '''

    ServiceRequest: Optional[ServiceRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceRequest.WorkTimeSchedule',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The service request for which the work time schedule exists
            '''

        })
    '''
    The service request for which the work time schedule exists
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @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.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free-form comment associated with the trouble order.
            '''

        })
    '''
    Free-form comment associated with the trouble order.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The incident that may be associated with the trouble order.
            '''

        })
    '''
    The incident that may be associated with the trouble order.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The location of this trouble order
            '''

        })
    '''
    The location of this trouble order
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unplanned outage that is associated to the Trouble Order.
            '''

        })
    '''
    The unplanned outage that is associated to the Trouble Order.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The incident that may be associated with the trouble order.
            '''

        })
    '''
    The incident that may be associated with the trouble order.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The location of this trouble order
            '''

        })
    '''
    The location of this trouble order
    '''

    TroubleTicket: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The ticket called in by the customer that describes the trouble
            '''

        })
    '''
    The ticket called in by the customer that describes the trouble
    '''

    WorkTask: list[WorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTask.TroubleOrder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The work tasks that are associated with this trouble order.
            '''

        })
    '''
    The work tasks that are associated with this trouble order.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TroubleTicket(Document):
    '''
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free-form comment associated with the trouble call for example, "customer
            reported a large flash", etc.
            '''

        })
    '''
    Free-form comment associated with the trouble call for example, "customer
    reported a large flash", etc.
    '''

    dateTimeOfReport: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the trouble has been reported.
            '''

        })
    '''
    Date and time the trouble has been reported.
    '''

    firstResponderStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether the first responder such as police, fire department etc.has
            been notified and whether they are on site or en route.
            '''

        })
    '''
    Indicates whether the first responder such as police, fire department
    etc.has been notified and whether they are on site or en route.
    '''

    multiplePremises: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set to true if the outage report indicated that other neighbors are also
            out of power.
            '''

        })
    '''
    Set to true if the outage report indicated that other neighbors are
    also out of power.
    '''

    resolvedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this trouble ticket has been resolved.
            '''

        })
    '''
    Date and time this trouble ticket has been resolved.
    '''

    troubleCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trouble code (e.g., power down, flickering lights, partial power, etc).
            '''

        })
    '''
    Trouble code (e.g., power down, flickering lights, partial power, etc).
    '''

    reportingKind: Optional[ TroubleReportingKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates how the customer reported trouble.
            '''

        })
    '''
    Indicates how the customer reported trouble.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.TroubleTickets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer for whom this trouble ticket is relevant.
            '''

        })
    '''
    Customer for whom this trouble ticket is relevant.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.TroubleTickets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Incident reported in this trouble ticket
            '''

        })
    '''
    Incident reported in this trouble ticket
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ServiceLocation: Optional[ServiceLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ServiceLocation.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The service location to which one or more trouble tickets are associated.
            '''

        })
    '''
    The service location to which one or more trouble tickets are associated.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The order to which one or more trouble tickets are associated.
            '''

        })
    '''
    The order to which one or more trouble tickets are associated.
    '''

    TroubleReporter: Optional[TroubleReporter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleReporter.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TroubleSymptoms: Optional[TroubleSymptoms] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleSymptoms.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unplanned outage to which one or more trouble tickets are associated.
            '''

        })
    '''
    The unplanned outage to which one or more trouble tickets are associated.
    '''

    Hazard: list[Hazard] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Hazard.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IncidentHazard: list[IncidentHazard] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IncidentHazard.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All hazards reported with this trouble ticket.
            '''

        })
    '''
    All hazards reported with this trouble ticket.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TroubleSymptoms: Optional[TroubleSymptoms] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleSymptoms.TroubleTicket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class WorkBillingInfo(Document):
    '''
    Billing information for work performed for the customer. The history of
    Work Billing Info, Invoices, and Payments is to be maintained in associated
    ActivityRecords.
    '''

    discount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discount from standard price.
            '''

        })
    '''
    Discount from standard price.
    '''

    dueDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time by which payment for bill is expected from client.
            '''

        })
    '''
    Date and time by which payment for bill is expected from client.
    '''

    issueDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time bill was issued to client.
            '''

        })
    '''
    Date and time bill was issued to client.
    '''

    receivedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date payment was received from client.
            '''

        })
    '''
    Date payment was received from client.
    '''

    costEstimate: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated cost for work.
            '''

        })
    '''
    Estimated cost for work.
    '''

    deposit: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of price on deposit.
            '''

        })
    '''
    Amount of price on deposit.
    '''

    workPrice: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount of bill.
            '''

        })
    '''
    Amount of bill.
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.WorkBillingInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Works: list[Work] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Work.WorkBillingInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkDocument(Document):
    '''
    Shadow class for Document, to isolate subclassing from this package. If
    any subclass gets normative and needs inheritance, it will inherit directly
    from Document.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AccessPermit(WorkDocument):
    '''
    A permit is sometimes needed to provide legal access to land or equipment.
    For example, local authority permission for road works.
    '''

    applicationNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permit application number that is used by municipality, state, province,
            etc.
            '''

        })
    '''
    Permit application number that is used by municipality, state, province,
    etc.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date that permit became official.
            '''

        })
    '''
    Date that permit became official.
    '''

    expirationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permit expiration date.
            '''

        })
    '''
    Permit expiration date.
    '''

    permitID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permit identifier.
            '''

        })
    '''
    Permit identifier.
    '''

    payment: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total cost of permit.
            '''

        })
    '''
    Total cost of permit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Assignment(WorkDocument):
    '''
    An assignment is given to an ErpPerson, Crew, Organisation, Equipment Item,
    Tool, etc. and may be used to perform Work, WorkTasks, Procedures, etc.
    TimeSchedules may be set up directly for Assignments or indirectly via
    the associated WorkTask. Note that these associations are all inherited
    through the recursive relationship on Document.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class BusinessCase(WorkDocument):
    '''
    Business justification for capital expenditures, usually addressing operations
    and maintenance costs as well.
    '''

    corporateCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A codified representation of the business case (i.e., codes for highway
            relocation, replace substation transformers, etc.).
            '''

        })
    '''
    A codified representation of the business case (i.e., codes for highway
    relocation, replace substation transformers, etc.).
    '''

    Projects: list[Project] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Project.BusinessCase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Works: list[Work] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Work.BusinessCase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CompatibleUnit(WorkDocument):
    '''
    A pre-planned job model containing labor, material, and accounting requirements
    for standardized job planning.
    '''

    quantity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The quantity, unit of measure, and multiplier at the CU level that applies
            to the materials.
            '''

        })
    '''
    The quantity, unit of measure, and multiplier at the CU level that
    applies to the materials.
    '''

    estCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated total cost for perfoming CU.
            '''

        })
    '''
    Estimated total cost for perfoming CU.
    '''

    CostType: Optional[CostType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CostType.CompatibleUnits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CUAllowableAction: Optional[CUAllowableAction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CUAllowableAction.CompatibleUnits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CUGroup: Optional[CUGroup] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CUGroup.CompatibleUnits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GenericAssetModel: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.CompatibleUnits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PropertyUnit: Optional[PropertyUnit] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PropertyUnit.CompatibleUnits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Design(WorkDocument):
    '''
    A design for consideration by customers, potential customers, or internal
    work.
    Note that the Version of design is the revision attribute that is inherited
    from Document.
    '''

    costEstimate: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated cost (not price) of design.
            '''

        })
    '''
    Estimated cost (not price) of design.
    '''

    kind: Optional[ DesignKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this design.
            '''

        })
    '''
    Kind of this design.
    '''

    price: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price to customer for implementing design.
            '''

        })
    '''
    Price to customer for implementing design.
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.Design',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Work: Optional[Work] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Work.Designs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpBOMs: list[ErpBOM] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpBOM.Design',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.Design',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTasks: list[OldWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldWorkTask.Design',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetails: list[WorkCostDetail] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkCostDetail.Design',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InfoQuestion(WorkDocument):
    '''
    Questions and answers associated with a type of document for purposes of
    clarification. Questions may be predefined or ad hoc.
    '''

    answer: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Answer to question.
            '''

        })
    '''
    Answer to question.
    '''

    answerDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time the quesiton was answered.
            '''

        })
    '''
    The date and time the quesiton was answered.
    '''

    answerRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks to qualify the answer.
            '''

        })
    '''
    Remarks to qualify the answer.
    '''

    questionCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The question code. If blank, refer to questionText.
            '''

        })
    '''
    The question code. If blank, refer to questionText.
    '''

    questionRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks to qualify the question in this situation.
            '''

        })
    '''
    Remarks to qualify the question in this situation.
    '''

    questionText: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For non-coded questions, the question is provided here.
            '''

        })
    '''
    For non-coded questions, the question is provided here.
    '''

    questionType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the question.
            '''

        })
    '''
    The type of the question.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NonStandardItem(WorkDocument):
    '''
    This document provides information for non-standard items like customer
    contributions (e.g., customer digs trench), vouchers (e.g., credit), and
    contractor bids.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The projected cost for this item.
            '''

        })
    '''
    The projected cost for this item.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class OneCallRequest(WorkDocument):
    '''
    A request for other utilities to mark their underground facilities prior
    to commencement of construction and/or maintenance.
    '''

    explosivesUsed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if explosives have been or are planned to be used.
            '''

        })
    '''
    True if explosives have been or are planned to be used.
    '''

    markedIndicator: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if work location has been marked, for example for a dig area.
            '''

        })
    '''
    True if work location has been marked, for example for a dig area.
    '''

    markingInstruction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Instructions for marking a dig area, if applicable.
            '''

        })
    '''
    Instructions for marking a dig area, if applicable.
    '''

    WorkLocations: list[WorkLocation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkLocation.OneCallRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Project(WorkDocument):
    '''
    A collection of related work. For construction projects and maintenance
    projects, multiple phases may be performed.
    '''

    budget: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overall project budget.
            '''

        })
    '''
    Overall project budget.
    '''

    BusinessCase: Optional[BusinessCase] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BusinessCase.Projects',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpProjectAccounting: Optional[ErpProjectAccounting] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpProjectAccounting.Projects',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ParentProject: Optional[Project] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Project.SubProjects',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubProjects: list[Project] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Project.ParentProject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Works: list[Work] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Work.Project',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Regulation(WorkDocument):
    '''
    Special requirements and/or regulations may pertain to certain types of
    assets or work. For example, fire protection and scaffolding.
    '''

    referenceNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            External reference to regulation, if applicable.
            '''

        })
    '''
    External reference to regulation, if applicable.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TypeMaterial(WorkDocument):
    '''
    Documentation for a generic material item that may be used for design,
    work and other purposes. Any number of MaterialItems manufactured by various
    vendors may be used to perform this TypeMaterial.
    Note that class analagous to "AssetModel" is not used for material items.
    This is because in some cases, for example, a utility sets up a Master
    material record for a 3 inch long half inch diameter steel bolt and they
    do not necessarily care what specific supplier is providing the material
    item. As different vendors are used to supply the part, the Stock Code
    of the material item can stay the same. In other cases, each time the vendor
    changes, a new stock code is set up so they can track material used by
    vendor. Therefore a Material Item "Model" is not typically needed.
    '''

    costType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of cost to which this Material Item belongs.
            '''

        })
    '''
    The type of cost to which this Material Item belongs.
    '''

    quantity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value, unit of measure, and multiplier for the quantity.
            '''

        })
    '''
    The value, unit of measure, and multiplier for the quantity.
    '''

    stockItem: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if item is a stock item (default).
            '''

        })
    '''
    True if item is a stock item (default).
    '''

    estUnitCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The estimated unit cost of this type of material, either for a unit cost
            or cost per unit length. Cost is for material or asset only and does not
            include labor to install/construct or configure it.
            '''

        })
    '''
    The estimated unit cost of this type of material, either for a unit
    cost or cost per unit length. Cost is for material or asset only and
    does not include labor to install/construct or configure it.
    '''

    CUMaterialItems: list[CUMaterialItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CUMaterialItem.TypeMaterial',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpIssueInventories: list[ErpIssueInventory] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpIssueInventory.TypeMaterial',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReqLineItems: list[ErpReqLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpReqLineItem.TypeMaterial',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MaterialItems: list[MaterialItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MaterialItem.TypeMaterial',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class WorkCostDetail(WorkDocument):
    '''
    A collection of all of the individual cost items collected from multiple
    sources.
    '''

    isDebit: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if 'amount' is a debit, false if it is a credit.
            '''

        })
    '''
    True if 'amount' is a debit, false if it is a credit.
    '''

    transactionDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time that 'amount' is posted to the work.
            '''

        })
    '''
    Date and time that 'amount' is posted to the work.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount in designated currency for work, either a total or an individual
            element. As defined in the attribute "type," multiple instances are applicable
            to each work for: planned cost, actual cost, authorized cost, budgeted
            cost, forecasted cost, other.
            '''

        })
    '''
    Amount in designated currency for work, either a total or an individual
    element. As defined in the attribute "type," multiple instances are
    applicable to each work for: planned cost, actual cost, authorized
    cost, budgeted cost, forecasted cost, other.
    '''

    CostType: Optional[CostType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CostType.WorkCostDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Design: Optional[Design] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Design.WorkCostDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpProjectAccounting: Optional[ErpProjectAccounting] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpProjectAccounting.WorkCostDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OverheadCost: Optional[OverheadCost] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OverheadCost.WorkCostDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostSummary: Optional[WorkCostSummary] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCostSummary.WorkCostDetail',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTask: Optional[OldWorkTask] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldWorkTask.WorkCostDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContractorItems: list[ContractorItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractorItem.WorkCostDetail',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LaborItems: list[LaborItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LaborItem.WorkCostDetail',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MiscCostItems: list[MiscCostItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MiscCostItem.WorkCostDetail',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostSummary: Optional[WorkCostSummary] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCostSummary.WorkCostDetail',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class WorkCostSummary(WorkDocument):
    '''
    A roll up by cost type for the entire cost of a work order. For example,
    total labor.
    '''

    WorkCostDetail: Optional[WorkCostDetail] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCostDetail.WorkCostSummary',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetail: Optional[WorkCostDetail] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCostDetail.WorkCostSummary',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkOrder(Document):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaintenanceOrder(WorkOrder):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceOrder(WorkOrder):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @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
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceRequest(WorkRequest):
    '''
    '''

    appointmentRequested: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    serviceSize: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The size or quantity requested by the customer; for example, 200 AMPS for
            electrical service, 50 MBits per second for internet service, etc.
            '''

        })
    '''
    The size or quantity requested by the customer; for example, 200 AMPS
    for electrical service, 50 MBits per second for internet service, etc.
    '''

    kind: Optional[ ServiceRequestKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    serviceKind: Optional[ ServiceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.ServiceRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The customer making the service request
            '''

        })
    '''
    The customer making the service request
    '''

    ServiceLocation: Optional[ServiceLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceLocation.ServiceRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The service location for the serivce request
            '''

        })
    '''
    The service location for the serivce request
    '''

    WorkTimeSchedule: list[WorkTimeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkTimeSchedule.ServiceRequest',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All work time schedules associated with a service request
            '''

        })
    '''
    All work time schedules associated with a service request
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Domain(IdentifiedObject):
    '''
    An area of activity defined within the energy market.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DynamicsFunctionBlock(IdentifiedObject):
    '''
    Abstract parent class for all Dynamics function blocks.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Function block used indicator.
            true = use of function block is enabled
            false = use of function block is disabled.
            '''

        })
    '''
    Function block used indicator.
    true = use of function block is enabled
    false = use of function block is disabled.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StandardModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CrossCompoundTurbineGovernorDynamics(DynamicsFunctionBlock):
    '''
    Turbine-governor cross-compound function block whose behaviour is described
    by reference to a standard model <font color="#0f0f0f">or by definition
    of a user-defined model.</font>
    '''

    HighPressureSynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.CrossCompoundTurbineGovernorDyanmics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-pressure synchronous machine with which this cross-compound turbine
            governor is associated.
            '''

        })
    '''
    High-pressure synchronous machine with which this cross-compound turbine
    governor is associated.
    '''

    LowPressureSynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.CrossCompoundTurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low-pressure synchronous machine with which this cross-compound turbine
            governor is associated.
            '''

        })
    '''
    Low-pressure synchronous machine with which this cross-compound turbine
    governor is associated.
    '''

    HighPressureSynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.CrossCompoundTurbineGovernorDyanmics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            High-pressure synchronous machine with which this cross-compound turbine
            governor is associated.
            '''

        })
    '''
    High-pressure synchronous machine with which this cross-compound turbine
    governor is associated.
    '''

    LowPressureSynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.CrossCompoundTurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Low-pressure synchronous machine with which this cross-compound turbine
            governor is associated.
            '''

        })
    '''
    Low-pressure synchronous machine with which this cross-compound turbine
    governor is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamCC(CrossCompoundTurbineGovernorDynamics):
    '''
    Cross compound turbine governor. Unlike tandem compound units, cross compound
    units are not on the same shaft.
    '''

    dhp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP damping factor (<i>Dhp</i>). Typical value = 0.
            '''

        })
    '''
    HP damping factor (<i>Dhp</i>). Typical value = 0.
    '''

    dlp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP damping factor (<i>Dlp</i>). Typical value = 0.
            '''

        })
    '''
    LP damping factor (<i>Dlp</i>). Typical value = 0.
    '''

    fhp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP power ahead of reheater (<i>Fhp</i>). Typical value = 0,3.
            '''

        })
    '''
    Fraction of HP power ahead of reheater (<i>Fhp</i>). Typical value
    = 0,3.
    '''

    flp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP power ahead of reheater (<i>Flp</i>). Typical value = 0,7.
            '''

        })
    '''
    Fraction of LP power ahead of reheater (<i>Flp</i>). Typical value
    = 0,7.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmaxhp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum HP value position (<i>Pmaxhp</i>). Typical value = 1.
            '''

        })
    '''
    Maximum HP value position (<i>Pmaxhp</i>). Typical value = 1.
    '''

    pmaxlp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum LP value position (<i>Pmaxlp</i>). Typical value = 1.
            '''

        })
    '''
    Maximum LP value position (<i>Pmaxlp</i>). Typical value = 1.
    '''

    rhp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP governor droop (<i>Rhp</i>) (&gt; 0). Typical value = 0,05.
            '''

        })
    '''
    HP governor droop (<i>Rhp</i>) (&gt; 0). Typical value = 0,05.
    '''

    rlp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP governor droop (<i>Rlp</i>) (&gt; 0). Typical value = 0,05.
            '''

        })
    '''
    LP governor droop (<i>Rlp</i>) (&gt; 0). Typical value = 0,05.
    '''

    t1hp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP governor time constant (<i>T1hp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    HP governor time constant (<i>T1hp</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    t1lp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP governor time constant (<i>T1lp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    LP governor time constant (<i>T1lp</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    t3hp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP turbine time constant (<i>T3hp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    HP turbine time constant (<i>T3hp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t3lp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP turbine time constant (<i>T3lp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    LP turbine time constant (<i>T3lp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t4hp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP turbine time constant (<i>T4hp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    HP turbine time constant (<i>T4hp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t4lp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP turbine time constant (<i>T4lp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    LP turbine time constant (<i>T4lp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t5hp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            HP reheater time constant (<i>T5hp</i>) (&gt;= 0). Typical value = 10.
            '''

        })
    '''
    HP reheater time constant (<i>T5hp</i>) (&gt;= 0). Typical value =
    10.
    '''

    t5lp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            LP reheater time constant (<i>T5lp</i>) (&gt;= 0). Typical value = 10.
            '''

        })
    '''
    LP reheater time constant (<i>T5lp</i>) (&gt;= 0). Typical value =
    10.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscontinuousExcitationControlDynamics(DynamicsFunctionBlock):
    '''
    Discontinuous excitation control function block whose behaviour is described
    by reference to a standard model <font color="#0f0f0f">or by definition
    of a user-defined model</font>.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.DiscontinuousExcitationControlDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this discontinuous excitation control
            model is associated.
            '''

        })
    '''
    Excitation system model with which this discontinuous excitation control
    model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.DiscontinuousExcitationControlDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by this discontinuous excitation control system
            model.
            '''

        })
    '''
    Remote input signal used by this discontinuous excitation control system
    model.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.DiscontinuousExcitationControlDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this discontinuous excitation control
            model is associated.
            '''

        })
    '''
    Excitation system model with which this discontinuous excitation control
    model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.DiscontinuousExcitationControlDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this discontinuous excitation control system
            model.
            '''

        })
    '''
    Remote input signal used by this discontinuous excitation control system
    model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiscontinuousExcitationControlDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscExcContIEEEDEC1A(DiscontinuousExcitationControlDynamics):
    '''
    IEEE type DEC1A discontinuous excitation control model that boosts generator
    excitation to a level higher than that demanded by the voltage regulator
    and stabilizer immediately following a system fault.
    Reference: IEEE 421.5-2005, 12.2.
    '''

    esc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed change reference (<i>E</i><i><sub>SC</sub></i>). Typical value =
            0,0015.
            '''

        })
    '''
    Speed change reference (<i>E</i><i><sub>SC</sub></i>). Typical value
    = 0,0015.
    '''

    kan: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous controller gain (<i>K</i><i><sub>AN</sub></i>). Typical value
            = 400.
            '''

        })
    '''
    Discontinuous controller gain (<i>K</i><i><sub>AN</sub></i>). Typical
    value = 400.
    '''

    ketl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Terminal voltage limiter gain (<i>K</i><i><sub>ETL</sub></i>). Typical
            value = 47.
            '''

        })
    '''
    Terminal voltage limiter gain (<i>K</i><i><sub>ETL</sub></i>). Typical
    value = 47.
    '''

    tan: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous controller time constant (<i>T</i><i><sub>AN</sub></i>) (&gt;=
            0). Typical value = 0,08.
            '''

        })
    '''
    Discontinuous controller time constant (<i>T</i><i><sub>AN</sub></i>)
    (&gt;= 0). Typical value = 0,08.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>D</sub></i>) (&gt;= 0). Typical value =
            0,03.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>D</sub></i>) (&gt;= 0). Typical value
    = 0,03.
    '''

    tl1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>L</sub></i><sub>1</sub>) (&gt;= 0). Typical
            value = 0,025.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>L</sub></i><sub>1</sub>) (&gt;= 0).
    Typical value = 0,025.
    '''

    tl2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>L</sub></i><sub>2</sub>) (&gt;= 0). Typical
            value = 1,25.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>L</sub></i><sub>2</sub>) (&gt;= 0).
    Typical value = 1,25.
    '''

    tw5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            DEC washout time constant (<i>T</i><i><sub>W</sub></i><sub>5</sub>) (&gt;=
            0). Typical value = 5.
            '''

        })
    '''
    DEC washout time constant (<i>T</i><i><sub>W</sub></i><sub>5</sub>)
    (&gt;= 0). Typical value = 5.
    '''

    val: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator voltage reference (<i>V</i><i><sub>AL</sub></i>). Typical value
            = 5,5.
            '''

        })
    '''
    Regulator voltage reference (<i>V</i><i><sub>AL</sub></i>). Typical
    value = 5,5.
    '''

    vanmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter for Van (<i>V</i><i><sub>ANMAX</sub></i>).
            '''

        })
    '''
    Limiter for Van (<i>V</i><i><sub>ANMAX</sub></i>).
    '''

    vomax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>OMAX</sub></i>) (&gt; DiscExcContIEEEDEC1A.vomin).
            Typical value = 0,3.
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>OMAX</sub></i>) (&gt; DiscExcContIEEEDEC1A.vomin).
    Typical value = 0,3.
    '''

    vomin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>OMIN</sub></i>) (&lt; DiscExcContIEEEDEC1A.vomax).
            Typical value = 0,1.
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>OMIN</sub></i>) (&lt; DiscExcContIEEEDEC1A.vomax).
    Typical value = 0,1.
    '''

    vsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>SMAX</sub></i>)(&gt; DiscExcContIEEEDEC1A.vsmin).
            Typical value = 0,2.
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>SMAX</sub></i>)(&gt; DiscExcContIEEEDEC1A.vsmin).
    Typical value = 0,2.
    '''

    vsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>SMIN</sub></i>) (&lt; DiscExcContIEEEDEC1A.vsmax).
            Typical value = -0,066.
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>SMIN</sub></i>) (&lt; DiscExcContIEEEDEC1A.vsmax).
    Typical value = -0,066.
    '''

    vtc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Terminal voltage level reference (<i>V</i><i><sub>TC</sub></i>). Typical
            value = 0,95.
            '''

        })
    '''
    Terminal voltage level reference (<i>V</i><i><sub>TC</sub></i>). Typical
    value = 0,95.
    '''

    vtlmt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage reference (<i>V</i><i><sub>TLMT</sub></i>). Typical value = 1,1.
            '''

        })
    '''
    Voltage reference (<i>V</i><i><sub>TLMT</sub></i>). Typical value =
    1,1.
    '''

    vtm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage limits (<i>V</i><i><sub>TM</sub></i>). Typical value = 1,13.
            '''

        })
    '''
    Voltage limits (<i>V</i><i><sub>TM</sub></i>). Typical value = 1,13.
    '''

    vtn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage limits (<i>V</i><i><sub>TN</sub></i>). Typical value = 1,12.
            '''

        })
    '''
    Voltage limits (<i>V</i><i><sub>TN</sub></i>). Typical value = 1,12.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiscontinuousExcitationControlDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscExcContIEEEDEC2A(DiscontinuousExcitationControlDynamics):
    '''
    IEEE type DEC2A model for discontinuous excitation control. This system
    provides transient excitation boosting via an open-loop control as initiated
    by a trigger signal generated remotely.
    Reference: IEEE 421.5-2005 12.3.
    '''

    td1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous controller time constant (<i>T</i><i><sub>D1</sub></i>) (&gt;=
            0).
            '''

        })
    '''
    Discontinuous controller time constant (<i>T</i><i><sub>D1</sub></i>)
    (&gt;= 0).
    '''

    td2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous controller washout time constant (<i>T</i><i><sub>D2</sub></i>)
            (&gt;= 0).
            '''

        })
    '''
    Discontinuous controller washout time constant (<i>T</i><i><sub>D2</sub></i>)
    (&gt;= 0).
    '''

    vdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>DMAX</sub></i>) (&gt; DiscExcContIEEEDEC2A.vdmin).
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>DMAX</sub></i>) (&gt; DiscExcContIEEEDEC2A.vdmin).
    '''

    vdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>DMIN</sub></i>) (&lt; DiscExcContIEEEDEC2A.vdmax).
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>DMIN</sub></i>) (&lt; DiscExcContIEEEDEC2A.vdmax).
    '''

    vk: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous controller input reference (<i>V</i><i><sub>K</sub></i>).
            '''

        })
    '''
    Discontinuous controller input reference (<i>V</i><i><sub>K</sub></i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiscontinuousExcitationControlDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscExcContIEEEDEC3A(DiscontinuousExcitationControlDynamics):
    '''
    IEEE type DEC3A model. In some systems, the stabilizer output is disconnected
    from the regulator immediately following a severe fault to prevent the
    stabilizer from competing with action of voltage regulator during the first
    swing.
    Reference: IEEE 421.5-2005 12.4.
    '''

    tdr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reset time delay (<i>T</i><i><sub>DR</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Reset time delay (<i>T</i><i><sub>DR</sub></i>) (&gt;= 0).
    '''

    vtmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Terminal undervoltage comparison level (<i>V</i><i><sub>TMIN</sub></i>).
            '''

        })
    '''
    Terminal undervoltage comparison level (<i>V</i><i><sub>TMIN</sub></i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiscontinuousExcitationControlDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscontinuousExcitationControlUserDefined(DiscontinuousExcitationControlDynamics):
    '''
    Discontinuous excitation control function block whose dynamic behaviour
    is described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.DiscontinuousExcitationControlUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcitationSystemDynamics(DynamicsFunctionBlock):
    '''
    Excitation system function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    DiscontinuousExcitationControlDynamics: Optional[DiscontinuousExcitationControlDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscontinuousExcitationControlDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous excitation control model associated with this excitation
            system model.
            '''

        })
    '''
    Discontinuous excitation control model associated with this excitation
    system model.
    '''

    OverexcitationLimiterDynamics: Optional[OverexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OverexcitationLimiterDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overexcitation limiter model associated with this excitation system model.
            '''

        })
    '''
    Overexcitation limiter model associated with this excitation system
    model.
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power factor or VAr controller type 1 model associated with this excitation
            system model.
            '''

        })
    '''
    Power factor or VAr controller type 1 model associated with this excitation
    system model.
    '''

    PFVArControllerType2Dynamics: Optional[PFVArControllerType2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType2Dynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power factor or VAr controller type 2 model associated with this excitation
            system model.
            '''

        })
    '''
    Power factor or VAr controller type 2 model associated with this excitation
    system model.
    '''

    PowerSystemStabilizerDynamics: Optional[PowerSystemStabilizerDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemStabilizerDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power system stabilizer model associated with this excitation system model.
            '''

        })
    '''
    Power system stabilizer model associated with this excitation system
    model.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine model with which this excitation system model is associated.
            '''

        })
    '''
    Synchronous machine model with which this excitation system model is
    associated.
    '''

    UnderexcitationLimiterDynamics: Optional[UnderexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnderexcitationLimiterDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Undrexcitation limiter model associated with this excitation system model.
            '''

        })
    '''
    Undrexcitation limiter model associated with this excitation system
    model.
    '''

    VoltageCompensatorDynamics: Optional[VoltageCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'VoltageCompensatorDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage compensator model associated with this excitation system model.
            '''

        })
    '''
    Voltage compensator model associated with this excitation system model.
    '''

    DiscontinuousExcitationControlDynamics: Optional[DiscontinuousExcitationControlDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscontinuousExcitationControlDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Discontinuous excitation control model associated with this excitation
            system model.
            '''

        })
    '''
    Discontinuous excitation control model associated with this excitation
    system model.
    '''

    OverexcitationLimiterDynamics: Optional[OverexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OverexcitationLimiterDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Overexcitation limiter model associated with this excitation system model.
            '''

        })
    '''
    Overexcitation limiter model associated with this excitation system
    model.
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Power factor or VAr controller type 1 model associated with this excitation
            system model.
            '''

        })
    '''
    Power factor or VAr controller type 1 model associated with this excitation
    system model.
    '''

    PFVArControllerType2Dynamics: Optional[PFVArControllerType2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType2Dynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Power factor or VAr controller type 2 model associated with this excitation
            system model.
            '''

        })
    '''
    Power factor or VAr controller type 2 model associated with this excitation
    system model.
    '''

    PowerSystemStabilizerDynamics: Optional[PowerSystemStabilizerDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemStabilizerDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Power system stabilizer model associated with this excitation system model.
            '''

        })
    '''
    Power system stabilizer model associated with this excitation system
    model.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machine model with which this excitation system model is associated.
            '''

        })
    '''
    Synchronous machine model with which this excitation system model is
    associated.
    '''

    UnderexcitationLimiterDynamics: Optional[UnderexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnderexcitationLimiterDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Undrexcitation limiter model associated with this excitation system model.
            '''

        })
    '''
    Undrexcitation limiter model associated with this excitation system
    model.
    '''

    VoltageCompensatorDynamics: Optional[VoltageCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageCompensatorDynamics.ExcitationSystemDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Voltage compensator model associated with this excitation system model.
            '''

        })
    '''
    Voltage compensator model associated with this excitation system model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC1A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC1A alternator-supplied rectifier excitation system with
    different rate feedback source.
    '''

    hvlvgates: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if both HV gate and LV gate are active (<i>HVLVgates</i>).
            true = gates are used
            false = gates are not used.
            Typical value = true.
            '''

        })
    '''
    Indicates if both HV gate and LV gate are active (<i>HVLVgates</i>).
    true = gates are used
    false = gates are not used.
    Typical value = true.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,03.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,2.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
            (&gt;= 0). Typical value = 0,38.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
    (&gt;= 0). Typical value = 0,38.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,03.
    '''

    kf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>Kf1</i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>Kf1</i>) (&gt;=
    0). Typical value = 0.
    '''

    kf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>Kf2</i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>Kf2</i>) (&gt;=
    0). Typical value = 1.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>) (&gt;= 0). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>c</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>c</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 0,8.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 0,8.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;
    0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>amax</sub></i>) (&gt;
            0). Typical value = 14,5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>amax</sub></i>) (&gt;
    0). Typical value = 14,5.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>amin</sub></i>) (&lt;
            0). Typical value = -14,5.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>amin</sub></i>) (&lt;
    0). Typical value = -14,5.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve1</i>) (&gt; 0). Typical value = 4,18.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve1</i>) (&gt; 0). Typical value =
    4,18.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve2</i>) (&gt; 0). Typical value = 3,14.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve2</i>) (&gt; 0). Typical value =
    3,14.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical value
            = 6,03.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical
    value = 6,03.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical value
            = -5,43.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical
    value = -5,43.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC2A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC2A alternator-supplied rectifier excitation system with
    different field current limit.
    '''

    hvgate: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if HV gate is active (<i>HVgate</i>).
            true = gate is used
            false = gate is not used.
            Typical value = true.
            '''

        })
    '''
    Indicates if HV gate is active (<i>HVgate</i>).
    true = gate is used
    false = gate is not used.
    Typical value = true.
    '''

    lvgate: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if LV gate is active (<i>LVgate</i>).
            true = gate is used
            false = gate is not used.
            Typical value = true.
            '''

        })
    '''
    Indicates if LV gate is active (<i>LVgate</i>).
    true = gate is used
    false = gate is not used.
    Typical value = true.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,037.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,037.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,012.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,012.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
    '''

    kb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second stage regulator gain (<i>Kb</i>) (&gt; 0). Exciter field current
            controller gain. Typical value = 25.
            '''

        })
    '''
    Second stage regulator gain (<i>Kb</i>) (&gt; 0). Exciter field current
    controller gain. Typical value = 25.
    '''

    kb1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second stage regulator gain (<i>Kb1</i>). It is exciter field current controller
            gain used as alternative to <i>Kb</i> to represent a variant of the ExcAC2A
            model. Typical value = 25.
            '''

        })
    '''
    Second stage regulator gain (<i>Kb1</i>). It is exciter field current
    controller gain used as alternative to <i>Kb</i> to represent a variant
    of the ExcAC2A model. Typical value = 25.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,28.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,28.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
            (&gt;= 0). Typical value = 0,35.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
    (&gt;= 0). Typical value = 0,35.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,03.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current feedback gain (<i>Kh</i>) (&gt;= 0). Typical value
            = 1.
            '''

        })
    '''
    Exciter field current feedback gain (<i>Kh</i>) (&gt;= 0). Typical
    value = 1.
    '''

    kl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter gain (<i>Kl</i>). Typical value = 10.
            '''

        })
    '''
    Exciter field current limiter gain (<i>Kl</i>). Typical value = 10.
    '''

    kl1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>Kl1</i>). Typical
            value = 1.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>Kl1</i>). Typical
    value = 1.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>) (&gt;= 0). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 0,6.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 0,6.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;
    0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
            = 8.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
    = 8.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
            = -8.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
    = -8.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 4,4.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 4,4.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0). Typical
            value = 3,3.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0).
    Typical value = 3,3.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>Vfemax</i>) (&gt;= 0). Typical
            value = 4,4.
            '''

        })
    '''
    Exciter field current limit reference (<i>Vfemax</i>) (&gt;= 0). Typical
    value = 4,4.
    '''

    vlr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum exciter field current (<i>Vlr</i>) (&gt; 0). Typical value = 4,4.
            '''

        })
    '''
    Maximum exciter field current (<i>Vlr</i>) (&gt; 0). Typical value
    = 4,4.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical value
            = 105.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical
    value = 105.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical value
            = -95.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical
    value = -95.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC3A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC3A alternator-supplied rectifier excitation system with
    different field current limit.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 1,143.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 1,143.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    efdn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of <i>Efd </i>at which feedback gain changes (<i>Efdn</i>) (&gt;
            0). Typical value = 2,36.
            '''

        })
    '''
    Value of <i>Efd </i>at which feedback gain changes (<i>Efdn</i>) (&gt;
    0). Typical value = 2,36.
    '''

    ka: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 45,62.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 45,62.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,104.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,104.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
            (&gt;= 0). Typical value = 0,499.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
    (&gt;= 0). Typical value = 0,499.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,143.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,143.
    '''

    kf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>Kf1</i>). Typical
            value = 1.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>Kf1</i>). Typical
    value = 1.
    '''

    kf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>Kf2</i>). Typical
            value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>Kf2</i>). Typical
    value = 0.
    '''

    klv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain used in the minimum field voltage limiter loop (<i>Klv</i>). Typical
            value = 0,194.
            '''

        })
    '''
    Gain used in the minimum field voltage limiter loop (<i>Klv</i>). Typical
    value = 0,194.
    '''

    kn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>Kn</i>) (&gt;= 0). Typical
            value =0,05.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>Kn</i>) (&gt;= 0). Typical
    value =0,05.
    '''

    kr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Constant associated with regulator and alternator field power supply (<i>Kr</i>)
            (&gt; 0). Typical value =3,77.
            '''

        })
    '''
    Constant associated with regulator and alternator field power supply
    (<i>Kr</i>) (&gt; 0). Typical value =3,77.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,013.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,013.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1,17.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1,17.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;
    0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
            = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
    = 1.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
            = -0,95.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
    = -0,95.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 6.24.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 6.24.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0). Typical
            value = 4,68.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0).
    Typical value = 4,68.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>Vemin</i>) (&lt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>Vemin</i>) (&lt;= 0). Typical value
    = 0.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>Vfemax</i>) (&gt;= 0). Typical
            value = 16.
            '''

        })
    '''
    Exciter field current limit reference (<i>Vfemax</i>) (&gt;= 0). Typical
    value = 16.
    '''

    vlv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage used in the minimum field voltage limiter loop (<i>Vlv</i>).
            Typical value = 0,79.
            '''

        })
    '''
    Field voltage used in the minimum field voltage limiter loop (<i>Vlv</i>).
    Typical value = 0,79.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC4A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC4A alternator-supplied rectifier excitation system with
    different minimum controller output.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 200.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 200.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,015.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,015.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            10.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 10.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 1.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
            value = 10.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
    value = 10.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
            value = -10.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
    value = -10.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 5,64.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 5,64.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -4,53.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -4,53.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC5A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC5A alternator-supplied rectifier excitation system with
    different minimum controller output.
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model (<i>a</i>). Typical value
            = 1.
            '''

        })
    '''
    Coefficient to allow different usage of the model (<i>a</i>). Typical
    value = 1.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,86.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,86.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,5.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd1</i>) (&gt;
            0). Typical value = 5,6.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd1</i>)
    (&gt; 0). Typical value = 5,6.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd2</i>) (&gt;
            0). Typical value = 4,2.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd2</i>)
    (&gt; 0). Typical value = 4,2.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 400.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,03.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 0,8.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 0,8.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt;
    0). Typical value = 1.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf2</i>) (&gt;=
            0). Typical value = 0,8.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf2</i>) (&gt;=
    0). Typical value = 0,8.
    '''

    tf3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf3</i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf3</i>) (&gt;=
    0). Typical value = 0.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 7,3.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 7,3.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            =-7,3.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    =-7,3.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC6A(ExcitationSystemDynamics):
    '''
    Modified IEEE AC6A alternator-supplied rectifier excitation system with
    speed input.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,214.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,214.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,044.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,044.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 536.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 536.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,173.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,173.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
            (&gt;= 0). Typical value = 1,91.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
    (&gt;= 0). Typical value = 1,91.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1,6.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1,6.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter gain (<i>Kh</i>) (&gt;= 0). Typical value
            = 92.
            '''

        })
    '''
    Exciter field current limiter gain (<i>Kh</i>) (&gt;= 0). Typical value
    = 92.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value =
            0,086.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value
    = 0,086.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            9.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 9.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            3.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 3.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1.
    '''

    th: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter time constant (<i>Th</i>) (&gt; 0). Typical
            value = 0,08.
            '''

        })
    '''
    Exciter field current limiter time constant (<i>Th</i>) (&gt; 0). Typical
    value = 0,08.
    '''

    tj: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter time constant (<i>Tj</i>) (&gt;= 0). Typical
            value = 0,02.
            '''

        })
    '''
    Exciter field current limiter time constant (<i>Tj</i>) (&gt;= 0).
    Typical value = 0,02.
    '''

    tk: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tk</i>) (&gt;= 0). Typical value =
            0,18.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tk</i>) (&gt;= 0). Typical value
    = 0,18.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
            = 75.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
    = 75.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
            = -75.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
    = -75.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 7,4.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 7,4.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0). Typical
            value = 5,55.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0).
    Typical value = 5,55.
    '''

    vfelim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>Vfelim</i>) (&gt; 0). Typical
            value = 19.
            '''

        })
    '''
    Exciter field current limit reference (<i>Vfelim</i>) (&gt; 0). Typical
    value = 19.
    '''

    vhmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field current limiter signal reference (<i>Vhmax</i>) (&gt; 0).
            Typical value = 75.
            '''

        })
    '''
    Maximum field current limiter signal reference (<i>Vhmax</i>) (&gt;
    0). Typical value = 75.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 44.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 44.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -36.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -36.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAC8B(ExcitationSystemDynamics):
    '''
    Modified IEEE AC8B alternator-supplied rectifier excitation system with
    speed input and input limiter.
    '''

    inlim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input limiter indicator.
            true = input limiter <i>Vimax</i> and <i>Vimin</i> is considered
            false = input limiter <i>Vimax </i>and <i>Vimin</i> is not considered.
            Typical value = true.
            '''

        })
    '''
    Input limiter indicator.
    true = input limiter <i>Vimax</i> and <i>Vimin</i> is considered
    false = input limiter <i>Vimax </i>and <i>Vimin</i> is not considered.
    Typical value = true.
    '''

    pidlim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PID limiter indicator.
            true = input limiter <i>Vpidmax</i> and <i>Vpidmin</i> is considered
            false = input limiter <i>Vpidmax</i> and <i>Vpidmin</i> is not considered.
            Typical value = true.
            '''

        })
    '''
    PID limiter indicator.
    true = input limiter <i>Vpidmax</i> and <i>Vpidmin</i> is considered
    false = input limiter <i>Vpidmax</i> and <i>Vpidmin</i> is not considered.
    Typical value = true.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,3.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 3.
    '''

    telim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector for the limiter on the block (<i>1/sTe</i>).
            See diagram for meaning of true and false.
            Typical value = false.
            '''

        })
    '''
    Selector for the limiter on the block (<i>1/sTe</i>).
    See diagram for meaning of true and false.
    Typical value = false.
    '''

    vtmult: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiply by generator's terminal voltage indicator.
            true =the limits <i>Vrmax</i> and <i>Vrmin</i> are multiplied by the generator�s
            terminal voltage to represent a thyristor power stage fed from the generator
            terminals
            false = limits are not multiplied by generator's terminal voltage.
            Typical value = false.
            '''

        })
    '''
    Multiply by generator's terminal voltage indicator.
    true =the limits <i>Vrmax</i> and <i>Vrmin</i> are multiplied by the
    generator�s terminal voltage to represent a thyristor power stage fed
    from the generator terminals
    false = limits are not multiplied by generator's terminal voltage.
    Typical value = false.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 1.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,55.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,55.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
            (&gt;= 0). Typical value = 1,1.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>Kd</i>)
    (&gt;= 0). Typical value = 1,1.
    '''

    kdr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator derivative gain (<i>Kdr</i>) (&gt;= 0). Typical value
            = 10.
            '''

        })
    '''
    Voltage regulator derivative gain (<i>Kdr</i>) (&gt;= 0). Typical value
    = 10.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kir: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>Kir</i>) (&gt;= 0). Typical value =
            5.
            '''

        })
    '''
    Voltage regulator integral gain (<i>Kir</i>) (&gt;= 0). Typical value
    = 5.
    '''

    kpr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>Kpr</i>) (&gt; 0 if ExcAC8B.kir
            = 0). Typical value = 80.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>Kpr</i>) (&gt; 0 if ExcAC8B.kir
    = 0). Typical value = 80.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tdr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>Tdr</i>) (&gt; 0 if ExcAC8B.kdr &gt; 0). Typical
            value = 0,1.
            '''

        })
    '''
    Lag time constant (<i>Tdr</i>) (&gt; 0 if ExcAC8B.kdr &gt; 0). Typical
    value = 0,1.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1,2.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1,2.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 6,5.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 6,5.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0). Typical
            value = 9.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0).
    Typical value = 9.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>Vemin</i>) (&lt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>Vemin</i>) (&lt;= 0). Typical value
    = 0.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>Vfemax</i>). Typical value =
            6.
            '''

        })
    '''
    Exciter field current limit reference (<i>Vfemax</i>). Typical value
    = 6.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal maximum (<i>Vimax</i>) (&gt; ExcAC8B.vimin). Typical value
            = 35.
            '''

        })
    '''
    Input signal maximum (<i>Vimax</i>) (&gt; ExcAC8B.vimin). Typical value
    = 35.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal minimum (<i>Vimin</i>) (&lt; ExcAC8B.vimax). Typical value
            = -10.
            '''

        })
    '''
    Input signal minimum (<i>Vimin</i>) (&lt; ExcAC8B.vimax). Typical value
    = -10.
    '''

    vpidmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PID maximum controller output (<i>Vpidmax</i>) (&gt; ExcAC8B.vpidmin).
            Typical value = 35.
            '''

        })
    '''
    PID maximum controller output (<i>Vpidmax</i>) (&gt; ExcAC8B.vpidmin).
    Typical value = 35.
    '''

    vpidmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PID minimum controller output (<i>Vpidmin</i>) (&lt; ExcAC8B.vpidmax).
            Typical value = -10.
            '''

        })
    '''
    PID minimum controller output (<i>Vpidmin</i>) (&lt; ExcAC8B.vpidmax).
    Typical value = -10.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 35.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 35.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = 0.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcANS(ExcitationSystemDynamics):
    '''
    Italian excitation system. It represents static field voltage or excitation
    current feedback excitation system.
    '''

    blint: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor control flag (<i>BLINT</i>).
            0 = lead-lag regulator
            1 = proportional integral regulator.
            Typical value = 0.
            '''

        })
    '''
    Governor control flag (<i>BLINT</i>).
    0 = lead-lag regulator
    1 = proportional integral regulator.
    Typical value = 0.
    '''

    k2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter gain (<i>K</i><i><sub>2</sub></i>). Typical value = 20.
            '''

        })
    '''
    Exciter gain (<i>K</i><i><sub>2</sub></i>). Typical value = 20.
    '''

    k3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>K</i><i><sub>3</sub></i>). Typical value = 1000.
            '''

        })
    '''
    AVR gain (<i>K</i><i><sub>3</sub></i>). Typical value = 1000.
    '''

    kce: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ceiling factor (<i>K</i><i><sub>CE</sub></i>). Typical value = 1.
            '''

        })
    '''
    Ceiling factor (<i>K</i><i><sub>CE</sub></i>). Typical value = 1.
    '''

    krvecc: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback enabling (<i>K</i><i><sub>RVECC</sub></i>).
            0 = open loop control
            1 = closed loop control.
            Typical value = 1.
            '''

        })
    '''
    Feedback enabling (<i>K</i><i><sub>RVECC</sub></i>).
    0 = open loop control
    1 = closed loop control.
    Typical value = 1.
    '''

    kvfif: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback signal flag (<i>K</i><i><sub>VFIF</sub></i>).
            0 = output voltage of the exciter
            1 = exciter field current.
            Typical value = 0.
            '''

        })
    '''
    Rate feedback signal flag (<i>K</i><i><sub>VFIF</sub></i>).
    0 = output voltage of the exciter
    1 = exciter field current.
    Typical value = 0.
    '''

    ifmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter current (<i>I</i><i><sub>FMN</sub></i>). Typical value
            = -5,2.
            '''

        })
    '''
    Minimum exciter current (<i>I</i><i><sub>FMN</sub></i>). Typical value
    = -5,2.
    '''

    ifmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum exciter current (<i>I</i><i><sub>FMX</sub></i>). Typical value
            = 6,5.
            '''

        })
    '''
    Maximum exciter current (<i>I</i><i><sub>FMX</sub></i>). Typical value
    = 6,5.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical value =
            20.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical value
    = 20.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical value =
            0,05.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical value
    = 0,05.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical value =
            1,6.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical value
    = 1,6.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical
            value = 0,04.
            '''

        })
    '''
    Exciter time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical
    value = 0,04.
    '''

    vrmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value = -5,2.
            '''

        })
    '''
    Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value =
    -5,2.
    '''

    vrmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value = 6,5.
            '''

        })
    '''
    Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value =
    6,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR1(ExcitationSystemDynamics):
    '''
    Italian excitation system corresponding to IEEE (1968) type 1 model. It
    represents an exciter dynamo and electromechanical regulator.
    '''

    ka: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 500.
            '''

        })
    '''
    AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 500.
    '''

    kf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback gain (<i>K</i><i><sub>F</sub></i>). Typical value = 0,12.
            '''

        })
    '''
    Rate feedback gain (<i>K</i><i><sub>F</sub></i>). Typical value = 0,12.
    '''

    se1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>S[E</i><i><sub>1</sub></i><i>]</i>).
            Typical value = 0,1.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>S[E</i><i><sub>1</sub></i><i>]</i>).
    Typical value = 0,1.
    '''

    se2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>S[E</i><i><sub>2</sub></i><i>]</i>).
            Typical value = 0,03.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>S[E</i><i><sub>2</sub></i><i>]</i>).
    Typical value = 0,03.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value = 4.18.
            '''

        })
    '''
    Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value
    = 4.18.
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value = 3,14.
            '''

        })
    '''
    Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value
    = 3,14.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0). Typical value
            = 0,2.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0). Typical
    value = 0,2.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
    value = 1.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback time constant (<i>T</i><i><sub>F</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Rate feedback time constant (<i>T</i><i><sub>F</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    vrmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value = -6.
            '''

        })
    '''
    Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value =
    -6.
    '''

    vrmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value = 7.
            '''

        })
    '''
    Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value =
    7.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR2(ExcitationSystemDynamics):
    '''
    Italian excitation system corresponding to IEEE (1968) type 2 model. It
    represents an alternator and rotating diodes and electromechanic voltage
    regulators.
    '''

    ka: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 500.
            '''

        })
    '''
    AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 500.
    '''

    kf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback gain (<i>K</i><i><sub>F</sub></i>). Typical value = 0,12.
            '''

        })
    '''
    Rate feedback gain (<i>K</i><i><sub>F</sub></i>). Typical value = 0,12.
    '''

    se1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>S[E</i><i><sub>1</sub></i><i>]</i>).
            Typical value = 0.1.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>S[E</i><i><sub>1</sub></i><i>]</i>).
    Typical value = 0.1.
    '''

    se2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>S[E</i><i><sub>2</sub></i><i>]</i>).
            Typical value = 0,03.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>S[E</i><i><sub>2</sub></i><i>]</i>).
    Typical value = 0,03.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value = 4,18.
            '''

        })
    '''
    Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value
    = 4,18.
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value = 3,14.
            '''

        })
    '''
    Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value
    = 3,14.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0). Typical value
            = 0,02.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0). Typical
    value = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
    value = 1.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback time constant (<i>T</i><i><sub>F1</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Rate feedback time constant (<i>T</i><i><sub>F1</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Rate feedback time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    vrmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value = -6.
            '''

        })
    '''
    Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value =
    -6.
    '''

    vrmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value = 7.
            '''

        })
    '''
    Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value =
    7.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR3(ExcitationSystemDynamics):
    '''
    Italian excitation system. It represents an exciter dynamo and electric
    regulator.
    '''

    ka: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 100.
            '''

        })
    '''
    AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 100.
    '''

    se1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>1</sub></i><i> </i>(<i>S[E</i><i><sub>1</sub></i><i>]</i>).
            Typical value = 0,1.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>1</sub></i><i> </i>(<i>S[E</i><i><sub>1</sub></i><i>]</i>).
    Typical value = 0,1.
    '''

    se2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>2</sub></i><i> </i>(<i>S[E</i><i><sub>2</sub></i><i>]</i>).
            Typical value = 0,03.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>2</sub></i><i> </i>(<i>S[E</i><i><sub>2</sub></i><i>]</i>).
    Typical value = 0,03.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value = 4,18.
            '''

        })
    '''
    Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value
    = 4,18.
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value = 3,14.
            '''

        })
    '''
    Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value
    = 3,14.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical value
            = 20.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical
    value = 20.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical value
            = 1,6.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
    value = 1,6.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical value
            = 0,66.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical
    value = 0,66.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical value
            = 0,07.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical
    value = 0,07.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Exciter time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0). Typical
    value = 1.
    '''

    vrmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value = -7,5.
            '''

        })
    '''
    Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value =
    -7,5.
    '''

    vrmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value = 7,5.
            '''

        })
    '''
    Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value =
    7,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR4(ExcitationSystemDynamics):
    '''
    Italian excitation system. It represents a static exciter and electric
    voltage regulator.
    '''

    imul: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR output voltage dependency selector (<i>I</i><i><sub>MUL</sub></i>).
            true = selector is connected
            false = selector is not connected.
            Typical value = true.
            '''

        })
    '''
    AVR output voltage dependency selector (<i>I</i><i><sub>MUL</sub></i>).
    true = selector is connected
    false = selector is not connected.
    Typical value = true.
    '''

    ka: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 300.
            '''

        })
    '''
    AVR gain (<i>K</i><i><sub>A</sub></i>). Typical value = 300.
    '''

    ke: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter gain (<i>K</i><i><sub>E</sub></i><i>)</i>. Typical value = 1.
            '''

        })
    '''
    Exciter gain (<i>K</i><i><sub>E</sub></i><i>)</i>. Typical value =
    1.
    '''

    kif: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter internal reactance (<i>K</i><i><sub>IF</sub></i>). Typical value
            = 0.
            '''

        })
    '''
    Exciter internal reactance (<i>K</i><i><sub>IF</sub></i>). Typical
    value = 0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical value
            = 4,8.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical
    value = 4,8.
    '''

    t1if: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter current feedback time constant (<i>T</i><i><sub>1IF</sub></i>)
            (&gt;= 0). Typical value = 60.
            '''

        })
    '''
    Exciter current feedback time constant (<i>T</i><i><sub>1IF</sub></i>)
    (&gt;= 0). Typical value = 60.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical value
            = 1,5.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
    value = 1,5.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    AVR time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tif: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter current feedback time constant (<i>T</i><i><sub>IF</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Exciter current feedback time constant (<i>T</i><i><sub>IF</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    vfmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter output (<i>V</i><i><sub>FMN</sub></i>). Typical value =
            0.
            '''

        })
    '''
    Minimum exciter output (<i>V</i><i><sub>FMN</sub></i>). Typical value
    = 0.
    '''

    vfmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum exciter output (<i>V</i><i><sub>FMX</sub></i>). Typical value =
            5.
            '''

        })
    '''
    Maximum exciter output (<i>V</i><i><sub>FMX</sub></i>). Typical value
    = 5.
    '''

    vrmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value = 0.
            '''

        })
    '''
    Minimum AVR output (<i>V</i><i><sub>RMN</sub></i>). Typical value =
    0.
    '''

    vrmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value = 5.
            '''

        })
    '''
    Maximum AVR output (<i>V</i><i><sub>RMX</sub></i>). Typical value =
    5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR5(ExcitationSystemDynamics):
    '''
    Manual excitation control with field circuit resistance. This model can
    be used as a very simple representation of manual voltage control.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ka</i>).
            '''

        })
    '''
    Gain (<i>Ka</i>).
    '''

    rex: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effective output resistance (<i>Rex</i>). <i>Rex</i> represents the effective
            output resistance seen by the excitation system.
            '''

        })
    '''
    Effective output resistance (<i>Rex</i>). <i>Rex</i> represents the
    effective output resistance seen by the excitation system.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ta</i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>Ta</i>) (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcAVR7(ExcitationSystemDynamics):
    '''
    IVO excitation system.
    '''

    a1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead coefficient (<i>A</i><i><sub>1</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lead coefficient (<i>A</i><i><sub>1</sub></i>). Typical value = 0,5.
    '''

    a2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag coefficient (<i>A</i><i><sub>2</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lag coefficient (<i>A</i><i><sub>2</sub></i>). Typical value = 0,5.
    '''

    a3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead coefficient (<i>A</i><i><sub>3</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lead coefficient (<i>A</i><i><sub>3</sub></i>). Typical value = 0,5.
    '''

    a4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag coefficient (<i>A</i><i><sub>4</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lag coefficient (<i>A</i><i><sub>4</sub></i>). Typical value = 0,5.
    '''

    a5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead coefficient (<i>A</i><i><sub>5</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lead coefficient (<i>A</i><i><sub>5</sub></i>). Typical value = 0,5.
    '''

    a6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag coefficient (<i>A</i><i><sub>6</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    Lag coefficient (<i>A</i><i><sub>6</sub></i>). Typical value = 0,5.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>1</sub></i>). Typical value = 1.
            '''

        })
    '''
    Gain (<i>K</i><i><sub>1</sub></i>). Typical value = 1.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>3</sub></i>). Typical value = 3.
            '''

        })
    '''
    Gain (<i>K</i><i><sub>3</sub></i>). Typical value = 3.
    '''

    k5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>5</sub></i>). Typical value = 1.
            '''

        })
    '''
    Gain (<i>K</i><i><sub>5</sub></i>). Typical value = 1.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical value
            = 0,05.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical
    value = 0,05.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    vmax1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag maximum limit (<i>Vmax1</i>) (&gt; ExcAVR7.vmin1). Typical value
            = 5.
            '''

        })
    '''
    Lead-lag maximum limit (<i>Vmax1</i>) (&gt; ExcAVR7.vmin1). Typical
    value = 5.
    '''

    vmax3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag maximum limit (<i>Vmax3</i>) (&gt; ExcAVR7.vmin3). Typical value
            = 5.
            '''

        })
    '''
    Lead-lag maximum limit (<i>Vmax3</i>) (&gt; ExcAVR7.vmin3). Typical
    value = 5.
    '''

    vmax5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag maximum limit (<i>Vmax5</i>) (&gt; ExcAVR7.vmin5). Typical value
            = 5.
            '''

        })
    '''
    Lead-lag maximum limit (<i>Vmax5</i>) (&gt; ExcAVR7.vmin5). Typical
    value = 5.
    '''

    vmin1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag minimum limit (<i>Vmin1</i>) (&lt; ExcAVR7.vmax1). Typical value
            = -5.
            '''

        })
    '''
    Lead-lag minimum limit (<i>Vmin1</i>) (&lt; ExcAVR7.vmax1). Typical
    value = -5.
    '''

    vmin3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag minimum limit (<i>Vmin3</i>) (&lt; ExcAVR7.vmax3). Typical value
            = -5.
            '''

        })
    '''
    Lead-lag minimum limit (<i>Vmin3</i>) (&lt; ExcAVR7.vmax3). Typical
    value = -5.
    '''

    vmin5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead-lag minimum limit (<i>Vmin5</i>) (&lt; ExcAVR7.vmax5). Typical value
            = -2.
            '''

        })
    '''
    Lead-lag minimum limit (<i>Vmin5</i>) (&lt; ExcAVR7.vmax5). Typical
    value = -2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcBBC(ExcitationSystemDynamics):
    '''
    Transformer fed static excitation system (static with ABB regulator). This
    model represents a static excitation system in which a gated thyristor
    bridge fed by a transformer at the main generator terminals feeds the main
    generator directly.
    '''

    switch: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supplementary signal routing selector (<i>switch</i>).
            true = <i>Vs</i> connected to 3rd summing point
            false = <i>Vs</i> connected to 1st summing point (see diagram).
            Typical value = false.
            '''

        })
    '''
    Supplementary signal routing selector (<i>switch</i>).
    true = <i>Vs</i> connected to 3rd summing point
    false = <i>Vs</i> connected to 1st summing point (see diagram).
    Typical value = false.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum open circuit exciter voltage (<i>Efdmax</i>) (&gt; ExcBBC.efdmin).
            Typical value = 5.
            '''

        })
    '''
    Maximum open circuit exciter voltage (<i>Efdmax</i>) (&gt; ExcBBC.efdmin).
    Typical value = 5.
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum open circuit exciter voltage (<i>Efdmin</i>) (&lt; ExcBBC.efdmax).
            Typical value = -5.
            '''

        })
    '''
    Minimum open circuit exciter voltage (<i>Efdmin</i>) (&lt; ExcBBC.efdmax).
    Typical value = -5.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady state gain (<i>K</i>) (not = 0). Typical value = 300.
            '''

        })
    '''
    Steady state gain (<i>K</i>) (not = 0). Typical value = 300.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller time constant (<i>T1</i>) (&gt;= 0). Typical value = 6.
            '''

        })
    '''
    Controller time constant (<i>T1</i>) (&gt;= 0). Typical value = 6.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Controller time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T3</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,05.
            '''

        })
    '''
    Lead/lag time constant (<i>T3</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0,05.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T4</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,01.
            '''

        })
    '''
    Lead/lag time constant (<i>T4</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0,01.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum control element output (<i>Vrmax</i>) (&gt; ExcBBC.vrmin). Typical
            value = 5.
            '''

        })
    '''
    Maximum control element output (<i>Vrmax</i>) (&gt; ExcBBC.vrmin).
    Typical value = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum control element output (<i>Vrmin</i>) (&lt; ExcBBC.vrmax). Typical
            value = -5.
            '''

        })
    '''
    Minimum control element output (<i>Vrmin</i>) (&lt; ExcBBC.vrmax).
    Typical value = -5.
    '''

    xe: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effective excitation transformer reactance (<i>Xe</i>) (&gt;= 0). <i>Xe</i>
            models the regulation of the transformer/rectifier unit. Typical value
            = 0,05.
            '''

        })
    '''
    Effective excitation transformer reactance (<i>Xe</i>) (&gt;= 0). <i>Xe</i>
    models the regulation of the transformer/rectifier unit. Typical value
    = 0,05.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcCZ(ExcitationSystemDynamics):
    '''
    Czech proportion/integral exciter.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output maximum limit (<i>Efdmax</i>) (&gt; ExcCZ.efdmin).
            '''

        })
    '''
    Exciter output maximum limit (<i>Efdmax</i>) (&gt; ExcCZ.efdmin).
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output minimum limit (<i>Efdmin</i>) (&lt; ExcCZ.efdmax).
            '''

        })
    '''
    Exciter output minimum limit (<i>Efdmin</i>) (&lt; ExcCZ.efdmax).
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator gain (<i>Ka</i>).
            '''

        })
    '''
    Regulator gain (<i>Ka</i>).
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>).
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>).
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator proportional gain (<i>Kp</i>).
            '''

        })
    '''
    Regulator proportional gain (<i>Kp</i>).
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator time constant (<i>Ta</i>) (&gt;= 0).
            '''

        })
    '''
    Regulator time constant (<i>Ta</i>) (&gt;= 0).
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator integral time constant (<i>Tc</i>) (&gt;= 0).
            '''

        })
    '''
    Regulator integral time constant (<i>Tc</i>) (&gt;= 0).
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt;= 0).
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt;= 0).
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator maximum limit (<i>Vrmax</i>) (&gt; ExcCZ.vrmin).
            '''

        })
    '''
    Voltage regulator maximum limit (<i>Vrmax</i>) (&gt; ExcCZ.vrmin).
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator minimum limit (<i>Vrmin</i>) (&lt; ExcCZ.vrmax).
            '''

        })
    '''
    Voltage regulator minimum limit (<i>Vrmin</i>) (&lt; ExcCZ.vrmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcDC1A(ExcitationSystemDynamics):
    '''
    Modified IEEE DC1A direct current commutator exciter with speed input and
    without underexcitation limiters (UEL) inputs.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output.
            true = a lower limit of zero is applied to integrator output
            false = a lower limit of zero is not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output.
    true = a lower limit of zero is applied to integrator output
    false = a lower limit of zero is not applied to integrator output.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>1</sub></i> (<i>Se[Eefd</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,33.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>1</sub></i> (<i>Se[Eefd</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,33.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>2</sub></i> (<i>Se[Eefd</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>2</sub></i> (<i>Se[Eefd</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
            (&gt; 0). Typical value = 3,1.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
    (&gt; 0). Typical value = 3,1.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
            (&gt; 0). Typical value = 2,3.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
    (&gt; 0). Typical value = 2,3.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage exciter output limiter (<i>Efdmax</i>) (&gt; ExcDC1A.efdmin).
            Typical value = 99.
            '''

        })
    '''
    Maximum voltage exciter output limiter (<i>Efdmax</i>) (&gt; ExcDC1A.efdmin).
    Typical value = 99.
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage exciter output limiter (<i>Efdmin</i>) (&lt; ExcDC1A.edfmax).
            Typical value = -99.
            '''

        })
    '''
    Minimum voltage exciter output limiter (<i>Efdmin</i>) (&lt; ExcDC1A.edfmax).
    Typical value = -99.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 46.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 46.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 0.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 0.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,06.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,06.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 0,46.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 0,46.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;
    0). Typical value = 1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC1A.vrmin). Typical
            value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC1A.vrmin).
    Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC1A.vrmax).
            Typical value = -0,9.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC1A.vrmax).
    Typical value = -0,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcDC2A(ExcitationSystemDynamics):
    '''
    Modified IEEE DC2A direct current commutator exciter with speed input,
    one more leg block in feedback loop and without underexcitation limiters
    (UEL) inputs. DC type 2 excitation system model with added speed multiplier,
    added lead-lag, and voltage-dependent limits.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output.
            true = a lower limit of zero is applied to integrator output
            false = a lower limit of zero is not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output.
    true = a lower limit of zero is applied to integrator output
    false = a lower limit of zero is not applied to integrator output.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,279.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,279.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,117.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,117.
    '''

    vtlim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Vtlim</i>).
            true = limiter at the block (<i>Ka / [1 + sTa]</i>) is dependent on <i>Vt
            </i>
            false = limiter at the block is not dependent on <i>Vt</i>.
            Typical value = true.
            '''

        })
    '''
    (<i>Vtlim</i>).
    true = limiter at the block (<i>Ka / [1 + sTa]</i>) is dependent on
    <i>Vt </i>
    false = limiter at the block is not dependent on <i>Vt</i>.
    Typical value = true.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
            (&gt; 0). Typical value = 3,05.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
    (&gt; 0). Typical value = 3,05.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
            (&gt; 0). Typical value = 2,29.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
    (&gt; 0). Typical value = 2,29.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 300.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 300.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). If <i>Ke</i>
            is entered as zero, the model calculates an effective value of <i>Ke</i>
            such that the initial condition value of <i>Vr</i> is zero. The zero value
            of <i>Ke</i> is not changed. If <i>Ke</i> is entered as non-zero, its value
            is used directly, without change. Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). If <i>Ke</i>
    is entered as zero, the model calculates an effective value of <i>Ke</i>
    such that the initial condition value of <i>Vr</i> is zero. The zero
    value of <i>Ke</i> is not changed. If <i>Ke</i> is entered as non-zero,
    its value is used directly, without change. Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,01.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,01.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1,33.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1,33.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt; 0).
            Typical value = 0,675.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;
    0). Typical value = 0,675.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt;=
    0). Typical value = 0.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC2A.vrmin). Typical
            value = 4,95.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC2A.vrmin).
    Typical value = 4,95.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC2A.vrmax).
            Typical value = -4,9.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC2A.vrmax).
    Typical value = -4,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcDC3A(ExcitationSystemDynamics):
    '''
    Modified IEEE DC3A direct current commutator exciter with speed input,
    and deadband. DC old type 4.
    '''

    efdlim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Efdlim</i>).
            true = exciter output limiter is active
            false = exciter output limiter not active.
            Typical value = true.
            '''

        })
    '''
    (<i>Efdlim</i>).
    true = exciter output limiter is active
    false = exciter output limiter not active.
    Typical value = true.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output.
            true = a lower limit of zero is applied to integrator output
            false = a lower limit of zero not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output.
    true = a lower limit of zero is applied to integrator output
    false = a lower limit of zero not applied to integrator output.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>1</sub></i> (<i>Se[Efd</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,35.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Efd</i><i><sub>2</sub></i> (<i>Se[Efd</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,35.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
            (&gt; 0). Typical value = 2,6.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>1</sub></i>)
    (&gt; 0). Typical value = 2,6.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
            (&gt; 0). Typical value = 3,45.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>Efd</i><i><sub>2</sub></i>)
    (&gt; 0). Typical value = 3,45.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage exciter output limiter (<i>Efdmax</i>) (&gt; ExcDC3A.efdmin).
            Typical value = 99.
            '''

        })
    '''
    Maximum voltage exciter output limiter (<i>Efdmax</i>) (&gt; ExcDC3A.efdmin).
    Typical value = 99.
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage exciter output limiter (<i>Efdmin</i>) (&lt; ExcDC3A.efdmax).
            Typical value = -99.
            '''

        })
    '''
    Minimum voltage exciter output limiter (<i>Efdmin</i>) (&lt; ExcDC3A.efdmax).
    Typical value = -99.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Deadband (<i>Kr</i>). Typical value = 0.
            '''

        })
    '''
    Deadband (<i>Kr</i>). Typical value = 0.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    kv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fast raise/lower contact setting (<i>Kv</i>) (&gt; 0). Typical value =
            0,05.
            '''

        })
    '''
    Fast raise/lower contact setting (<i>Kv</i>) (&gt; 0). Typical value
    = 0,05.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1,83.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1,83.
    '''

    trh: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rheostat travel time (<i>Trh</i>) (&gt; 0). Typical value = 20.
            '''

        })
    '''
    Rheostat travel time (<i>Trh</i>) (&gt; 0). Typical value = 20.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt;= 0). Typical
    value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcDC3A1(ExcitationSystemDynamics):
    '''
    Modified old IEEE type 3 excitation system.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>).
            true = lower limit of zero is applied to integrator output
            false = lower limit of zero not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>).
    true = lower limit of zero is applied to integrator output
    false = lower limit of zero not applied to integrator output.
    Typical value = true.
    '''

    vblim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Vb limiter indicator.
            true = exciter <i>Vbmax</i> limiter is active
            false = <i>Vb1max</i> is active.
            Typical value = true.
            '''

        })
    '''
    Vb limiter indicator.
    true = exciter <i>Vbmax</i> limiter is active
    false = <i>Vb1max</i> is active.
    Typical value = true.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 300.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 300.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>Kf</i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>Ki</i>) (&gt;= 0). Typical value
            = 4,83.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>Ki</i>) (&gt;= 0). Typical value
    = 4,83.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>Kp</i>) (&gt;= 0). Typical value
            = 4,37.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>Kp</i>) (&gt;= 0). Typical value
    = 4,37.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,01.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,01.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 1,83.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 1,83.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;= 0).
            Typical value = 0,675.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;=
    0). Typical value = 0,675.
    '''

    vb1max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Available exciter voltage limiter (<i>Vb1max</i>) (&gt; 0). Typical value
            = 11,63.
            '''

        })
    '''
    Available exciter voltage limiter (<i>Vb1max</i>) (&gt; 0). Typical
    value = 11,63.
    '''

    vbmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Available exciter voltage limiter (<i>Vbmax</i>) (&gt; 0). Typical value
            = 11,63.
            '''

        })
    '''
    Available exciter voltage limiter (<i>Vbmax</i>) (&gt; 0). Typical
    value = 11,63.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC3A1.vrmin).
            Typical value = 5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; ExcDC3A1.vrmin).
    Typical value = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC3A1.vrmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0 and &lt; ExcDC3A1.vrmax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcELIN1(ExcitationSystemDynamics):
    '''
    Static PI transformer fed excitation system ELIN (VATECH) - simplified
    model. This model represents an all-static excitation system. A PI voltage
    controller establishes a desired field current set point for a proportional
    current controller. The integrator of the PI controller has a follow-up
    input to match its signal to the present field current. A power system
    stabilizer with power input is included in the model.
    '''

    dpnf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller follow up deadband (<i>Dpnf</i>). Typical value = 0.
            '''

        })
    '''
    Controller follow up deadband (<i>Dpnf</i>). Typical value = 0.
    '''

    efmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum open circuit excitation voltage (<i>Efmax</i>) (&gt; ExcELIN1.efmin).
            Typical value = 5.
            '''

        })
    '''
    Maximum open circuit excitation voltage (<i>Efmax</i>) (&gt; ExcELIN1.efmin).
    Typical value = 5.
    '''

    efmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum open circuit excitation voltage (<i>Efmin</i>) (&lt; ExcELIN1.efmax).
            Typical value = -5.
            '''

        })
    '''
    Minimum open circuit excitation voltage (<i>Efmin</i>) (&lt; ExcELIN1.efmax).
    Typical value = -5.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain 1 (<i>Ks1</i>). Typical value = 0.
            '''

        })
    '''
    Stabilizer gain 1 (<i>Ks1</i>). Typical value = 0.
    '''

    ks2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain 2 (<i>Ks2</i>). Typical value = 0.
            '''

        })
    '''
    Stabilizer gain 2 (<i>Ks2</i>). Typical value = 0.
    '''

    smax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer limit output (<i>smax</i>). Typical value = 0,1.
            '''

        })
    '''
    Stabilizer limit output (<i>smax</i>). Typical value = 0,1.
    '''

    tfi: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current transducer time constant (<i>Tfi</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Current transducer time constant (<i>Tfi</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tnu: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller reset time constant (<i>Tnu</i>) (&gt;= 0). Typical value =
            2.
            '''

        })
    '''
    Controller reset time constant (<i>Tnu</i>) (&gt;= 0). Typical value
    = 2.
    '''

    ts1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer phase lag time constant (<i>Ts1</i>) (&gt;= 0). Typical value
            = 1.
            '''

        })
    '''
    Stabilizer phase lag time constant (<i>Ts1</i>) (&gt;= 0). Typical
    value = 1.
    '''

    ts2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer filter time constant (<i>Ts2</i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Stabilizer filter time constant (<i>Ts2</i>) (&gt;= 0). Typical value
    = 1.
    '''

    tsw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer parameters (<i>Tsw</i>) (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Stabilizer parameters (<i>Tsw</i>) (&gt;= 0). Typical value = 3.
    '''

    vpi: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current controller gain (<i>Vpi</i>). Typical value = 12,45.
            '''

        })
    '''
    Current controller gain (<i>Vpi</i>). Typical value = 12,45.
    '''

    vpnf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller follow up gain (<i>Vpnf</i>). Typical value = 2.
            '''

        })
    '''
    Controller follow up gain (<i>Vpnf</i>). Typical value = 2.
    '''

    vpu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage controller proportional gain (<i>Vpu</i>). Typical value = 34,5.
            '''

        })
    '''
    Voltage controller proportional gain (<i>Vpu</i>). Typical value =
    34,5.
    '''

    xe: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation transformer effective reactance (<i>Xe</i>) (&gt;= 0). <i>Xe</i>
            represents the regulation of the transformer/rectifier unit. Typical value
            = 0,06.
            '''

        })
    '''
    Excitation transformer effective reactance (<i>Xe</i>) (&gt;= 0). <i>Xe</i>
    represents the regulation of the transformer/rectifier unit. Typical
    value = 0,06.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcELIN2(ExcitationSystemDynamics):
    '''
    Detailed excitation system ELIN (VATECH). This model represents an all-static
    excitation system. A PI voltage controller establishes a desired field
    current set point for a proportional current controller. The integrator
    of the PI controller has a follow-up input to match its signal to the present
    field current. Power system stabilizer models used in conjunction with
    this excitation system model: PssELIN2, PssIEEE2B, Pss2B.
    '''

    efdbas: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Efdbas</i>). Typical value = 0,1.
            '''

        })
    '''
    Gain (<i>Efdbas</i>). Typical value = 0,1.
    '''

    iefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>I</i><i><sub>efmax</sub></i>) (&gt; ExcELIN2.iefmin). Typical
            value = 1.
            '''

        })
    '''
    Limiter (<i>I</i><i><sub>efmax</sub></i>) (&gt; ExcELIN2.iefmin). Typical
    value = 1.
    '''

    iefmax2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum open circuit excitation voltage (<i>I</i><i><sub>efmax2</sub></i>).
            Typical value = -5.
            '''

        })
    '''
    Minimum open circuit excitation voltage (<i>I</i><i><sub>efmax2</sub></i>).
    Typical value = -5.
    '''

    iefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>I</i><i><sub>efmin</sub></i>) (&lt; ExcELIN2.iefmax). Typical
            value = 1.
            '''

        })
    '''
    Limiter (<i>I</i><i><sub>efmin</sub></i>) (&lt; ExcELIN2.iefmax). Typical
    value = 1.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator input gain (<i>K1</i>). Typical value = 0.
            '''

        })
    '''
    Voltage regulator input gain (<i>K1</i>). Typical value = 0.
    '''

    k1ec: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator input limit (<i>K1ec</i>). Typical value = 2.
            '''

        })
    '''
    Voltage regulator input limit (<i>K1ec</i>). Typical value = 2.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K2</i>). Typical value = 5.
            '''

        })
    '''
    Gain (<i>K2</i>). Typical value = 5.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K3</i>). Typical value = 0,1.
            '''

        })
    '''
    Gain (<i>K3</i>). Typical value = 0,1.
    '''

    k4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K4</i>). Typical value = 0.
            '''

        })
    '''
    Gain (<i>K4</i>). Typical value = 0.
    '''

    kd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage controller derivative gain (<i>Kd1</i>). Typical value = 34,5.
            '''

        })
    '''
    Voltage controller derivative gain (<i>Kd1</i>). Typical value = 34,5.
    '''

    ke2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ke2</i>). Typical value = 0,1.
            '''

        })
    '''
    Gain (<i>Ke2</i>). Typical value = 0,1.
    '''

    ketb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ketb</i>). Typical value = 0,06.
            '''

        })
    '''
    Gain (<i>Ketb</i>). Typical value = 0,06.
    '''

    pid1max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller follow up gain (<i>PID1max</i>). Typical value = 2.
            '''

        })
    '''
    Controller follow up gain (<i>PID1max</i>). Typical value = 2.
    '''

    seve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>1</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0.
    '''

    seve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>Ve</i><i><sub>2</sub></i>, back of commutating reactance (<i>Se[Ve</i><i><sub>2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 1.
    '''

    tb1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage controller derivative washout time constant (<i>Tb1</i>) (&gt;=
            0). Typical value = 12,45.
            '''

        })
    '''
    Voltage controller derivative washout time constant (<i>Tb1</i>) (&gt;=
    0). Typical value = 12,45.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Te</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Time constant (<i>Te</i>) (&gt;= 0). Typical value = 0.
    '''

    te2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time Constant (<i>T</i><i><sub>e2</sub></i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Time Constant (<i>T</i><i><sub>e2</sub></i>) (&gt;= 0). Typical value
    = 1.
    '''

    ti1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller follow up deadband (<i>Ti1</i>). Typical value = 0.
            '''

        })
    '''
    Controller follow up deadband (<i>Ti1</i>). Typical value = 0.
    '''

    ti3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>i3</sub></i>) (&gt;= 0). Typical value =
            3.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>i3</sub></i>) (&gt;= 0). Typical value
    = 3.
    '''

    ti4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>i4</sub></i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>i4</sub></i>) (&gt;= 0). Typical value
    = 0.
    '''

    tr4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>r4</sub></i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>r4</sub></i>) (&gt;= 0). Typical value
    = 1.
    '''

    upmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Upmax</i>) (&gt; ExcELIN2.upmin). Typical value = 3.
            '''

        })
    '''
    Limiter (<i>Upmax</i>) (&gt; ExcELIN2.upmin). Typical value = 3.
    '''

    upmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Upmin</i>) (&lt; ExcELIN2.upmax). Typical value = 0.
            '''

        })
    '''
    Limiter (<i>Upmin</i>) (&lt; ExcELIN2.upmax). Typical value = 0.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 3.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 3.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0). Typical
            value = 0.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>Ve</i><i><sub>2</sub></i>) (&gt; 0).
    Typical value = 0.
    '''

    xp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation transformer effective reactance (<i>Xp</i>). Typical value =
            1.
            '''

        })
    '''
    Excitation transformer effective reactance (<i>Xp</i>). Typical value
    = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcHU(ExcitationSystemDynamics):
    '''
    Hungarian excitation system, with built-in voltage transducer.
    '''

    ke: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage base conversion constant (<i>Ke</i>). Typical value = 4,666.
            '''

        })
    '''
    Voltage base conversion constant (<i>Ke</i>). Typical value = 4,666.
    '''

    ki: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current base conversion constant (<i>Ki</i>). Typical value = 0,21428.
            '''

        })
    '''
    Current base conversion constant (<i>Ki</i>). Typical value = 0,21428.
    '''

    ae: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Major loop PI tag gain factor (<i>Ae</i>). Typical value = 3.
            '''

        })
    '''
    Major loop PI tag gain factor (<i>Ae</i>). Typical value = 3.
    '''

    ai: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minor loop PI tag gain factor (<i>Ai</i>). Typical value = 22.
            '''

        })
    '''
    Minor loop PI tag gain factor (<i>Ai</i>). Typical value = 22.
    '''

    atr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR constant (<i>Atr</i>). Typical value = 2,19.
            '''

        })
    '''
    AVR constant (<i>Atr</i>). Typical value = 2,19.
    '''

    emax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage control signal upper limit on AVR base (<i>Emax</i>) (&gt;
            ExcHU.emin). Typical value = 0,996.
            '''

        })
    '''
    Field voltage control signal upper limit on AVR base (<i>Emax</i>)
    (&gt; ExcHU.emin). Typical value = 0,996.
    '''

    emin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage control signal lower limit on AVR base (<i>Emin</i>) (&lt;
            ExcHU.emax). Typical value = -0,866.
            '''

        })
    '''
    Field voltage control signal lower limit on AVR base (<i>Emin</i>)
    (&lt; ExcHU.emax). Typical value = -0,866.
    '''

    imax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Major loop PI tag output signal upper limit (<i>Imax</i>) (&gt; ExcHU.imin).
            Typical value = 2,19.
            '''

        })
    '''
    Major loop PI tag output signal upper limit (<i>Imax</i>) (&gt; ExcHU.imin).
    Typical value = 2,19.
    '''

    imin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Major loop PI tag output signal lower limit (<i>Imin</i>) (&lt; ExcHU.imax).
            Typical value = 0,1.
            '''

        })
    '''
    Major loop PI tag output signal lower limit (<i>Imin</i>) (&lt; ExcHU.imax).
    Typical value = 0,1.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Major loop PI tag integration time constant (<i>Te</i>) (&gt;= 0). Typical
            value = 0,154.
            '''

        })
    '''
    Major loop PI tag integration time constant (<i>Te</i>) (&gt;= 0).
    Typical value = 0,154.
    '''

    ti: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minor loop PI control tag integration time constant (<i>Ti</i>) (&gt;=
            0). Typical value = 0,01333.
            '''

        })
    '''
    Minor loop PI control tag integration time constant (<i>Ti</i>) (&gt;=
    0). Typical value = 0,01333.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>Tr</i>) (&gt;= 0). If a voltage compensator is
            used in conjunction with this excitation system model, <i>Tr </i>should
            be set to 0. Typical value = 0,01.
            '''

        })
    '''
    Filter time constant (<i>Tr</i>) (&gt;= 0). If a voltage compensator
    is used in conjunction with this excitation system model, <i>Tr </i>should
    be set to 0. Typical value = 0,01.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC1A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC1A model. The model represents the field-controlled
    alternator-rectifier excitation systems designated type AC1A. These excitation
    systems consist of an alternator main exciter with non-controlled rectifiers.
    Reference: IEEE 421.5-2005, 6.1.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,03.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 400.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,2.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 0,38.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 0,38.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,03.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 14,5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 14,5.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -14,5.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -14,5.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 4,18.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 4,18.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 3,14.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 3,14.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 6,03.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>)
    (&gt; 0). Typical value = 6,03.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -5,43.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>)
    (&lt; 0). Typical value = -5,43.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC2A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC2A model. The model represents a high initial response
    field-controlled alternator-rectifier excitation system. The alternator
    main exciter is used with non-controlled rectifiers. The type AC2A model
    is similar to that of type AC1A except for the inclusion of exciter time
    constant compensation and exciter field current limiting elements.
    Reference: IEEE 421.5-2005, 6.2.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,037.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,037.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,012.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,012.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 400.
    '''

    kb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second stage regulator gain (<i>K</i><i><sub>B</sub></i>) (&gt; 0). Typical
            value = 25.
            '''

        })
    '''
    Second stage regulator gain (<i>K</i><i><sub>B</sub></i>) (&gt; 0).
    Typical value = 25.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,28.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,28.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 0,35.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 0,35.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,03.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current feedback gain (<i>K</i><i><sub>H</sub></i>) (&gt;=
            0). Typical value = 1.
            '''

        })
    '''
    Exciter field current feedback gain (<i>K</i><i><sub>H</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,6.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,6.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 8.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 8.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -8.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -8.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 4,4.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 4,4.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 3,3.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 3,3.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>)
            (&gt; 0). Typical value = 4,4.
            '''

        })
    '''
    Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>)
    (&gt; 0). Typical value = 4,4.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 105.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>)
    (&gt; 0). Typical value = 105.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -95.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>)
    (&lt; 0). Typical value = -95.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC3A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC3A model. The model represents the field-controlled
    alternator-rectifier excitation systems designated type AC3A. These excitation
    systems include an alternator main exciter with non-controlled rectifiers.
    The exciter employs self-excitation, and the voltage regulator power is
    derived from the exciter output voltage. Therefore, this system has an
    additional nonlinearity, simulated by the use of a multiplier whose inputs
    are the voltage regulator command signal, <i>Va</i>, and the exciter output
    voltage, <i>Efd</i>, times <i>K</i><i><sub>R</sub></i>. This model is applicable
    to excitation systems employing static voltage regulators.
    Reference: IEEE 421.5-2005, 6.3.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 1,143.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 1,143.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    efdn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of <i>Efd </i>at which feedback gain changes (<i>E</i><i><sub>FDN</sub></i>)
            (&gt; 0). Typical value = 2,36.
            '''

        })
    '''
    Value of <i>Efd </i>at which feedback gain changes (<i>E</i><i><sub>FDN</sub></i>)
    (&gt; 0). Typical value = 2,36.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 45,62.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 45,62.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,104.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,104.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 0,499.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 0,499.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,143.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,143.
    '''

    kn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>N</sub></i>)
            (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>N</sub></i>)
    (&gt;= 0). Typical value = 0,05.
    '''

    kr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Constant associated with regulator and alternator field power supply (<i>K</i><i><sub>R</sub></i>)
            (&gt; 0). Typical value = 3,77.
            '''

        })
    '''
    Constant associated with regulator and alternator field power supply
    (<i>K</i><i><sub>R</sub></i>) (&gt; 0). Typical value = 3,77.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,013.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,013.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,17.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,17.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 1.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -0,95.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -0,95.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 6,24.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 6,24.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 4,68.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 4,68.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>)
            (&gt;= 0). Typical value = 16.
            '''

        })
    '''
    Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>)
    (&gt;= 0). Typical value = 16.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC4A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC4A model. The model represents type AC4A alternator-supplied
    controlled-rectifier excitation system which is quite different from the
    other types of AC systems. This high initial response excitation system
    utilizes a full thyristor bridge in the exciter output circuit. The voltage
    regulator controls the firing of the thyristor bridges. The exciter alternator
    uses an independent voltage regulator to control its output voltage to
    a constant value. These effects are not modelled; however, transient loading
    effects on the exciter alternator are included.
    Reference: IEEE 421.5-2005, 6.4.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 200.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 200.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,015.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,015.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 10.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 10.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
            (&gt; 0). Typical value = 10.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
    (&gt; 0). Typical value = 10.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
            (&lt; 0). Typical value = -10.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
    (&lt; 0). Typical value = -10.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 5,64.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 5,64.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -4,53.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -4,53.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC5A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC5A model. The model represents a simplified model
    for brushless excitation systems. The regulator is supplied from a source,
    such as a permanent magnet generator, which is not affected by system disturbances.
    Unlike other AC models, this model uses loaded rather than open circuit
    exciter saturation data in the same way as it is used for the DC models.
    Because the model has been widely implemented by the industry, it is sometimes
    used to represent other types of systems when either detailed data for
    them are not available or simplified models are required.
    Reference: IEEE 421.5-2005, 6.5.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,86.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,86.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,5.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
            (&gt; 0). Typical value = 5,6.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
    (&gt; 0). Typical value = 5,6.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
            (&gt; 0). Typical value = 4,2.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
    (&gt; 0). Typical value = 4,2.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 400.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 400.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,03.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,02.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F1</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F1</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F2</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F2</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    tf3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F3</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F3</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 7,3.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 7,3.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -7,3.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -7,3.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC6A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC6A model. The model represents field-controlled
    alternator-rectifier excitation systems with system-supplied electronic
    voltage regulators. The maximum output of the regulator, <i>V</i><i><sub>R</sub></i>,
    is a function of terminal voltage, <i>V</i><i><sub>T</sub></i>. The field
    current limiter included in the original model AC6A remains in the 2005
    update.
    Reference: IEEE 421.5-2005, 6.6.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>])</i>
            (&gt;= 0). Typical value = 0,214.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>])</i>
    (&gt;= 0). Typical value = 0,214.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,044.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,044.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 536.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 536.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,173.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,173.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 1,91.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 1,91.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1,6.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1,6.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter gain (<i>K</i><i><sub>H</sub></i>) (&gt;=
            0). Typical value = 92.
            '''

        })
    '''
    Exciter field current limiter gain (<i>K</i><i><sub>H</sub></i>) (&gt;=
    0). Typical value = 92.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0).
            Typical value = 0,086.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;=
    0). Typical value = 0,086.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 9.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 9.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 3.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 3.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1.
    '''

    th: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter time constant (<i>T</i><i><sub>H</sub></i>)
            (&gt; 0). Typical value = 0,08.
            '''

        })
    '''
    Exciter field current limiter time constant (<i>T</i><i><sub>H</sub></i>)
    (&gt; 0). Typical value = 0,08.
    '''

    tj: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limiter time constant (<i>T</i><i><sub>J</sub></i>)
            (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Exciter field current limiter time constant (<i>T</i><i><sub>J</sub></i>)
    (&gt;= 0). Typical value = 0,02.
    '''

    tk: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>K</sub></i>) (&gt;= 0).
            Typical value = 0,18.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>K</sub></i>) (&gt;=
    0). Typical value = 0,18.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 75.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 75.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (V<sub>AMIN</sub>) (&lt; 0). Typical value
            = -75.
            '''

        })
    '''
    Minimum voltage regulator output (V<sub>AMIN</sub>) (&lt; 0). Typical
    value = -75.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 7,4.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 7,4.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 5,55.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 5,55.
    '''

    vfelim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>V</i><i><sub>FELIM</sub></i>)
            (&gt; 0). Typical value = 19.
            '''

        })
    '''
    Exciter field current limit reference (<i>V</i><i><sub>FELIM</sub></i>)
    (&gt; 0). Typical value = 19.
    '''

    vhmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field current limiter signal reference (<i>V</i><i><sub>HMAX</sub></i>)
            (&gt; 0). Typical value = 75.
            '''

        })
    '''
    Maximum field current limiter signal reference (<i>V</i><i><sub>HMAX</sub></i>)
    (&gt; 0). Typical value = 75.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 44.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 44.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -36.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -36.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC7B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC7B model. The model represents excitation systems
    which consist of an AC alternator with either stationary or rotating rectifiers
    to produce the DC field requirements. It is an upgrade to earlier AC excitation
    systems, which replace only the controls but retain the AC alternator and
    diode rectifier bridge.
    Reference: IEEE 421.5-2005, 6.7. Note, however, that in IEEE 421.5-2005,
    the [1 / <i>sT</i><i><sub>E</sub></i>] block is shown as [1 / (1 + <i>sT</i><i><sub>E</sub></i>)],
    which is incorrect.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,44.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,44.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,075.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,075.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,18.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,18.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 0,02.
    '''

    kdr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator derivative gain (<i>K</i><i><sub>DR</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Voltage regulator derivative gain (<i>K</i><i><sub>DR</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F1</sub></i>)
            (&gt;= 0). Typical value = 0,212.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F1</sub></i>)
    (&gt;= 0). Typical value = 0,212.
    '''

    kf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F2</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F2</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    kf3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F3</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F3</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    kia: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt;= 0).
            Typical value = 59,69.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt;=
    0). Typical value = 59,69.
    '''

    kir: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>) (&gt;= 0).
            Typical value = 4,24.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>) (&gt;=
    0). Typical value = 4,24.
    '''

    kl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field voltage lower limit parameter (<i>K</i><i><sub>L</sub></i>).
            Typical value = 10.
            '''

        })
    '''
    Exciter field voltage lower limit parameter (<i>K</i><i><sub>L</sub></i>).
    Typical value = 10.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
            0). Typical value = 4,96.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
    0). Typical value = 4,96.
    '''

    kpa: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>K</i><i><sub>PA</sub></i>) (&gt;
            0 if ExcIEEEAC7B.kia = 0). Typical value = 65,36.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>K</i><i><sub>PA</sub></i>)
    (&gt; 0 if ExcIEEEAC7B.kia = 0). Typical value = 65,36.
    '''

    kpr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>) (&gt;
            0 if ExcIEEEAC7B.kir = 0). Typical value = 4,24.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>)
    (&gt; 0 if ExcIEEEAC7B.kir = 0). Typical value = 4,24.
    '''

    tdr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>DR</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>DR</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,1.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,1.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 1.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -0,95.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -0,95.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 6,3.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 6,3.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 3,02.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 3,02.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>).
            Typical value = 6,9.
            '''

        })
    '''
    Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>).
    Typical value = 6,9.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 5,79.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 5,79.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -5,79.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -5,79.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEAC8B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type AC8B model. This model represents a PID voltage regulator
    with either a brushless exciter or DC exciter. The AVR in this model consists
    of PID control, with separate constants for the proportional (<i>K</i><i><sub>PR</sub></i>),
    integral (<i>K</i><i><sub>IR</sub></i>), and derivative (<i>K</i><i><sub>DR</sub></i>)
    gains. The representation of the brushless exciter (<i>T</i><i><sub>E</sub></i>,
    <i>K</i><i><sub>E</sub></i>, <i>S</i><i><sub>E</sub></i>, <i>K</i><i><sub>C</sub></i>,
    <i>K</i><i><sub>D</sub></i>) is similar to the model type AC2A. The type
    AC8B model can be used to represent static voltage regulators applied to
    brushless excitation systems. Digitally based voltage regulators feeding
    DC rotating main exciters can be represented with the AC type AC8B model
    with the parameters <i>K</i><i><sub>C</sub></i> and <i>K</i><i><sub>D</sub></i>
    set to 0. For thyristor power stages fed from the generator terminals,
    the limits <i>V</i><i><sub>RMAX</sub></i> and <i>V</i><i><sub>RMIN</sub></i><i>
    </i>should be a function of terminal voltage: V<i><sub>T</sub></i> x <i>V</i><i><sub>RMAX</sub></i><sub>
    </sub>and <i>V</i><i><sub>T</sub></i> x <i>V</i><i><sub>RMIN</sub></i>.
    Reference: IEEE 421.5-2005, 6.8.
    '''

    seve1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E1</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,3.
    '''

    seve2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>V</i><i><sub>E2</sub></i>, back of commutating reactance (<i>S</i><i><sub>E</sub></i><i>[V</i><i><sub>E2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 3.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 1.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 1.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,55.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,55.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
            (&gt;= 0). Typical value = 1,1.
            '''

        })
    '''
    Demagnetizing factor, a function of exciter alternator reactances (<i>K</i><i><sub>D</sub></i>)
    (&gt;= 0). Typical value = 1,1.
    '''

    kdr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator derivative gain (<i>K</i><i><sub>DR</sub></i>) (&gt;=
            0). Typical value = 10.
            '''

        })
    '''
    Voltage regulator derivative gain (<i>K</i><i><sub>DR</sub></i>) (&gt;=
    0). Typical value = 10.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kir: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>) (&gt;= 0).
            Typical value = 5.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>) (&gt;=
    0). Typical value = 5.
    '''

    kpr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>) (&gt;
            0 if ExcIEEEAC8B.kir = 0). Typical value = 80.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>)
    (&gt; 0 if ExcIEEEAC8B.kir = 0). Typical value = 80.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tdr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>DR</sub></i>) (&gt; 0). Typical value
            = 0,1.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>DR</sub></i>) (&gt; 0). Typical
    value = 0,1.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,2.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,2.
    '''

    ve1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0). Typical
            value = 6,5.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E1</sub></i>) (&gt; 0).
    Typical value = 6,5.
    '''

    ve2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter alternator output voltages back of commutating reactance at which
            saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0). Typical
            value = 9.
            '''

        })
    '''
    Exciter alternator output voltages back of commutating reactance at
    which saturation is defined (<i>V</i><i><sub>E2</sub></i>) (&gt; 0).
    Typical value = 9.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    vfemax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>).
            Typical value = 6.
            '''

        })
    '''
    Exciter field current limit reference (<i>V</i><i><sub>FEMAX</sub></i>).
    Typical value = 6.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 35.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 35.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEDC1A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type DC1A model. This model represents field-controlled
    DC commutator exciters with continuously acting voltage regulators (especially
    the direct-acting rheostatic, rotating amplifier, and magnetic amplifier
    types). Because this model has been widely implemented by the industry,
    it is sometimes used to represent other types of systems when detailed
    data for them are not available or when a simplified model is required.
    Reference: IEEE 421.5-2005, 5.1.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output.
            true = a lower limit of zero is applied to integrator output
            false = a lower limit of zero is not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output.
    true = a lower limit of zero is applied to integrator output
    false = a lower limit of zero is not applied to integrator output.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0.33.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0.33.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    uelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input (<i>uelin</i>).
            true = input is connected to the HV gate
            false = input connects to the error signal.
            Typical value = true.
            '''

        })
    '''
    UEL input (<i>uelin</i>).
    true = input is connected to the HV gate
    false = input connects to the error signal.
    Typical value = true.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
            (&gt; 0). Typical value = 3,1.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
    (&gt; 0). Typical value = 3,1.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
            (&gt; 0). Typical value = 2,3.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
    (&gt; 0). Typical value = 2,3.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 46.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 46.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 0.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0.1.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0.1.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,06.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,06.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,46.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,46.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            ExcIEEEDC1A.vrmin). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    ExcIEEEDC1A.vrmin). Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0 and &lt; ExcIEEEDC1A.vrmax). Typical value = -0,9.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0 and &lt; ExcIEEEDC1A.vrmax). Typical value = -0,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEDC2A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type DC2A model. This model represents field-controlled
    DC commutator exciters with continuously acting voltage regulators having
    supplies obtained from the generator or auxiliary bus. It differs from
    the type DC1A model only in the voltage regulator output limits, which
    are now proportional to terminal voltage <i>V</i><i><sub>T</sub></i>.
    It is representative of solid-state replacements for various forms of older
    mechanical and rotating amplifier regulating equipment connected to DC
    commutator exciters.
    Reference: IEEE 421.5-2005, 5.2.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,279.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,279.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,117.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,117.
    '''

    uelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input (<i>uelin</i>).
            true = input is connected to the HV gate
            false = input connects to the error signal.
            Typical value = true.
            '''

        })
    '''
    UEL input (<i>uelin</i>).
    true = input is connected to the HV gate
    false = input connects to the error signal.
    Typical value = true.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
            (&gt; 0). Typical value = 3,05.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
    (&gt; 0). Typical value = 3,05.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
            (&gt; 0). Typical value = 2,29.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
    (&gt; 0). Typical value = 2,29.
    '''

    exclim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output. Typical value = - 999 which means that there is no limit applied.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output. Typical value = - 999 which means that there is no limit applied.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 300.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 300.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,1.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,01.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,01.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,33.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 1,33.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt; 0). Typical value = 0,675.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt; 0). Typical value = 0,675.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>)(&gt;
            ExcIEEEDC2A.vrmin). Typical value = 4,95.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>)(&gt;
    ExcIEEEDC2A.vrmin). Typical value = 4,95.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0 and &lt; ExcIEEEDC2A.vrmax). Typical value = -4,9.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0 and &lt; ExcIEEEDC2A.vrmax). Typical value = -4,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEDC3A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type DC3A model. This model represents older systems, in
    particular those DC commutator exciters with non-continuously acting regulators
    that were commonly used before the development of the continuously acting
    varieties. These systems respond at basically two different rates, depending
    upon the magnitude of voltage error. For small errors, adjustment is made
    periodically with a signal to a motor-operated rheostat. Larger errors
    cause resistors to be quickly shorted or inserted and a strong forcing
    signal applied to the exciter. Continuous motion of the motor-operated
    rheostat occurs for these larger error signals, even though it is bypassed
    by contactor action.
    Reference: IEEE 421.5-2005, 5.3.
    '''

    exclim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
            output.
            true = a lower limit of zero is applied to integrator output
            false = a lower limit of zero is not applied to integrator output.
            Typical value = true.
            '''

        })
    '''
    (<i>exclim</i>). IEEE standard is ambiguous about lower limit on exciter
    output.
    true = a lower limit of zero is applied to integrator output
    false = a lower limit of zero is not applied to integrator output.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,267.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,267.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,068.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,068.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
            (&gt; 0). Typical value = 3,375.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
    (&gt; 0). Typical value = 3,375.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
            (&gt; 0). Typical value = 3,15.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
    (&gt; 0). Typical value = 3,15.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 0,05.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 0,05.
    '''

    kv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fast raise/lower contact setting (<i>K</i><i><sub>V</sub></i>) (&gt; 0).
            Typical value = 0,05.
            '''

        })
    '''
    Fast raise/lower contact setting (<i>K</i><i><sub>V</sub></i>) (&gt;
    0). Typical value = 0,05.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,5.
    '''

    trh: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rheostat travel time (<i>T</i><i><sub>RH</sub></i>) (&gt; 0). Typical value
            = 20.
            '''

        })
    '''
    Rheostat travel time (<i>T</i><i><sub>RH</sub></i>) (&gt; 0). Typical
    value = 20.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEDC4B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type DC4B model. These excitation systems utilize a field-controlled
    DC commutator exciter with a continuously acting voltage regulator having
    supplies obtained from the generator or auxiliary bus.
    Reference: IEEE 421.5-2005, 5.4.
    '''

    oelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input (<i>OELin</i>).
            true = LV gate
            false = subtract from error signal.
            Typical value = true.
            '''

        })
    '''
    OEL input (<i>OELin</i>).
    true = LV gate
    false = subtract from error signal.
    Typical value = true.
    '''

    seefd1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,08.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD1</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD1</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,08.
    '''

    seefd2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter saturation function value at the corresponding exciter voltage,
            <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
            (&gt;= 0). Typical value = 0,27.
            '''

        })
    '''
    Exciter saturation function value at the corresponding exciter voltage,
    <i>E</i><i><sub>FD2</sub></i> (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>FD2</sub></i><i>]</i>)
    (&gt;= 0). Typical value = 0,27.
    '''

    uelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input (<i>UELin</i>).
            true = HV gate
            false = add to error signal.
            Typical value = true.
            '''

        })
    '''
    UEL input (<i>UELin</i>).
    true = HV gate
    false = add to error signal.
    Typical value = true.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
            (&gt; 0). Typical value = 1,75.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD1</sub></i>)
    (&gt; 0). Typical value = 1,75.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
            (&gt; 0). Typical value = 2,33.
            '''

        })
    '''
    Exciter voltage at which exciter saturation is defined (<i>E</i><i><sub>FD2</sub></i>)
    (&gt; 0). Typical value = 2,33.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 1.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 1.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator derivative gain (<i>K</i><i><sub>D</sub></i>) (&gt;= 0). Typical
            value = 20.
            '''

        })
    '''
    Regulator derivative gain (<i>K</i><i><sub>D</sub></i>) (&gt;= 0).
    Typical value = 20.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator integral gain (<i>K</i><i><sub>I</sub></i>) (&gt;= 0). Typical
            value = 20.
            '''

        })
    '''
    Regulator integral gain (<i>K</i><i><sub>I</sub></i>) (&gt;= 0). Typical
    value = 20.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator proportional gain (<i>K</i><i><sub>P</sub></i>) (&gt;= 0). Typical
            value = 20.
            '''

        })
    '''
    Regulator proportional gain (<i>K</i><i><sub>P</sub></i>) (&gt;= 0).
    Typical value = 20.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,2.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,2.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator derivative filter time constant (<i>T</i><i><sub>D</sub></i>)
            (&gt; 0 if ExcIEEEDC4B.kd &gt; 0). Typical value = 0,01.
            '''

        })
    '''
    Regulator derivative filter time constant (<i>T</i><i><sub>D</sub></i>)
    (&gt; 0 if ExcIEEEDC4B.kd &gt; 0). Typical value = 0,01.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,8.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    vemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum exciter voltage output (<i>V</i><i><sub>EMIN</sub></i>) (&lt;=
    0). Typical value = 0.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            ExcIEEEDC4B.vrmin). Typical value = 2,7.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    ExcIEEEDC4B.vrmin). Typical value = 2,7.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
            0 and &lt; ExcIEEEDC4B.vrmax). Typical value = -0,9.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
    0 and &lt; ExcIEEEDC4B.vrmax). Typical value = -0,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST1A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST1A model. This model represents systems in which
    excitation power is supplied through a transformer from the generator terminals
    (or the unit�s auxiliary bus) and is regulated by a controlled rectifier.
    The maximum exciter voltage available from such systems is directly related
    to the generator terminal voltage.
    Reference: IEEE 421.5-2005, 7.1.
    '''

    pssin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector of the Power System Stabilizer (PSS) input (<i>PSSin</i>).
            true = PSS input (<i>Vs</i>) added to error signal
            false = PSS input (<i>Vs</i>) added to voltage regulator output.
            Typical value = true.
            '''

        })
    '''
    Selector of the Power System Stabilizer (PSS) input (<i>PSSin</i>).
    true = PSS input (<i>Vs</i>) added to error signal
    false = PSS input (<i>Vs</i>) added to voltage regulator output.
    Typical value = true.
    '''

    ilr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit reference (<i>I</i><i><sub>LR</sub></i><i>)</i>.
            Typical value = 0.
            '''

        })
    '''
    Exciter output current limit reference (<i>I</i><i><sub>LR</sub></i><i>)</i>.
    Typical value = 0.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 190.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 190.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,08.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,08.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    klr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limiter gain (<i>K</i><i><sub>LR</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    Exciter output current limiter gain (<i>K</i><i><sub>LR</sub></i>).
    Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 10.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 10.
    '''

    tb1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B1</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B1</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    tc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C1</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C1</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    uelin: Optional[ ExcIEEEST1AUELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector of the connection of the UEL input (<i>UELin</i>). Typical value
            = ignoreUELsignal.
            '''

        })
    '''
    Selector of the connection of the UEL input (<i>UELin</i>). Typical
    value = ignoreUELsignal.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
            0). Typical value = 14,5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>AMAX</sub></i>) (&gt;
    0). Typical value = 14,5.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -14,5.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -14,5.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
            (&gt; 0). Typical value = 999.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
    (&gt; 0). Typical value = 999.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
            (&lt; 0). Typical value = -999.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
    (&lt; 0). Typical value = -999.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 7,8.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>)
    (&gt; 0). Typical value = 7,8.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -6,7.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>)
    (&lt; 0). Typical value = -6,7.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST2A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST2A model. Some static systems use both current and
    voltage sources (generator terminal quantities) to comprise the power source.
    The regulator controls the exciter output through controlled saturation
    of the power transformer components. These compound-source rectifier excitation
    systems are designated type ST2A and are represented by ExcIEEEST2A.
    Reference: IEEE 421.5-2005, 7.2.
    '''

    uelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input (<i>UELin</i>).
            true = HV gate
            false = add to error signal.
            Typical value = true.
            '''

        })
    '''
    UEL input (<i>UELin</i>).
    true = HV gate
    false = add to error signal.
    Typical value = true.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field voltage (<i>E</i><i><sub>FDMax</sub></i>) (&gt;= 0). Typical
            value = 99.
            '''

        })
    '''
    Maximum field voltage (<i>E</i><i><sub>FDMax</sub></i>) (&gt;= 0).
    Typical value = 99.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
            value = 120.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). Typical
    value = 120.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 1,82.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 1,82.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>K</i><i><sub>E</sub></i>).
    Typical value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>K</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 0,05.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
            0). Typical value = 8.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
    0). Typical value = 8.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;=
            0). Typical value = 4,88.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;=
    0). Typical value = 4,88.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt; 0).
            Typical value = 0,15.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;
    0). Typical value = 0,15.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>T</i><i><sub>E</sub></i>) (&gt; 0). Typical value = 0,5.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>V</i><i><sub>RMAX</sub></i>)
    (&gt; 0). Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>) (&lt;=
            0). Typical value = 0.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>V</i><i><sub>RMIN</sub></i>)
    (&lt;= 0). Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST3A(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST3A model. Some static systems utilize a field voltage
    control loop to linearize the exciter control characteristic. This also
    makes the output independent of supply source variations until supply limitations
    are reached. These systems utilize a variety of controlled-rectifier designs:
    full thyristor complements or hybrid bridges in either series or shunt
    configurations. The power source can consist of only a potential source,
    either fed from the machine terminals or from internal windings. Some designs
    can have compound power sources utilizing both machine potential and current.
    These power sources are represented as phasor combinations of machine terminal
    current and voltage and are accommodated by suitable parameters in model
    type ST3A which is represented by ExcIEEEST3A.
    Reference: IEEE 421.5-2005, 7.3.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). This is
            parameter <i>K</i> in the IEEE standard. Typical value = 200.
            '''

        })
    '''
    Voltage regulator gain (<i>K</i><i><sub>A</sub></i>) (&gt; 0). This
    is parameter <i>K</i> in the IEEE standard. Typical value = 200.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,2.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward gain constant of the inner loop field regulator (<i>K</i><i><sub>M</sub></i>)
            (&gt; 0). Typical value = 7,93.
            '''

        })
    '''
    Forward gain constant of the inner loop field regulator (<i>K</i><i><sub>M</sub></i>)
    (&gt; 0). Typical value = 7,93.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
            0). Typical value = 6,15.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
    0). Typical value = 6,15.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
            Typical value = 10.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>B</sub></i>) (&gt;=
    0). Typical value = 10.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>C</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    thetap: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit phase angle (<i>thetap</i>). Typical value = 0.
            '''

        })
    '''
    Potential circuit phase angle (<i>thetap</i>). Typical value = 0.
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward time constant of inner loop field regulator (<i>T</i><i><sub>M</sub></i>)
            (&gt; 0). Typical value = 0,4.
            '''

        })
    '''
    Forward time constant of inner loop field regulator (<i>T</i><i><sub>M</sub></i>)
    (&gt; 0). Typical value = 0,4.
    '''

    vbmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum excitation voltage (<i>V</i><i><sub>BMax</sub></i>) (&gt; 0). Typical
            value = 6,9.
            '''

        })
    '''
    Maximum excitation voltage (<i>V</i><i><sub>BMax</sub></i>) (&gt; 0).
    Typical value = 6,9.
    '''

    vgmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop feedback voltage (<i>V</i><i><sub>GMax</sub></i>) (&gt;=
            0). Typical value = 5,8.
            '''

        })
    '''
    Maximum inner loop feedback voltage (<i>V</i><i><sub>GMax</sub></i>)
    (&gt;= 0). Typical value = 5,8.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
            (&gt; 0). Typical value = 0,2.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>V</i><i><sub>IMAX</sub></i>)
    (&gt; 0). Typical value = 0,2.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
            (&lt; 0). Typical value = -0,2.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>V</i><i><sub>IMIN</sub></i>)
    (&lt; 0). Typical value = -0,2.
    '''

    vmmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop output (<i>V</i><i><sub>MMax</sub></i>) (&gt; 0). Typical
            value = 1.
            '''

        })
    '''
    Maximum inner loop output (<i>V</i><i><sub>MMax</sub></i>) (&gt; 0).
    Typical value = 1.
    '''

    vmmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum inner loop output (<i>V</i><i><sub>MMin</sub></i>) (&lt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Minimum inner loop output (<i>V</i><i><sub>MMin</sub></i>) (&lt;= 0).
    Typical value = 0.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 10.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 10.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -10.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -10.
    '''

    xl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance associated with potential source (<i>X</i><i><sub>L</sub></i>)
            (&gt;= 0). Typical value = 0,081.
            '''

        })
    '''
    Reactance associated with potential source (<i>X</i><i><sub>L</sub></i>)
    (&gt;= 0). Typical value = 0,081.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST4B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST4B model. This model is a variation of the type
    ST3A model, with a proportional plus integral (PI) regulator block replacing
    the lag-lead regulator characteristic that is in the ST3A model. Both potential
    and compound source rectifier excitation systems are modelled. The PI regulator
    blocks have non-windup limits that are represented. The voltage regulator
    of this model is typically implemented digitally.
    Reference: IEEE 421.5-2005, 7.4.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
            (&gt;= 0). Typical value = 0,113.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>K</i><i><sub>C</sub></i>)
    (&gt;= 0). Typical value = 0,113.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
            (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>I</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    kim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain output (<i>K</i><i><sub>IM</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Voltage regulator integral gain output (<i>K</i><i><sub>IM</sub></i>).
    Typical value = 0.
    '''

    kir: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>). Typical
            value = 10,75.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IR</sub></i>). Typical
    value = 10,75.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
            0). Typical value = 9,3.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>P</sub></i>) (&gt;
    0). Typical value = 9,3.
    '''

    kpm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain output (<i>K</i><i><sub>PM</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Voltage regulator proportional gain output (<i>K</i><i><sub>PM</sub></i>).
    Typical value = 1.
    '''

    kpr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>). Typical
            value = 10,75.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>K</i><i><sub>PR</sub></i>).
    Typical value = 10,75.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;= 0).
            Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>A</sub></i>) (&gt;=
    0). Typical value = 0,02.
    '''

    thetap: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit phase angle (<i>thetap</i>). Typical value = 0.
            '''

        })
    '''
    Potential circuit phase angle (<i>thetap</i>). Typical value = 0.
    '''

    vbmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum excitation voltage (<i>V</i><i><sub>BMax</sub></i>) (&gt; 0). Typical
            value = 11,63.
            '''

        })
    '''
    Maximum excitation voltage (<i>V</i><i><sub>BMax</sub></i>) (&gt; 0).
    Typical value = 11,63.
    '''

    vmmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop output (<i>V</i><i><sub>MMax</sub></i>) (&gt; ExcIEEEST4B.vmmin).
            Typical value = 99.
            '''

        })
    '''
    Maximum inner loop output (<i>V</i><i><sub>MMax</sub></i>) (&gt; ExcIEEEST4B.vmmin).
    Typical value = 99.
    '''

    vmmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum inner loop output (<i>V</i><i><sub>MMin</sub></i>) (&lt; ExcIEEEST4B.vmmax).
            Typical value = -99.
            '''

        })
    '''
    Minimum inner loop output (<i>V</i><i><sub>MMin</sub></i>) (&lt; ExcIEEEST4B.vmmax).
    Typical value = -99.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -0,87.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -0,87.
    '''

    xl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance associated with potential source (<i>X</i><i><sub>L</sub></i>)
            (&gt;= 0). Typical value = 0,124.
            '''

        })
    '''
    Reactance associated with potential source (<i>X</i><i><sub>L</sub></i>)
    (&gt;= 0). Typical value = 0,124.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST5B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST5B model. The type ST5B excitation system is a variation
    of the type ST1A model, with alternative overexcitation and underexcitation
    inputs and additional limits.
    The block diagram in the IEEE 421.5 standard has input signal <i>Vc </i>and
    does not indicate the summation point with <i>Vref</i>. The implementation
    of the ExcIEEEST5B shall consider summation point with <i>Vref</i>.
    Reference: IEEE 421.5-2005, 7.5.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier regulation factor (<i>K</i><i><sub>C</sub></i>) (&gt;= 0). Typical
            value = 0,004.
            '''

        })
    '''
    Rectifier regulation factor (<i>K</i><i><sub>C</sub></i>) (&gt;= 0).
    Typical value = 0,004.
    '''

    kr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator gain (<i>K</i><i><sub>R</sub></i>) (&gt; 0). Typical value =
            200.
            '''

        })
    '''
    Regulator gain (<i>K</i><i><sub>R</sub></i>) (&gt; 0). Typical value
    = 200.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Firing circuit time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,004.
            '''

        })
    '''
    Firing circuit time constant (<i>T1</i>) (&gt;= 0). Typical value =
    0,004.
    '''

    tb1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lag time constant (<i>T</i><i><sub>B1</sub></i>) (&gt;= 0). Typical
            value = 6.
            '''

        })
    '''
    Regulator lag time constant (<i>T</i><i><sub>B1</sub></i>) (&gt;= 0).
    Typical value = 6.
    '''

    tb2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lag time constant (<i>T</i><i><sub>B2</sub></i>) (&gt;= 0). Typical
            value = 0,01.
            '''

        })
    '''
    Regulator lag time constant (<i>T</i><i><sub>B2</sub></i>) (&gt;= 0).
    Typical value = 0,01.
    '''

    tc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lead time constant (<i>T</i><i><sub>C1</sub></i>) (&gt;= 0).
            Typical value = 0,8.
            '''

        })
    '''
    Regulator lead time constant (<i>T</i><i><sub>C1</sub></i>) (&gt;=
    0). Typical value = 0,8.
    '''

    tc2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lead time constant (<i>T</i><i><sub>C2</sub></i>) (&gt;= 0).
            Typical value = 0,08.
            '''

        })
    '''
    Regulator lead time constant (<i>T</i><i><sub>C2</sub></i>) (&gt;=
    0). Typical value = 0,08.
    '''

    tob1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL lag time constant (<i>T</i><i><sub>OB1</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    OEL lag time constant (<i>T</i><i><sub>OB1</sub></i>) (&gt;= 0). Typical
    value = 2.
    '''

    tob2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL lag time constant (<i>T</i><i><sub>OB2</sub></i>) (&gt;= 0). Typical
            value = 0,08.
            '''

        })
    '''
    OEL lag time constant (<i>T</i><i><sub>OB2</sub></i>) (&gt;= 0). Typical
    value = 0,08.
    '''

    toc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL lead time constant (<i>T</i><i><sub>OC1</sub></i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    OEL lead time constant (<i>T</i><i><sub>OC1</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    toc2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL lead time constant (<i>T</i><i><sub>OC2</sub></i>) (&gt;= 0). Typical
            value = 0,08.
            '''

        })
    '''
    OEL lead time constant (<i>T</i><i><sub>OC2</sub></i>) (&gt;= 0). Typical
    value = 0,08.
    '''

    tub1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>UB1</sub></i>) (&gt;= 0). Typical
            value = 10.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>UB1</sub></i>) (&gt;= 0). Typical
    value = 10.
    '''

    tub2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>UB2</sub></i>) (&gt;= 0). Typical
            value = 0,05.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>UB2</sub></i>) (&gt;= 0). Typical
    value = 0,05.
    '''

    tuc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>UC1</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>UC1</sub></i>) (&gt;= 0). Typical
    value = 2.
    '''

    tuc2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>UC2</sub></i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>UC2</sub></i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -4.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -4.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST6B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST6B model. This model consists of a PI voltage regulator
    with an inner loop field voltage regulator and pre-control. The field voltage
    regulator implements a proportional control. The pre-control and the delay
    in the feedback circuit increase the dynamic response.
    Reference: IEEE 421.5-2005, 7.6.
    '''

    ilr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit reference (<i>I</i><i><sub>LR</sub></i>) (&gt;
            0). Typical value = 4,164.
            '''

        })
    '''
    Exciter output current limit reference (<i>I</i><i><sub>LR</sub></i>)
    (&gt; 0). Typical value = 4,164.
    '''

    kci: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit adjustment (<i>K</i><i><sub>CI</sub></i>)
            (&gt; 0). Typical value = 1,0577.
            '''

        })
    '''
    Exciter output current limit adjustment (<i>K</i><i><sub>CI</sub></i>)
    (&gt; 0). Typical value = 1,0577.
    '''

    kff: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pre-control gain constant of the inner loop field regulator (<i>K</i><i><sub>FF</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Pre-control gain constant of the inner loop field regulator (<i>K</i><i><sub>FF</sub></i>).
    Typical value = 1.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>K</i><i><sub>G</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    kia: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt; 0).
            Typical value = 45,094.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt;
    0). Typical value = 45,094.
    '''

    klr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limiter gain (<i>K</i><i><sub>LR</sub></i>) (&gt;
            0). Typical value = 17,33.
            '''

        })
    '''
    Exciter output current limiter gain (<i>K</i><i><sub>LR</sub></i>)
    (&gt; 0). Typical value = 17,33.
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward gain constant of the inner loop field regulator (<i>K</i><i><sub>M</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Forward gain constant of the inner loop field regulator (<i>K</i><i><sub>M</sub></i>).
    Typical value = 1.
    '''

    kpa: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<u>K</u><u><sub>PA</sub></u>) (&gt;
            0). Typical value = 18,038.
            '''

        })
    '''
    Voltage regulator proportional gain (<u>K</u><u><sub>PA</sub></u>)
    (&gt; 0). Typical value = 18,038.
    '''

    oelin: Optional[ ExcST6BOELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input selector (<i>OELin</i>). Typical value = noOELinput.
            '''

        })
    '''
    OEL input selector (<i>OELin</i>). Typical value = noOELinput.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant of inner loop field voltage regulator (<i>T</i><i><sub>G</sub></i>)
            (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Feedback time constant of inner loop field voltage regulator (<i>T</i><i><sub>G</sub></i>)
    (&gt;= 0). Typical value = 0,02.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (V<i><sub>AMAX</sub></i>) (&gt; 0). Typical
            value = 4,81.
            '''

        })
    '''
    Maximum voltage regulator output (V<i><sub>AMAX</sub></i>) (&gt; 0).
    Typical value = 4,81.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
            0). Typical value = -3,85.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>AMIN</sub></i>) (&lt;
    0). Typical value = -3,85.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 4,81.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 4,81.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -3,85.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -3,85.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcIEEEST7B(ExcitationSystemDynamics):
    '''
    IEEE 421.5-2005 type ST7B model. This model is representative of static
    potential-source excitation systems. In this system, the AVR consists of
    a PI voltage regulator. A phase lead-lag filter in series allows the introduction
    of a derivative function, typically used with brushless excitation systems.
    In that case, the regulator is of the PID type. In addition, the terminal
    voltage channel includes a phase lead-lag filter. The AVR includes the
    appropriate inputs on its reference for overexcitation limiter (OEL1),
    underexcitation limiter (UEL), stator current limiter (SCL), and current
    compensator (DROOP). All these limitations, when they work at voltage reference
    level, keep the PSS (VS signal from PSS) in operation. However, the UEL
    limitation can also be transferred to the high value (HV) gate acting on
    the output signal. In addition, the output signal passes through a low
    value (LV) gate for a ceiling overexcitation limiter (OEL2).
    Reference: IEEE 421.5-2005, 7.7.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-value gate feedback gain (<i>K</i><i><sub>H</sub></i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    High-value gate feedback gain (<i>K</i><i><sub>H</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    kia: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Voltage regulator integral gain (<i>K</i><i><sub>IA</sub></i>) (&gt;=
    0). Typical value = 1.
    '''

    kl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low-value gate feedback gain (<i>K</i><i><sub>L</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Low-value gate feedback gain (<i>K</i><i><sub>L</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    kpa: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>K</i><i><sub>PA</sub></i>) (&gt;
            0). Typical value = 40.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>K</i><i><sub>PA</sub></i>)
    (&gt; 0). Typical value = 40.
    '''

    oelin: Optional[ ExcST7BOELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input selector (<i>OELin</i>). Typical value = noOELinput.
            '''

        })
    '''
    OEL input selector (<i>OELin</i>). Typical value = noOELinput.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lag time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Regulator lag time constant (<i>T</i><i><sub>B</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lead time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    Regulator lead time constant (<i>T</i><i><sub>C</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>T</i><i><sub>F</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant of inner loop field voltage regulator (<i>T</i><i><sub>G</sub></i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Feedback time constant of inner loop field voltage regulator (<i>T</i><i><sub>G</sub></i>)
    (&gt;= 0). Typical value = 1.
    '''

    tia: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant (<i>T</i><i><sub>IA</sub></i>) (&gt;= 0). Typical
            value = 3.
            '''

        })
    '''
    Feedback time constant (<i>T</i><i><sub>IA</sub></i>) (&gt;= 0). Typical
    value = 3.
    '''

    uelin: Optional[ ExcST7BUELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input selector (<i>UELin</i>). Typical value = noUELinput.
            '''

        })
    '''
    UEL input selector (<i>UELin</i>). Typical value = noUELinput.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage reference signal (<i>V</i><i><sub>MAX</sub></i>) (&gt;
            0 and &gt; ExcIEEEST7B.vmin). Typical value = 1,1.
            '''

        })
    '''
    Maximum voltage reference signal (<i>V</i><i><sub>MAX</sub></i>) (&gt;
    0 and &gt; ExcIEEEST7B.vmin). Typical value = 1,1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage reference signal (<i>V</i><i><sub>MIN</sub></i>) (&gt;
            0 and &lt; ExcIEEEST7B.vmax). Typical value = 0,9.
            '''

        })
    '''
    Minimum voltage reference signal (<i>V</i><i><sub>MIN</sub></i>) (&gt;
    0 and &lt; ExcIEEEST7B.vmax). Typical value = 0,9.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
            0). Typical value = 5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>V</i><i><sub>RMAX</sub></i>) (&gt;
    0). Typical value = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
            0). Typical value = -4,5.
            '''

        })
    '''
    Minimum voltage regulator output (<i>V</i><i><sub>RMIN</sub></i>) (&lt;
    0). Typical value = -4,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcNI(ExcitationSystemDynamics):
    '''
    Bus or solid fed SCR (silicon-controlled rectifier) bridge excitation system
    model type NI (NVE).
    '''

    busFedSelector: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fed by selector (<i>BusFedSelector</i>).
            true = bus fed (switch is closed)
            false = solid fed (switch is open).
            Typical value = true.
            '''

        })
    '''
    Fed by selector (<i>BusFedSelector</i>).
    true = bus fed (switch is closed)
    false = solid fed (switch is open).
    Typical value = true.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 210.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 210.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gain (<i>Kf</i>) (&gt; 0). Typical
            value 0,01.
            '''

        })
    '''
    Excitation control system stabilizer gain (<i>Kf</i>) (&gt; 0). Typical
    value 0,01.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <i>rc</i> / <i>rfd</i> (<i>R</i>) (&gt;= 0).
            0 means exciter has negative current capability
            &gt; 0 means exciter does not have negative current capability.
            Typical value = 5.
            '''

        })
    '''
    <i>rc</i> / <i>rfd</i> (<i>R</i>) (&gt;= 0).
    0 means exciter has negative current capability
    &gt; 0 means exciter does not have negative current capability.
    Typical value = 5.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,02.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt; 0).
            Typical value = 1,0.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf1</i>) (&gt;
    0). Typical value = 1,0.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf2</i>) (&gt; 0).
            Typical value = 0,1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf2</i>) (&gt;
    0). Typical value = 0,1.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tr</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Time constant (<i>Tr</i>) (&gt;= 0). Typical value = 0,02.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator ouput (<i>Vrmax</i>) (&gt; ExcNI.vrmin). Typical
            value = 5,0.
            '''

        })
    '''
    Maximum voltage regulator ouput (<i>Vrmax</i>) (&gt; ExcNI.vrmin).
    Typical value = 5,0.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator ouput (<i>Vrmin</i>) (&lt; ExcNI.vrmax). Typical
            value = -2,0.
            '''

        })
    '''
    Minimum voltage regulator ouput (<i>Vrmin</i>) (&lt; ExcNI.vrmax).
    Typical value = -2,0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcOEX3T(ExcitationSystemDynamics):
    '''
    Modified IEEE type ST1 excitation system with semi-continuous and acting
    terminal voltage limiter.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation parameter (<i>E</i><i><sub>1</sub></i>).
            '''

        })
    '''
    Saturation parameter (<i>E</i><i><sub>1</sub></i>).
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation parameter (<i>E</i><i><sub>2</sub></i>).
            '''

        })
    '''
    Saturation parameter (<i>E</i><i><sub>2</sub></i>).
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>A</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>A</sub></i>).
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>C</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>C</sub></i>).
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>D</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>D</sub></i>).
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>E</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>E</sub></i>).
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>F</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>F</sub></i>).
    '''

    see1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation parameter (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>1</sub></i><i>]</i>).
            '''

        })
    '''
    Saturation parameter (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>1</sub></i><i>]</i>).
    '''

    see2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation parameter (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>2</sub></i><i>]</i>).
            '''

        })
    '''
    Saturation parameter (<i>S</i><i><sub>E</sub></i><i>[E</i><i><sub>2</sub></i><i>]</i>).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>E</sub></i>) (&gt;= 0).
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>F</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>F</sub></i>) (&gt;= 0).
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>RMAX</sub></i>) (&gt; ExcOEX3T.vrmin).
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>RMAX</sub></i>) (&gt; ExcOEX3T.vrmin).
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>V</i><i><sub>RMIN</sub></i>) (&lt; ExcOEX3T.vrmax).
            '''

        })
    '''
    Limiter (<i>V</i><i><sub>RMIN</sub></i>) (&lt; ExcOEX3T.vrmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcPIC(ExcitationSystemDynamics):
    '''
    Proportional/integral regulator excitation system. This model can be used
    to represent excitation systems with a proportional-integral (PI) voltage
    regulator controller.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value = 0.
            '''

        })
    '''
    Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value
    = 0.
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value = 0.
            '''

        })
    '''
    Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value
    = 0.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter maximum limit (<i>E</i><i><sub>fdmax</sub></i>) (&gt; ExcPIC.efdmin).
            Typical value = 8.
            '''

        })
    '''
    Exciter maximum limit (<i>E</i><i><sub>fdmax</sub></i>) (&gt; ExcPIC.efdmin).
    Typical value = 8.
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter minimum limit (<i>E</i><i><sub>fdmin</sub></i>) (&lt; ExcPIC.efdmax).
            Typical value = -0,87.
            '''

        })
    '''
    Exciter minimum limit (<i>E</i><i><sub>fdmin</sub></i>) (&lt; ExcPIC.efdmax).
    Typical value = -0,87.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain (<i>K</i><i><sub>a</sub></i>). Typical value = 3,15.
            '''

        })
    '''
    PI controller gain (<i>K</i><i><sub>a</sub></i>). Typical value = 3,15.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter regulation factor (<i>K</i><i><sub>c</sub></i>). Typical value
            = 0,08.
            '''

        })
    '''
    Exciter regulation factor (<i>K</i><i><sub>c</sub></i>). Typical value
    = 0,08.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant (<i>K</i><i><sub>e</sub></i>). Typical value = 0.
            '''

        })
    '''
    Exciter constant (<i>K</i><i><sub>e</sub></i>). Typical value = 0.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback gain (<i>K</i><i><sub>f</sub></i>). Typical value = 0.
            '''

        })
    '''
    Rate feedback gain (<i>K</i><i><sub>f</sub></i>). Typical value = 0.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current source gain (<i>K</i><i><sub>i</sub></i>). Typical value = 0.
            '''

        })
    '''
    Current source gain (<i>K</i><i><sub>i</sub></i>). Typical value =
    0.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential source gain (<i>K</i><i><sub>p</sub></i>). Typical value = 6,5.
            '''

        })
    '''
    Potential source gain (<i>K</i><i><sub>p</sub></i>). Typical value
    = 6,5.
    '''

    se1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>Se</i><i><sub>1</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>1</sub></i> (<i>Se</i><i><sub>1</sub></i>).
    Typical value = 0.
    '''

    se2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>Se</i><i><sub>2</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>Se</i><i><sub>2</sub></i>).
    Typical value = 0.
    '''

    ta1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller time constant (<i>T</i><i><sub>a1</sub></i>) (&gt;= 0). Typical
            value = 1.
            '''

        })
    '''
    PI controller time constant (<i>T</i><i><sub>a1</sub></i>) (&gt;= 0).
    Typical value = 1.
    '''

    ta2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>T</i><i><sub>a2</sub></i>) (&gt;= 0).
            Typical value = 0,01.
            '''

        })
    '''
    Voltage regulator time constant (<i>T</i><i><sub>a2</sub></i>) (&gt;=
    0). Typical value = 0,01.
    '''

    ta3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>a3</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>a3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    ta4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>a4</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>a4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>T</i><i><sub>e</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Exciter time constant (<i>T</i><i><sub>e</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback time constant (<i>T</i><i><sub>f1</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Rate feedback time constant (<i>T</i><i><sub>f1</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback lag time constant (<i>T</i><i><sub>f2</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Rate feedback lag time constant (<i>T</i><i><sub>f2</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    vr1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI maximum limit (<i>V</i><i><sub>r1</sub></i>). Typical value = 1.
            '''

        })
    '''
    PI maximum limit (<i>V</i><i><sub>r1</sub></i>). Typical value = 1.
    '''

    vr2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI minimum limit (<i>V</i><i><sub>r2</sub></i>). Typical value = -0,87.
            '''

        })
    '''
    PI minimum limit (<i>V</i><i><sub>r2</sub></i>). Typical value = -0,87.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator maximum limit (<i>V</i><i><sub>rmax</sub></i>) (&gt;
            ExcPIC.vrmin). Typical value = 1.
            '''

        })
    '''
    Voltage regulator maximum limit (<i>V</i><i><sub>rmax</sub></i>) (&gt;
    ExcPIC.vrmin). Typical value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator minimum limit (<i>V</i><i><sub>rmin</sub></i>) (&lt;
            ExcPIC.vrmax). Typical value = -0,87.
            '''

        })
    '''
    Voltage regulator minimum limit (<i>V</i><i><sub>rmin</sub></i>) (&lt;
    ExcPIC.vrmax). Typical value = -0,87.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcREXS(ExcitationSystemDynamics):
    '''
    General purpose rotating excitation system. This model can be used to represent
    a wide range of excitation systems whose DC power source is an AC or DC
    generator. It encompasses IEEE type AC1, AC2, DC1, and DC2 excitation system
    models.
    '''

    e1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value = 3.
            '''

        })
    '''
    Field voltage value 1 (<i>E</i><i><sub>1</sub></i>). Typical value
    = 3.
    '''

    e2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value = 4.
            '''

        })
    '''
    Field voltage value 2 (<i>E</i><i><sub>2</sub></i>). Typical value
    = 4.
    '''

    fbf: Optional[ ExcREXSFeedbackSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback signal flag (<i>fbf</i>). Typical value = fieldCurrent.
            '''

        })
    '''
    Rate feedback signal flag (<i>fbf</i>). Typical value = fieldCurrent.
    '''

    flimf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit type flag (<i>Flimf</i>). Typical value = 0.
            '''

        })
    '''
    Limit type flag (<i>Flimf</i>). Typical value = 0.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier regulation factor (<i>Kc</i>). Typical value = 0,05.
            '''

        })
    '''
    Rectifier regulation factor (<i>Kc</i>). Typical value = 0,05.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter regulation factor (<i>Kd</i>). Typical value = 2.
            '''

        })
    '''
    Exciter regulation factor (<i>Kd</i>). Typical value = 2.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field proportional constant (<i>Ke</i>). Typical value = 1.
            '''

        })
    '''
    Exciter field proportional constant (<i>Ke</i>). Typical value = 1.
    '''

    kefd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage feedback gain (<i>Kefd</i>). Typical value = 0.
            '''

        })
    '''
    Field voltage feedback gain (<i>Kefd</i>). Typical value = 0.
    '''

    kf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback gain (<i>Kf</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Rate feedback gain (<i>Kf</i>) (&gt;= 0). Typical value = 0,05.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage controller feedback gain (<i>Kh</i>). Typical value = 0.
            '''

        })
    '''
    Field voltage controller feedback gain (<i>Kh</i>). Typical value =
    0.
    '''

    kii: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field current regulator integral gain (<i>Kii</i>). Typical value = 0.
            '''

        })
    '''
    Field current regulator integral gain (<i>Kii</i>). Typical value =
    0.
    '''

    kip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field current regulator proportional gain (<i>Kip</i>). Typical value =
            1.
            '''

        })
    '''
    Field current regulator proportional gain (<i>Kip</i>). Typical value
    = 1.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    kvi: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>Kvi</i>). Typical value = 0.
            '''

        })
    '''
    Voltage regulator integral gain (<i>Kvi</i>). Typical value = 0.
    '''

    kvp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>Kvp</i>). Typical value = 2800.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>Kvp</i>). Typical value = 2800.
    '''

    kvphz: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            V/Hz limiter gain (<i>Kvphz</i>). Typical value = 0.
            '''

        })
    '''
    V/Hz limiter gain (<i>Kvphz</i>). Typical value = 0.
    '''

    nvphz: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pickup speed of V/Hz limiter (<i>Nvphz</i>). Typical value = 0.
            '''

        })
    '''
    Pickup speed of V/Hz limiter (<i>Nvphz</i>). Typical value = 0.
    '''

    se1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>1</sub></i><i> </i>(<i>Se</i><i><sub>1</sub></i>).
            Typical value = 0,0001.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>1</sub></i><i> </i>(<i>Se</i><i><sub>1</sub></i>).
    Typical value = 0,0001.
    '''

    se2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>Se</i><i><sub>2</sub></i>).
            Typical value = 0,001.
            '''

        })
    '''
    Saturation factor at <i>E</i><i><sub>2</sub></i> (<i>Se</i><i><sub>2</sub></i>).
    Typical value = 0,001.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). If = 0, block is
            bypassed. Typical value = 0,01.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). If = 0, block
    is bypassed. Typical value = 0,01.
    '''

    tb1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>Tb1</i>) (&gt;= 0). If = 0, block is bypassed. Typical
            value = 0.
            '''

        })
    '''
    Lag time constant (<i>Tb1</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0.
    '''

    tb2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>Tb2</i>) (&gt;= 0). If = 0, block is bypassed. Typical
            value = 0.
            '''

        })
    '''
    Lag time constant (<i>Tb2</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0.
    '''

    tc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>Tc1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead time constant (<i>Tc1</i>) (&gt;= 0). Typical value = 0.
    '''

    tc2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>Tc2</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead time constant (<i>Tc2</i>) (&gt;= 0). Typical value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter field time constant (<i>Te</i>) (&gt; 0). Typical value = 1,2.
            '''

        })
    '''
    Exciter field time constant (<i>Te</i>) (&gt; 0). Typical value = 1,2.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate feedback time constant (<i>Tf</i>) (&gt;= 0). If = 0, the feedback
            path is not used. Typical value = 1.
            '''

        })
    '''
    Rate feedback time constant (<i>Tf</i>) (&gt;= 0). If = 0, the feedback
    path is not used. Typical value = 1.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback lead time constant (<i>Tf1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Feedback lead time constant (<i>Tf1</i>) (&gt;= 0). Typical value =
    0.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback lag time constant (<i>Tf2</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0.
            '''

        })
    '''
    Feedback lag time constant (<i>Tf2</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 0.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field current bridge time constant (<i>Tp</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Field current bridge time constant (<i>Tp</i>) (&gt;= 0). Typical value
    = 0.
    '''

    vcmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum compounding voltage (<i>Vcmax</i>). Typical value = 0.
            '''

        })
    '''
    Maximum compounding voltage (<i>Vcmax</i>). Typical value = 0.
    '''

    vfmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum exciter field current (<i>Vfmax</i>) (&gt; ExcREXS.vfmin). Typical
            value = 47.
            '''

        })
    '''
    Maximum exciter field current (<i>Vfmax</i>) (&gt; ExcREXS.vfmin).
    Typical value = 47.
    '''

    vfmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum exciter field current (<i>Vfmin</i>) (&lt; ExcREXS.vfmax). Typical
            value = -20.
            '''

        })
    '''
    Minimum exciter field current (<i>Vfmin</i>) (&lt; ExcREXS.vfmax).
    Typical value = -20.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator input limit (<i>Vimax</i>). Typical value = 0,1.
            '''

        })
    '''
    Voltage regulator input limit (<i>Vimax</i>). Typical value = 0,1.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum controller output (V<i>rmax</i>) (&gt; ExcREXS.vrmin). Typical
            value = 47.
            '''

        })
    '''
    Maximum controller output (V<i>rmax</i>) (&gt; ExcREXS.vrmin). Typical
    value = 47.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum controller output (<i>Vrmin</i>) (&lt; ExcREXS.vrmax). Typical
            value = -20.
            '''

        })
    '''
    Minimum controller output (<i>Vrmin</i>) (&lt; ExcREXS.vrmax). Typical
    value = -20.
    '''

    xc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter compounding reactance (<i>Xc</i>). Typical value = 0.
            '''

        })
    '''
    Exciter compounding reactance (<i>Xc</i>). Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcRQB(ExcitationSystemDynamics):
    '''
    Excitation system type RQB (four-loop regulator, r?gulateur quatre boucles,
    developed in France) primarily used in nuclear or thermal generating units.
    This excitation system shall be always used together with power system
    stabilizer type PssRQB.
    '''

    ki0: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage reference input gain (<i>Ki0</i>). Typical value = 12,7.
            '''

        })
    '''
    Voltage reference input gain (<i>Ki0</i>). Typical value = 12,7.
    '''

    ki1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage input gain (<i>Ki1</i>). Typical value = -16,8.
            '''

        })
    '''
    Voltage input gain (<i>Ki1</i>). Typical value = -16,8.
    '''

    klir: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input gain (<i>KLIR</i>). Typical value = 12,13.
            '''

        })
    '''
    OEL input gain (<i>KLIR</i>). Typical value = 12,13.
    '''

    klus: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter gain (<i>KLUS</i>). Typical value = 50.
            '''

        })
    '''
    Limiter gain (<i>KLUS</i>). Typical value = 50.
    '''

    lsat: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integrator limiter (<i>LSAT</i>). Typical value = 5,73.
            '''

        })
    '''
    Integrator limiter (<i>LSAT</i>). Typical value = 5,73.
    '''

    lus: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Setpoint (<i>LUS</i>). Typical value = 0,12.
            '''

        })
    '''
    Setpoint (<i>LUS</i>). Typical value = 0,12.
    '''

    mesu: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage input time constant (<i>MESU</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Voltage input time constant (<i>MESU</i>) (&gt;= 0). Typical value
    = 0,02.
    '''

    t4m: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input time constant (<i>T4M</i>) (&gt;= 0). Typical value = 5.
            '''

        })
    '''
    Input time constant (<i>T4M</i>) (&gt;= 0). Typical value = 5.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead lag time constant (<i>TC</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Lead lag time constant (<i>TC</i>) (&gt;= 0). Typical value = 0,02.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead lag time constant (<i>TE</i>) (&gt;= 0). Typical value = 0,22.
            '''

        })
    '''
    Lead lag time constant (<i>TE</i>) (&gt;= 0). Typical value = 0,22.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant (<i>TF</i>) (&gt;= 0). Typical value = 0,01.
            '''

        })
    '''
    Exciter time constant (<i>TF</i>) (&gt;= 0). Typical value = 0,01.
    '''

    ucmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage reference limit (<i>UCMAX</i>) (&gt; ExcRQB.ucmin). Typical
            value = 1,1.
            '''

        })
    '''
    Maximum voltage reference limit (<i>UCMAX</i>) (&gt; ExcRQB.ucmin).
    Typical value = 1,1.
    '''

    ucmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage reference limit (<i>UCMIN</i>) (&lt; ExcRQB.ucmax). Typical
            value = 0,9.
            '''

        })
    '''
    Minimum voltage reference limit (<i>UCMIN</i>) (&lt; ExcRQB.ucmax).
    Typical value = 0,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcSCRX(ExcitationSystemDynamics):
    '''
    Simple excitation system with generic characteristics typical of many excitation
    systems; intended for use where negative field current could be a problem.
    '''

    cswitch: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power source switch (<i>Cswitch</i>).
            true = fixed voltage of 1.0 PU
            false = generator terminal voltage.
            '''

        })
    '''
    Power source switch (<i>Cswitch</i>).
    true = fixed voltage of 1.0 PU
    false = generator terminal voltage.
    '''

    rcrfd: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio of field discharge resistance to field winding resistance ([<i>rc
            / rfd]</i>). Typical value = 0.
            '''

        })
    '''
    Ratio of field discharge resistance to field winding resistance ([<i>rc
    / rfd]</i>). Typical value = 0.
    '''

    tatb: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain reduction ratio of lag-lead element ([<i>Ta</i> / <i>Tb</i>]). The
            parameter <i>Ta</i> is not defined explicitly. Typical value = 0.1.
            '''

        })
    '''
    Gain reduction ratio of lag-lead element ([<i>Ta</i> / <i>Tb</i>]).
    The parameter <i>Ta</i> is not defined explicitly. Typical value =
    0.1.
    '''

    emax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field voltage output (<i>Emax</i>) (&gt; ExcSCRX.emin). Typical
            value = 5.
            '''

        })
    '''
    Maximum field voltage output (<i>Emax</i>) (&gt; ExcSCRX.emin). Typical
    value = 5.
    '''

    emin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum field voltage output (<i>Emin</i>) (&lt; ExcSCRX.emax). Typical
            value = 0.
            '''

        })
    '''
    Minimum field voltage output (<i>Emin</i>) (&lt; ExcSCRX.emax). Typical
    value = 0.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i>) (&gt; 0). Typical value = 200.
            '''

        })
    '''
    Gain (<i>K</i>) (&gt; 0). Typical value = 200.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator time constant of lag-lead block (<i>Tb</i>) (&gt;= 0). Typical
            value = 10.
            '''

        })
    '''
    Denominator time constant of lag-lead block (<i>Tb</i>) (&gt;= 0).
    Typical value = 10.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of gain block (<i>Te</i>) (&gt; 0). Typical value = 0,02.
            '''

        })
    '''
    Time constant of gain block (<i>Te</i>) (&gt; 0). Typical value = 0,02.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcSEXS(ExcitationSystemDynamics):
    '''
    Simplified excitation system.
    '''

    tatb: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain reduction ratio of lag-lead element (<i>[Ta / Tb]</i>). Typical value
            = 0,1.
            '''

        })
    '''
    Gain reduction ratio of lag-lead element (<i>[Ta / Tb]</i>). Typical
    value = 0,1.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage clipping maximum limit (<i>Efdmax</i>) (&gt; ExcSEXS.efdmin).
            Typical value = 5.
            '''

        })
    '''
    Field voltage clipping maximum limit (<i>Efdmax</i>) (&gt; ExcSEXS.efdmin).
    Typical value = 5.
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage clipping minimum limit (<i>Efdmin</i>) (&lt; ExcSEXS.efdmax).
            Typical value = -5.
            '''

        })
    '''
    Field voltage clipping minimum limit (<i>Efdmin</i>) (&lt; ExcSEXS.efdmax).
    Typical value = -5.
    '''

    emax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field voltage output (<i>Emax</i>) (&gt; ExcSEXS.emin). Typical
            value = 5.
            '''

        })
    '''
    Maximum field voltage output (<i>Emax</i>) (&gt; ExcSEXS.emin). Typical
    value = 5.
    '''

    emin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum field voltage output (<i>Emin</i>) (&lt; ExcSEXS.emax). Typical
            value = -5.
            '''

        })
    '''
    Minimum field voltage output (<i>Emin</i>) (&lt; ExcSEXS.emax). Typical
    value = -5.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i>) (&gt; 0). Typical value = 100.
            '''

        })
    '''
    Gain (<i>K</i>) (&gt; 0). Typical value = 100.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain (<i>Kc</i>) (&gt; 0 if ExcSEXS.tc &gt; 0). Typical value
            = 0,08.
            '''

        })
    '''
    PI controller gain (<i>Kc</i>) (&gt; 0 if ExcSEXS.tc &gt; 0). Typical
    value = 0,08.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator time constant of lag-lead block (<i>Tb</i>) (&gt;= 0). Typical
            value = 10.
            '''

        })
    '''
    Denominator time constant of lag-lead block (<i>Tb</i>) (&gt;= 0).
    Typical value = 10.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller phase lead time constant (<i>Tc</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    PI controller phase lead time constant (<i>Tc</i>) (&gt;= 0). Typical
    value = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of gain block (<i>Te</i>) (&gt; 0). Typical value = 0,05.
            '''

        })
    '''
    Time constant of gain block (<i>Te</i>) (&gt; 0). Typical value = 0,05.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcSK(ExcitationSystemDynamics):
    '''
    Slovakian excitation system. UEL and secondary voltage control are included
    in this model. When this model is used, there cannot be a separate underexcitation
    limiter or VAr controller model.
    '''

    qconoff: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Secondary voltage control state (<i>Qc_on_off</i>).
            true = secondary voltage control is on
            false = secondary voltage control is off.
            Typical value = false.
            '''

        })
    '''
    Secondary voltage control state (<i>Qc_on_off</i>).
    true = secondary voltage control is on
    false = secondary voltage control is off.
    Typical value = false.
    '''

    remote: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector to apply automatic calculation in secondary controller model (<i>remote</i>).
            true = automatic calculation is activated
            false = manual set is active; the use of desired value of reactive power
            (<i>Qz</i>) is required.
            Typical value = true.
            '''

        })
    '''
    Selector to apply automatic calculation in secondary controller model
    (<i>remote</i>).
    true = automatic calculation is activated
    false = manual set is active; the use of desired value of reactive
    power (<i>Qz</i>) is required.
    Typical value = true.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage clipping upper level limit (<i>Efdmax</i>) (&gt; ExcSK.efdmin).
            '''

        })
    '''
    Field voltage clipping upper level limit (<i>Efdmax</i>) (&gt; ExcSK.efdmin).
    '''

    efdmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field voltage clipping lower level limit (<i>Efdmin</i>) (&lt; ExcSK.efdmax).
            '''

        })
    '''
    Field voltage clipping lower level limit (<i>Efdmin</i>) (&lt; ExcSK.efdmax).
    '''

    emax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field voltage output (<i>Emax</i>) (&gt; ExcSK.emin). Typical value
            = 20.
            '''

        })
    '''
    Maximum field voltage output (<i>Emax</i>) (&gt; ExcSK.emin). Typical
    value = 20.
    '''

    emin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum field voltage output (<i>Emin</i>) (&lt; ExcSK.emax). Typical value
            = -20.
            '''

        })
    '''
    Minimum field voltage output (<i>Emin</i>) (&lt; ExcSK.emax). Typical
    value = -20.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i>). Typical value = 1.
            '''

        })
    '''
    Gain (<i>K</i>). Typical value = 1.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Parameter of underexcitation limit (<i>K1</i>). Typical value = 0,1364.
            '''

        })
    '''
    Parameter of underexcitation limit (<i>K1</i>). Typical value = 0,1364.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Parameter of underexcitation limit (<i>K2</i>). Typical value = -0,3861.
            '''

        })
    '''
    Parameter of underexcitation limit (<i>K2</i>). Typical value = -0,3861.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain (<i>Kc</i>). Typical value = 70.
            '''

        })
    '''
    PI controller gain (<i>Kc</i>). Typical value = 70.
    '''

    kce: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier regulation factor (<i>Kce</i>). Typical value = 0.
            '''

        })
    '''
    Rectifier regulation factor (<i>Kce</i>). Typical value = 0.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter internal reactance (<i>Kd</i>). Typical value = 0.
            '''

        })
    '''
    Exciter internal reactance (<i>Kd</i>). Typical value = 0.
    '''

    kgob: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            P controller gain (<i>Kgob</i>). Typical value = 10.
            '''

        })
    '''
    P controller gain (<i>Kgob</i>). Typical value = 10.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain (<i>Kp</i>). Typical value = 1.
            '''

        })
    '''
    PI controller gain (<i>Kp</i>). Typical value = 1.
    '''

    kqi: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain of integral component (<i>Kqi</i>). Typical value =
            0.
            '''

        })
    '''
    PI controller gain of integral component (<i>Kqi</i>). Typical value
    = 0.
    '''

    kqob: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate of rise of the reactive power (<i>Kqob</i>).
            '''

        })
    '''
    Rate of rise of the reactive power (<i>Kqob</i>).
    '''

    kqp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller gain (<i>Kqp</i>). Typical value = 0.
            '''

        })
    '''
    PI controller gain (<i>Kqp</i>). Typical value = 0.
    '''

    nq: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Deadband of reactive power (<i>nq</i>). Determines the range of sensitivity.
            Typical value = 0,001.
            '''

        })
    '''
    Deadband of reactive power (<i>nq</i>). Determines the range of sensitivity.
    Typical value = 0,001.
    '''

    qz: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Desired value (setpoint) of reactive power, manual setting (<i>Qz</i>).
            '''

        })
    '''
    Desired value (setpoint) of reactive power, manual setting (<i>Qz</i>).
    '''

    sbase: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Apparent power of the unit (<i>Sbase</i>) (&gt; 0). Unit = MVA. Typical
            value = 259.
            '''

        })
    '''
    Apparent power of the unit (<i>Sbase</i>) (&gt; 0). Unit = MVA. Typical
    value = 259.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller phase lead time constant (<i>Tc</i>) (&gt;= 0). Typical value
            = 8.
            '''

        })
    '''
    PI controller phase lead time constant (<i>Tc</i>) (&gt;= 0). Typical
    value = 8.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of gain block (<i>Te</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Time constant of gain block (<i>Te</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    ti: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller phase lead time constant (<i>Ti</i>) (&gt;= 0). Typical value
            = 2.
            '''

        })
    '''
    PI controller phase lead time constant (<i>Ti</i>) (&gt;= 0). Typical
    value = 2.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage transducer time constant (<i>Tr</i>) (&gt;= 0). Typical value =
            0,01.
            '''

        })
    '''
    Voltage transducer time constant (<i>Tr</i>) (&gt;= 0). Typical value
    = 0,01.
    '''

    uimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum error (<i>UImax</i>) (&gt; ExcSK.uimin). Typical value = 10.
            '''

        })
    '''
    Maximum error (<i>UImax</i>) (&gt; ExcSK.uimin). Typical value = 10.
    '''

    uimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum error (<i>UImin</i>) (&lt; ExcSK.uimax). Typical value = -10.
            '''

        })
    '''
    Minimum error (<i>UImin</i>) (&lt; ExcSK.uimax). Typical value = -10.
    '''

    urmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum controller output (<i>URmax</i>) (&gt; ExcSK.urmin). Typical value
            = 10.
            '''

        })
    '''
    Maximum controller output (<i>URmax</i>) (&gt; ExcSK.urmin). Typical
    value = 10.
    '''

    urmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum controller output (<i>URmin</i>) (&lt; ExcSK.urmax). Typical value
            = -10.
            '''

        })
    '''
    Minimum controller output (<i>URmin</i>) (&lt; ExcSK.urmax). Typical
    value = -10.
    '''

    vtmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum terminal voltage input (<i>Vtmax</i>) (&gt; ExcSK.vtmin). Determines
            the range of voltage deadband. Typical value = 1,05.
            '''

        })
    '''
    Maximum terminal voltage input (<i>Vtmax</i>) (&gt; ExcSK.vtmin). Determines
    the range of voltage deadband. Typical value = 1,05.
    '''

    vtmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum terminal voltage input (<i>Vtmin</i>) (&lt; ExcSK.vtmax). Determines
            the range of voltage deadband. Typical value = 0,95.
            '''

        })
    '''
    Minimum terminal voltage input (<i>Vtmin</i>) (&lt; ExcSK.vtmax). Determines
    the range of voltage deadband. Typical value = 0,95.
    '''

    yp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum output (<i>Yp</i>). Typical value = 1.
            '''

        })
    '''
    Maximum output (<i>Yp</i>). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST1A(ExcitationSystemDynamics):
    '''
    Modification of an old IEEE ST1A static excitation system without overexcitation
    limiter (OEL) and underexcitation limiter (UEL).
    '''

    ilr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit reference (<i>Ilr</i>). Typical value = 0.
            '''

        })
    '''
    Exciter output current limit reference (<i>Ilr</i>). Typical value
    = 0.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 190.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 190.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,05.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>Kf</i>) (&gt;= 0). Typical
    value = 0.
    '''

    klr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limiter gain (<i>Klr</i>). Typical value = 0.
            '''

        })
    '''
    Exciter output current limiter gain (<i>Klr</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value =
            0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value
    = 0,02.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            10.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 10.
    '''

    tb1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb1</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb1</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 1.
    '''

    tc1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc1</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc1</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;=
    0). Typical value = 1.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
            = 999.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
    = 999.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
            = -999.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
    = -999.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
            value = 999.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
    value = 999.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
            value = -999.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
    value = -999.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0) . Typical value
            = 7,8.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0) . Typical
    value = 7,8.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical value
            = -6,7.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical
    value = -6,7.
    '''

    xe: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation xfmr effective reactance (<i>Xe</i>). Typical value = 0,04.
            '''

        })
    '''
    Excitation xfmr effective reactance (<i>Xe</i>). Typical value = 0,04.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST2A(ExcitationSystemDynamics):
    '''
    Modified IEEE ST2A static excitation system with another lead-lag block
    added to match the model defined by WECC.
    '''

    uelin: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input (<i>UELin</i>).
            true = HV gate
            false = add to error signal.
            Typical value = false.
            '''

        })
    '''
    UEL input (<i>UELin</i>).
    true = HV gate
    false = add to error signal.
    Typical value = false.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum field voltage (<i>Efdmax</i>) (&gt;= 0). Typical value = 99.
            '''

        })
    '''
    Maximum field voltage (<i>Efdmax</i>) (&gt;= 0). Typical value = 99.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 120.
            '''

        })
    '''
    Voltage regulator gain (<i>Ka</i>) (&gt; 0). Typical value = 120.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 1,82.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 1,82.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter constant related to self-excited field (<i>Ke</i>). Typical value
            = 1.
            '''

        })
    '''
    Exciter constant related to self-excited field (<i>Ke</i>). Typical
    value = 1.
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer gains (<i>kf</i>) (&gt;= 0). Typical
            value = 0,05.
            '''

        })
    '''
    Excitation control system stabilizer gains (<i>kf</i>) (&gt;= 0). Typical
    value = 0,05.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>i</sub></i>) (&gt;=
            0). Typical value = 8.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>i</sub></i>) (&gt;=
    0). Typical value = 8.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>p</sub></i>) (&gt;=
            0). Typical value = 4,88.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>p</sub></i>) (&gt;=
    0). Typical value = 4,88.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value = 0,15.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,15.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter time constant, integration rate associated with exciter control
            (<i>Te</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Exciter time constant, integration rate associated with exciter control
    (<i>Te</i>) (&gt; 0). Typical value = 0,5.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;= 0).
            Typical value = 0,7.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;=
    0). Typical value = 0,7.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical value
            = 1.
            '''

        })
    '''
    Maximum voltage regulator outputs (<i>Vrmax</i>) (&gt; 0). Typical
    value = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical value
            = -1.
            '''

        })
    '''
    Minimum voltage regulator outputs (<i>Vrmin</i>) (&lt; 0). Typical
    value = -1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST3A(ExcitationSystemDynamics):
    '''
    Modified IEEE ST3A static excitation system with added speed multiplier.
    '''

    efdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum AVR output (<i>Efdmax</i>) (&gt;= 0). Typical value = 6,9.
            '''

        })
    '''
    Maximum AVR output (<i>Efdmax</i>) (&gt;= 0). Typical value = 6,9.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 1,1.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 1,1.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>Kg</i>) (&gt;=
            0). Typical value = 1.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>Kg</i>)
    (&gt;= 0). Typical value = 1.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>K</i><i><sub>i</sub></i>) (&gt;=
            0). Typical value = 4,83.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>K</i><i><sub>i</sub></i>) (&gt;=
    0). Typical value = 4,83.
    '''

    kj: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            AVR gain (<i>Kj</i>) (&gt; 0). Typical value = 200.
            '''

        })
    '''
    AVR gain (<i>Kj</i>) (&gt; 0). Typical value = 200.
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward gain constant of the inner loop field regulator (<i>Km</i>) (&gt;
            0). Typical value = 7,04.
            '''

        })
    '''
    Forward gain constant of the inner loop field regulator (<i>Km</i>)
    (&gt; 0). Typical value = 7,04.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential source gain (<i>K</i><i><sub>p</sub></i>) (&gt; 0). Typical value
            = 4,37.
            '''

        })
    '''
    Potential source gain (<i>K</i><i><sub>p</sub></i>) (&gt; 0). Typical
    value = 4,37.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks</i>). Typical value = 0.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient to allow different usage of the model-speed coefficient (<i>Ks1</i>).
            Typical value = 0.
            '''

        })
    '''
    Coefficient to allow different usage of the model-speed coefficient
    (<i>Ks1</i>). Typical value = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value =
            6,67.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tb</i>) (&gt;= 0). Typical value
    = 6,67.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Voltage regulator time constant (<i>Tc</i>) (&gt;= 0). Typical value
    = 1.
    '''

    thetap: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit phase angle (<i>theta</i><i><sub>p</sub></i>). Typical
            value = 20.
            '''

        })
    '''
    Potential circuit phase angle (<i>theta</i><i><sub>p</sub></i>). Typical
    value = 20.
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward time constant of inner loop field regulator (<i>Tm</i>) (&gt; 0).
            Typical value = 1.
            '''

        })
    '''
    Forward time constant of inner loop field regulator (<i>Tm</i>) (&gt;
    0). Typical value = 1.
    '''

    vbmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum excitation voltage (<i>Vbmax</i>) (&gt; 0). Typical value = 8,63.
            '''

        })
    '''
    Maximum excitation voltage (<i>Vbmax</i>) (&gt; 0). Typical value =
    8,63.
    '''

    vgmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop feedback voltage (<i>Vgmax</i>) (&gt;= 0). Typical value
            = 6,53.
            '''

        })
    '''
    Maximum inner loop feedback voltage (<i>Vgmax</i>) (&gt;= 0). Typical
    value = 6,53.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
            value = 0,2.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; 0). Typical
    value = 0,2.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
            value = -0,2.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; 0). Typical
    value = -0,2.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -1.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -1.
    '''

    xl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance associated with potential source (<i>Xl</i>) (&gt;= 0). Typical
            value = 0,09.
            '''

        })
    '''
    Reactance associated with potential source (<i>Xl</i>) (&gt;= 0). Typical
    value = 0,09.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST4B(ExcitationSystemDynamics):
    '''
    Modified IEEE ST4B static excitation system with maximum inner loop feedback
    gain <i>Vgmax</i>.
    '''

    lvgate: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>LVGate</i>).
            true = <i>LVGate</i> is part of the block diagram
            false = <i>LVGate</i> is not part of the block diagram.
            Typical value = false.
            '''

        })
    '''
    Selector (<i>LVGate</i>).
    true = <i>LVGate</i> is part of the block diagram
    false = <i>LVGate</i> is not part of the block diagram.
    Typical value = false.
    '''

    uel: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>UEL</i>).
            true = <i>UEL</i> is part of block diagram
            false = <i>UEL</i> is not part of block diagram.
            Typical value = false.
            '''

        })
    '''
    Selector (<i>UEL</i>).
    true = <i>UEL</i> is part of block diagram
    false = <i>UEL</i> is not part of block diagram.
    Typical value = false.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
            (&gt;= 0). Typical value = 0,113.
            '''

        })
    '''
    Rectifier loading factor proportional to commutating reactance (<i>Kc</i>)
    (&gt;= 0). Typical value = 0,113.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>Kg</i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>Kg</i>)
    (&gt;= 0). Typical value = 0.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>Ki</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>Ki</i>) (&gt;= 0). Typical value
    = 0.
    '''

    kim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain output (<i>Kim</i>). Typical value = 0.
            '''

        })
    '''
    Voltage regulator integral gain output (<i>Kim</i>). Typical value
    = 0.
    '''

    kir: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>Kir</i>). Typical value = 10,75.
            '''

        })
    '''
    Voltage regulator integral gain (<i>Kir</i>). Typical value = 10,75.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit gain coefficient (<i>Kp</i>) (&gt; 0). Typical value
            = 9,3.
            '''

        })
    '''
    Potential circuit gain coefficient (<i>Kp</i>) (&gt; 0). Typical value
    = 9,3.
    '''

    kpm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain output (<i>Kpm</i>). Typical value
            = 1.
            '''

        })
    '''
    Voltage regulator proportional gain output (<i>Kpm</i>). Typical value
    = 1.
    '''

    kpr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>Kpr</i>). Typical value = 10,75.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>Kpr</i>). Typical value = 10,75.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value =
            0,02.
            '''

        })
    '''
    Voltage regulator time constant (<i>Ta</i>) (&gt;= 0). Typical value
    = 0,02.
    '''

    thetap: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential circuit phase angle (<i>theta</i><i><sub>p</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    Potential circuit phase angle (<i>theta</i><i><sub>p</sub></i>). Typical
    value = 0.
    '''

    vbmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum excitation voltage (<i>Vbmax</i>) (&gt; 0). Typical value = 11,63.
            '''

        })
    '''
    Maximum excitation voltage (<i>Vbmax</i>) (&gt; 0). Typical value =
    11,63.
    '''

    vgmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop feedback voltage (<i>Vgmax</i>) (&gt;= 0). Typical value
            = 5,8.
            '''

        })
    '''
    Maximum inner loop feedback voltage (<i>Vgmax</i>) (&gt;= 0). Typical
    value = 5,8.
    '''

    vmmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inner loop output (<i>Vmmax</i>) (&gt; ExcST4B.vmmin). Typical
            value = 99.
            '''

        })
    '''
    Maximum inner loop output (<i>Vmmax</i>) (&gt; ExcST4B.vmmin). Typical
    value = 99.
    '''

    vmmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum inner loop output (<i>Vmmin</i>) (&lt; ExcST4B.vmmax). Typical
            value = -99.
            '''

        })
    '''
    Minimum inner loop output (<i>Vmmin</i>) (&lt; ExcST4B.vmmax). Typical
    value = -99.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 1.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 1.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -0,87.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -0,87.
    '''

    xl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance associated with potential source (<i>Xl</i>) (&gt;= 0). Typical
            value = 0,124.
            '''

        })
    '''
    Reactance associated with potential source (<i>Xl</i>) (&gt;= 0). Typical
    value = 0,124.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST6B(ExcitationSystemDynamics):
    '''
    Modified IEEE ST6B static excitation system with PID controller and optional
    inner feedback loop.
    '''

    k1: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>K1</i>).
            true = feedback is from <i>Ifd</i>
            false = feedback is not from <i>Ifd</i>.
            Typical value = true.
            '''

        })
    '''
    Selector (<i>K1</i>).
    true = feedback is from <i>Ifd</i>
    false = feedback is not from <i>Ifd</i>.
    Typical value = true.
    '''

    vilim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>Vilim</i>).
            true = <i>Vimin</i>-<i>Vimax</i> limiter is active
            false = <i>Vimin</i>-<i>Vimax</i> limiter is not active.
            Typical value = true.
            '''

        })
    '''
    Selector (<i>Vilim</i>).
    true = <i>Vimin</i>-<i>Vimax</i> limiter is active
    false = <i>Vimin</i>-<i>Vimax</i> limiter is not active.
    Typical value = true.
    '''

    vmult: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>vmult</i>).
            true = multiply regulator output by terminal voltage
            false = do not multiply regulator output by terminal voltage.
            Typical value = true.
            '''

        })
    '''
    Selector (<i>vmult</i>).
    true = multiply regulator output by terminal voltage
    false = do not multiply regulator output by terminal voltage.
    Typical value = true.
    '''

    ilr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit reference (<i>Ilr</i>) (&gt; 0). Typical value
            = 4,164.
            '''

        })
    '''
    Exciter output current limit reference (<i>Ilr</i>) (&gt; 0). Typical
    value = 4,164.
    '''

    kcl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit adjustment (<i>Kcl</i>) (&gt; 0). Typical
            value = 1,0577.
            '''

        })
    '''
    Exciter output current limit adjustment (<i>Kcl</i>) (&gt; 0). Typical
    value = 1,0577.
    '''

    kff: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pre-control gain constant of the inner loop field regulator (<i>Kff</i>).
            Typical value = 1.
            '''

        })
    '''
    Pre-control gain constant of the inner loop field regulator (<i>Kff</i>).
    Typical value = 1.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback gain constant of the inner loop field regulator (<i>Kg</i>) (&gt;=
            0). Typical value = 1.
            '''

        })
    '''
    Feedback gain constant of the inner loop field regulator (<i>Kg</i>)
    (&gt;= 0). Typical value = 1.
    '''

    kia: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>Kia</i>) (&gt; 0). Typical value =
            45,094.
            '''

        })
    '''
    Voltage regulator integral gain (<i>Kia</i>) (&gt; 0). Typical value
    = 45,094.
    '''

    klr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exciter output current limit adjustment (<i>Kcl</i>) (&gt; 0). Typical
            value = 17,33.
            '''

        })
    '''
    Exciter output current limit adjustment (<i>Kcl</i>) (&gt; 0). Typical
    value = 17,33.
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Forward gain constant of the inner loop field regulator (<i>Km</i>). Typical
            value = 1.
            '''

        })
    '''
    Forward gain constant of the inner loop field regulator (<i>Km</i>).
    Typical value = 1.
    '''

    kpa: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>Kpa</i>) (&gt; 0). Typical value
            = 18,038.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>Kpa</i>) (&gt; 0). Typical
    value = 18,038.
    '''

    kvd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator derivative gain (<i>Kvd</i>). Typical value = 0.
            '''

        })
    '''
    Voltage regulator derivative gain (<i>Kvd</i>). Typical value = 0.
    '''

    oelin: Optional[ ExcST6BOELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input selector (<i>OELin</i>). Typical value = noOELinput (corresponds
            to <i>OELin</i> = 0 on diagram).
            '''

        })
    '''
    OEL input selector (<i>OELin</i>). Typical value = noOELinput (corresponds
    to <i>OELin</i> = 0 on diagram).
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant of inner loop field voltage regulator (<i>Tg</i>)
            (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Feedback time constant of inner loop field voltage regulator (<i>Tg</i>)
    (&gt;= 0). Typical value = 0,02.
    '''

    ts: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier firing time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Rectifier firing time constant (<i>Ts</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tvd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator derivative gain (<i>Tvd</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Voltage regulator derivative gain (<i>Tvd</i>) (&gt;= 0). Typical value
    = 0.
    '''

    vamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
            = 4,81.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vamax</i>) (&gt; 0). Typical value
    = 4,81.
    '''

    vamin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
            = -3,85.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vamin</i>) (&lt; 0). Typical value
    = -3,85.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; ExcST6B.vimin).
            Typical value = 10.
            '''

        })
    '''
    Maximum voltage regulator input limit (<i>Vimax</i>) (&gt; ExcST6B.vimin).
    Typical value = 10.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; ExcST6B.vimax).
            Typical value = -10.
            '''

        })
    '''
    Minimum voltage regulator input limit (<i>Vimin</i>) (&lt; ExcST6B.vimax).
    Typical value = -10.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 4,81.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 4,81.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -3,85.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -3,85.
    '''

    xc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation source reactance (<i>Xc</i>). Typical value = 0,05.
            '''

        })
    '''
    Excitation source reactance (<i>Xc</i>). Typical value = 0,05.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcST7B(ExcitationSystemDynamics):
    '''
    Modified IEEE ST7B static excitation system without stator current limiter
    (SCL) and current compensator (DROOP) inputs.
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-value gate feedback gain (<i>Kh</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    High-value gate feedback gain (<i>Kh</i>) (&gt;= 0). Typical value
    = 1.
    '''

    kia: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator integral gain (<i>Kia</i>) (&gt;= 0). Typical value =
            1.
            '''

        })
    '''
    Voltage regulator integral gain (<i>Kia</i>) (&gt;= 0). Typical value
    = 1.
    '''

    kl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low-value gate feedback gain (<i>Kl</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Low-value gate feedback gain (<i>Kl</i>) (&gt;= 0). Typical value =
    1.
    '''

    kpa: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator proportional gain (<i>Kpa</i>) (&gt; 0). Typical value
            = 40.
            '''

        })
    '''
    Voltage regulator proportional gain (<i>Kpa</i>) (&gt; 0). Typical
    value = 40.
    '''

    oelin: Optional[ ExcST7BOELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL input selector (<i>OELin</i>). Typical value = noOELinput.
            '''

        })
    '''
    OEL input selector (<i>OELin</i>). Typical value = noOELinput.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lag time constant (<i>Tb</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Regulator lag time constant (<i>Tb</i>) (&gt;= 0). Typical value =
    1.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulator lead time constant (<i>Tc</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Regulator lead time constant (<i>Tc</i>) (&gt;= 0). Typical value =
    1.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Excitation control system stabilizer time constant (<i>Tf</i>) (&gt;=
    0). Typical value = 1.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant of inner loop field voltage regulator (<i>Tg</i>)
            (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Feedback time constant of inner loop field voltage regulator (<i>Tg</i>)
    (&gt;= 0). Typical value = 1.
    '''

    tia: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback time constant (<i>Tia</i>) (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Feedback time constant (<i>Tia</i>) (&gt;= 0). Typical value = 3.
    '''

    ts: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rectifier firing time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Rectifier firing time constant (<i>Ts</i>) (&gt;= 0). Typical value
    = 0.
    '''

    uelin: Optional[ ExcST7BUELselectorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL input selector (<i>UELin</i>). Typical value = noUELinput.
            '''

        })
    '''
    UEL input selector (<i>UELin</i>). Typical value = noUELinput.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage reference signal (<i>Vmax</i>) (&gt; 0 and &gt; ExcST7B.vmin)).
            Typical value = 1,1.
            '''

        })
    '''
    Maximum voltage reference signal (<i>Vmax</i>) (&gt; 0 and &gt; ExcST7B.vmin)).
    Typical value = 1,1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage reference signal (<i>Vmin</i>) (&gt; 0 and &lt; ExcST7B.vmax).
            Typical value = 0,9.
            '''

        })
    '''
    Minimum voltage reference signal (<i>Vmin</i>) (&gt; 0 and &lt; ExcST7B.vmax).
    Typical value = 0,9.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
            = 5.
            '''

        })
    '''
    Maximum voltage regulator output (<i>Vrmax</i>) (&gt; 0). Typical value
    = 5.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
            = -4,5.
            '''

        })
    '''
    Minimum voltage regulator output (<i>Vrmin</i>) (&lt; 0). Typical value
    = -4,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExcitationSystemUserDefined(ExcitationSystemDynamics):
    '''
    Excitation system function block whose dynamic behaviour is described by
    <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.ExcitationSystemUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HVDCDynamics(DynamicsFunctionBlock):
    '''
    HVDC whose behaviour is described by reference to a standard model <font
    color="#0f0f0f">or by definition of a user-defined model.</font>
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CSCDynamics(HVDCDynamics):
    '''
    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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CsConverter.CSCDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current source converter to which current source converter dynamics model
            applies.
            '''

        })
    '''
    Current source converter to which current source converter dynamics
    model applies.
    '''

    CSConverter: Optional[CsConverter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CsConverter.CSCDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CSCUserDefined(CSCDynamics):
    '''
    Current source converter (CSC) function block whose dynamic behaviour is
    described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.CSCUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CSCtype1(CSCDynamics):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VSCDynamics(HVDCDynamics):
    '''
    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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'VsConverter.VSCDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage source converter to which voltage source converter dynamics model
            applies.
            '''

        })
    '''
    Voltage source converter to which voltage source converter dynamics
    model applies.
    '''

    VsConverter: Optional[VsConverter] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VsConverter.VSCDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'HVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VSCUserDefined(VSCDynamics):
    '''
    Voltage source converter (VSC) function block whose dynamic behaviour is
    described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.VSCUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class VSCtype1(VSCDynamics):
    '''
    '''

    BlockingFunction: Optional[BlockingFunction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BlockingFunction.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DCvoltageControl: Optional[DCvoltageControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DCvoltageControl.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pcontrol: Optional[Pcontrol] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Pcontrol.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PFmodel: Optional[PFmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PFmode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qlimiter: Optional[Qlimiter] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Qlimiter.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qmode: Optional[Qmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Qmode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qregulator: Optional[Qregulator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Qregulator.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Umode: Optional[Umode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Umode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BlockingFunction: Optional[BlockingFunction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BlockingFunction.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DCvoltageControl: Optional[DCvoltageControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DCvoltageControl.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PFmodel: Optional[PFmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFmode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pcontrol: Optional[Pcontrol] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pcontrol.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qlimiter: Optional[Qlimiter] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qlimiter.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qmode: Optional[Qmode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qmode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Qregulator: Optional[Qregulator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Qregulator.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Umode: Optional[Umode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Umode.VSCtype1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MechanicalLoadDynamics(DynamicsFunctionBlock):
    '''
    Mechanical load function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.MechanicalLoadDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asynchronous machine model with which this mechanical load model is associated.
            MechanicalLoadDynamics shall have either an association to SynchronousMachineDynamics
            or to AsynchronousMachineDynamics.
            '''

        })
    '''
    Asynchronous machine model with which this mechanical load model is
    associated. MechanicalLoadDynamics shall have either an association
    to SynchronousMachineDynamics or to AsynchronousMachineDynamics.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.MechanicalLoadDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine model with which this mechanical load model is associated.
            MechanicalLoadDynamics shall have either an association to SynchronousMachineDynamics
            or AsynchronousMachineDyanmics.
            '''

        })
    '''
    Synchronous machine model with which this mechanical load model is
    associated. MechanicalLoadDynamics shall have either an association
    to SynchronousMachineDynamics or AsynchronousMachineDyanmics.
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.MechanicalLoadDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine model with which this mechanical load model is associated.
            MechanicalLoadDynamics shall have either an association to SynchronousMachineDynamics
            or to AsynchronousMachineDynamics.
            '''

        })
    '''
    Asynchronous machine model with which this mechanical load model is
    associated. MechanicalLoadDynamics shall have either an association
    to SynchronousMachineDynamics or to AsynchronousMachineDynamics.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.MechanicalLoadDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machine model with which this mechanical load model is associated.
            MechanicalLoadDynamics shall have either an association to SynchronousMachineDynamics
            or AsynchronousMachineDyanmics.
            '''

        })
    '''
    Synchronous machine model with which this mechanical load model is
    associated. MechanicalLoadDynamics shall have either an association
    to SynchronousMachineDynamics or AsynchronousMachineDyanmics.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MechanicalLoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MechLoad1(MechanicalLoadDynamics):
    '''
    Mechanical load model type 1.
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed squared coefficient (<i>a</i>).
            '''

        })
    '''
    Speed squared coefficient (<i>a</i>).
    '''

    b: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed coefficient (<i>b</i>).
            '''

        })
    '''
    Speed coefficient (<i>b</i>).
    '''

    d: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed to the exponent coefficient (<i>d</i>).
            '''

        })
    '''
    Speed to the exponent coefficient (<i>d</i>).
    '''

    e: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exponent (<i>e</i>).
            '''

        })
    '''
    Exponent (<i>e</i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MechanicalLoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MechanicalLoadUserDefined(MechanicalLoadDynamics):
    '''
    Mechanical load function block whose dynamic behaviour is described by
    <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.MechanicalLoadUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcitationLimiterDynamics(DynamicsFunctionBlock):
    '''
    Overexcitation limiter function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.OverexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this overexcitation limiter model is
            associated.
            '''

        })
    '''
    Excitation system model with which this overexcitation limiter model
    is associated.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.OverexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this overexcitation limiter model is
            associated.
            '''

        })
    '''
    Excitation system model with which this overexcitation limiter model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OverexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcLim2(OverexcitationLimiterDynamics):
    '''
    Different from LimIEEEOEL, LimOEL2 has a fixed pickup threshold and reduces
    the excitation set-point by means of a non-windup integral regulator.
    <i>Irated</i> is the rated machine excitation current (calculated from
    nameplate conditions: <i>V</i><i><sub>nom</sub></i>, <i>P</i><i><sub>nom</sub></i>,
    <i>CosPhi</i><i><sub>nom</sub></i>).
    '''

    ifdlim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit value of rated field current (<i>I</i><i><sub>FDLIM</sub></i>). Typical
            value = 1,05.
            '''

        })
    '''
    Limit value of rated field current (<i>I</i><i><sub>FDLIM</sub></i>).
    Typical value = 1,05.
    '''

    koi: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain Over excitation limiter (<i>K</i><i><sub>OI</sub></i>). Typical value
            = 0,1.
            '''

        })
    '''
    Gain Over excitation limiter (<i>K</i><i><sub>OI</sub></i>). Typical
    value = 0,1.
    '''

    voimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum error signal (<i>V</i><i><sub>OIMAX</sub></i>) (&gt; OverexcLim2.voimin).
            Typical value = 0.
            '''

        })
    '''
    Maximum error signal (<i>V</i><i><sub>OIMAX</sub></i>) (&gt; OverexcLim2.voimin).
    Typical value = 0.
    '''

    voimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum error signal (<i>V</i><i><sub>OIMIN</sub></i>) (&lt; OverexcLim2.voimax).
            Typical value = -9999.
            '''

        })
    '''
    Minimum error signal (<i>V</i><i><sub>OIMIN</sub></i>) (&lt; OverexcLim2.voimax).
    Typical value = -9999.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OverexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcLimIEEE(OverexcitationLimiterDynamics):
    '''
    The over excitation limiter model is intended to represent the significant
    features of OELs necessary for some large-scale system studies. It is the
    result of a pragmatic approach to obtain a model that can be widely applied
    with attainable data from generator owners. An attempt to include all variations
    in the functionality of OELs and duplicate how they interact with the rest
    of the excitation systems would likely result in a level of application
    insufficient for the studies for which they are intended.
    Reference: IEEE OEL 421.5-2005, 9.
    '''

    kramp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL ramped limit rate (<i>K</i><i><sub>RAMP</sub></i>). Unit = PU / s.
            Typical value = 10.
            '''

        })
    '''
    OEL ramped limit rate (<i>K</i><i><sub>RAMP</sub></i>). Unit = PU /
    s. Typical value = 10.
    '''

    hyst: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL pickup/drop-out hysteresis (<i>HYST</i>). Typical value = 0,03.
            '''

        })
    '''
    OEL pickup/drop-out hysteresis (<i>HYST</i>). Typical value = 0,03.
    '''

    ifdlim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL timed field current limit (<i>I</i><i><sub>FDLIM</sub></i>). Typical
            value = 1,05.
            '''

        })
    '''
    OEL timed field current limit (<i>I</i><i><sub>FDLIM</sub></i>). Typical
    value = 1,05.
    '''

    ifdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL instantaneous field current limit (<i>I</i><i><sub>FDMAX</sub></i>).
            Typical value = 1,5.
            '''

        })
    '''
    OEL instantaneous field current limit (<i>I</i><i><sub>FDMAX</sub></i>).
    Typical value = 1,5.
    '''

    itfpu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL timed field current limiter pickup level (<i>I</i><i><sub>TFPU</sub></i>).
            Typical value = 1,05.
            '''

        })
    '''
    OEL timed field current limiter pickup level (<i>I</i><i><sub>TFPU</sub></i>).
    Typical value = 1,05.
    '''

    kcd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            OEL cooldown gain (<i>K</i><i><sub>CD</sub></i>). Typical value = 1.
            '''

        })
    '''
    OEL cooldown gain (<i>K</i><i><sub>CD</sub></i>). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OverexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcLimX1(OverexcitationLimiterDynamics):
    '''
    Field voltage over excitation limiter.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low voltage point on the inverse time characteristic (<i>EFD</i><i><sub>1</sub></i>).
            Typical value = 1,1.
            '''

        })
    '''
    Low voltage point on the inverse time characteristic (<i>EFD</i><i><sub>1</sub></i>).
    Typical value = 1,1.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mid voltage point on the inverse time characteristic (<i>EFD</i><i><sub>2</sub></i>).
            Typical value = 1,2.
            '''

        })
    '''
    Mid voltage point on the inverse time characteristic (<i>EFD</i><i><sub>2</sub></i>).
    Typical value = 1,2.
    '''

    efd3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High voltage point on the inverse time characteristic (<i>EFD</i><i><sub>3</sub></i>).
            Typical value = 1,5.
            '''

        })
    '''
    High voltage point on the inverse time characteristic (<i>EFD</i><i><sub>3</sub></i>).
    Typical value = 1,5.
    '''

    efddes: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Desired field voltage (<i>EFD</i><i><sub>DES</sub></i>). Typical value
            = 0,9.
            '''

        })
    '''
    Desired field voltage (<i>EFD</i><i><sub>DES</sub></i>). Typical value
    = 0,9.
    '''

    efdrated: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated field voltage (<i>EFD</i><i><sub>RATED</sub></i>). Typical value
            = 1,05.
            '''

        })
    '''
    Rated field voltage (<i>EFD</i><i><sub>RATED</sub></i>). Typical value
    = 1,05.
    '''

    kmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>MX</sub></i>). Typical value = 0,01.
            '''

        })
    '''
    Gain (<i>K</i><i><sub>MX</sub></i>). Typical value = 0,01.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the low voltage point on the inverse time characteristic
            (<i>TIME</i><i><sub>1</sub></i>) (&gt;= 0). Typical value = 120.
            '''

        })
    '''
    Time to trip the exciter at the low voltage point on the inverse time
    characteristic (<i>TIME</i><i><sub>1</sub></i>) (&gt;= 0). Typical
    value = 120.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the mid voltage point on the inverse time characteristic
            (<i>TIME</i><i><sub>2</sub></i>) (&gt;= 0). Typical value = 40.
            '''

        })
    '''
    Time to trip the exciter at the mid voltage point on the inverse time
    characteristic (<i>TIME</i><i><sub>2</sub></i>) (&gt;= 0). Typical
    value = 40.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the high voltage point on the inverse time
            characteristic (<i>TIME</i><i><sub>3</sub></i>) (&gt;= 0). Typical value
            = 15.
            '''

        })
    '''
    Time to trip the exciter at the high voltage point on the inverse time
    characteristic (<i>TIME</i><i><sub>3</sub></i>) (&gt;= 0). Typical
    value = 15.
    '''

    vlow: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low voltage limit (<i>V</i><i><sub>LOW</sub></i>) (&gt; 0).
            '''

        })
    '''
    Low voltage limit (<i>V</i><i><sub>LOW</sub></i>) (&gt; 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OverexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcLimX2(OverexcitationLimiterDynamics):
    '''
    Field voltage or current overexcitation limiter designed to protect the
    generator field of an AC machine with automatic excitation control from
    overheating due to prolonged overexcitation.
    '''

    m: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>m</i>).
            true = IFD limiting
            false = EFD limiting.
            '''

        })
    '''
    (<i>m</i>).
    true = IFD limiting
    false = EFD limiting.
    '''

    efd1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>1</sub></i>).
            Typical value = 1,1.
            '''

        })
    '''
    Low voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>1</sub></i>).
    Typical value = 1,1.
    '''

    efd2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mid voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>2</sub></i>).
            Typical value = 1,2.
            '''

        })
    '''
    Mid voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>2</sub></i>).
    Typical value = 1,2.
    '''

    efd3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>3</sub></i>).
            Typical value = 1,5.
            '''

        })
    '''
    High voltage or current point on the inverse time characteristic (<i>EFD</i><i><sub>3</sub></i>).
    Typical value = 1,5.
    '''

    efddes: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Desired field voltage if <i>m</i> = false or desired field current if <i>m
            </i>= true (<i>EFD</i><i><sub>DES</sub></i>). Typical value = 1.
            '''

        })
    '''
    Desired field voltage if <i>m</i> = false or desired field current
    if <i>m </i>= true (<i>EFD</i><i><sub>DES</sub></i>). Typical value
    = 1.
    '''

    efdrated: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated field voltage if m = false or rated field current if m = true (<i>EFD</i><i><sub>RATED</sub></i>).
            Typical value = 1,05.
            '''

        })
    '''
    Rated field voltage if m = false or rated field current if m = true
    (<i>EFD</i><i><sub>RATED</sub></i>). Typical value = 1,05.
    '''

    kmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>MX</sub></i>). Typical value = 0,002.
            '''

        })
    '''
    Gain (<i>K</i><i><sub>MX</sub></i>). Typical value = 0,002.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the low voltage or current point on the inverse
            time characteristic (<i>TIME</i><i><sub>1</sub></i>) (&gt;= 0). Typical
            value = 120.
            '''

        })
    '''
    Time to trip the exciter at the low voltage or current point on the
    inverse time characteristic (<i>TIME</i><i><sub>1</sub></i>) (&gt;=
    0). Typical value = 120.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the mid voltage or current point on the inverse
            time characteristic (<i>TIME</i><i><sub>2</sub></i>) (&gt;= 0). Typical
            value = 40.
            '''

        })
    '''
    Time to trip the exciter at the mid voltage or current point on the
    inverse time characteristic (<i>TIME</i><i><sub>2</sub></i>) (&gt;=
    0). Typical value = 40.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to trip the exciter at the high voltage or current point on the inverse
            time characteristic (<i>TIME</i><i><sub>3</sub></i>) (&gt;= 0). Typical
            value = 15.
            '''

        })
    '''
    Time to trip the exciter at the high voltage or current point on the
    inverse time characteristic (<i>TIME</i><i><sub>3</sub></i>) (&gt;=
    0). Typical value = 15.
    '''

    vlow: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low voltage limit (<i>V</i><i><sub>LOW</sub></i>) (&gt; 0).
            '''

        })
    '''
    Low voltage limit (<i>V</i><i><sub>LOW</sub></i>) (&gt; 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OverexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OverexcitationLimiterUserDefined(OverexcitationLimiterDynamics):
    '''
    Overexcitation limiter system function block whose dynamic behaviour is
    described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.OverexcitationLimiterUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArControllerType1Dynamics(DynamicsFunctionBlock):
    '''
    Power factor or VAr controller type 1 function block whose behaviour is
    described by reference to a standard model <font color="#0f0f0f">or by
    definition of a user-defined model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this power actor or VAr controller type
            1 model is associated.
            '''

        })
    '''
    Excitation system model with which this power actor or VAr controller
    type 1 model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by this power factor or VAr controller type 1
            model.
            '''

        })
    '''
    Remote input signal used by this power factor or VAr controller type
    1 model.
    '''

    VoltageAdjusterDynamics: Optional[VoltageAdjusterDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageAdjusterDynamics.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage adjuster model associated with this power factor or VAr controller
            type 1 model.
            '''

        })
    '''
    Voltage adjuster model associated with this power factor or VAr controller
    type 1 model.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this power actor or VAr controller type
            1 model is associated.
            '''

        })
    '''
    Excitation system model with which this power actor or VAr controller
    type 1 model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this power factor or VAr controller type 1
            model.
            '''

        })
    '''
    Remote input signal used by this power factor or VAr controller type
    1 model.
    '''

    VoltageAdjusterDynamics: Optional[VoltageAdjusterDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageAdjusterDynamics.PFVArControllerType1Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Voltage adjuster model associated with this power factor or VAr controller
            type 1 model.
            '''

        })
    '''
    Voltage adjuster model associated with this power factor or VAr controller
    type 1 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType1Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArControllerType1UserDefined(PFVArControllerType1Dynamics):
    '''
    Power factor or VAr controller type 1 function block whose dynamic behaviour
    is described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.PFVArControllerType1UserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArType1IEEEPFController(PFVArControllerType1Dynamics):
    '''
    IEEE PF controller type 1 which operates by moving the voltage reference
    directly.
    Reference: IEEE 421.5-2005, 11.2.
    '''

    ovex: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overexcitation Flag (<i>OVEX</i>)
            true = overexcited
            false = underexcited.
            '''

        })
    '''
    Overexcitation Flag (<i>OVEX</i>)
    true = overexcited
    false = underexcited.
    '''

    vpfcbw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PF controller deadband (<i>V</i><i><sub>PFC_BW</sub></i>). Typical value
            = 0,05.
            '''

        })
    '''
    PF controller deadband (<i>V</i><i><sub>PFC_BW</sub></i>). Typical
    value = 0,05.
    '''

    tpfc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PF controller time delay (<i>T</i><i><sub>PFC</sub></i>) (&gt;= 0). Typical
            value = 5.
            '''

        })
    '''
    PF controller time delay (<i>T</i><i><sub>PFC</sub></i>) (&gt;= 0).
    Typical value = 5.
    '''

    vitmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum machine terminal current needed to enable pf/var controller (<i>V</i><i><sub>ITMIN</sub></i>).
            '''

        })
    '''
    Minimum machine terminal current needed to enable pf/var controller
    (<i>V</i><i><sub>ITMIN</sub></i>).
    '''

    vpf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine power factor (<i>V</i><i><sub>PF</sub></i>).
            '''

        })
    '''
    Synchronous machine power factor (<i>V</i><i><sub>PF</sub></i>).
    '''

    vpfref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PF controller reference (<i>V</i><i><sub>PFREF</sub></i>).
            '''

        })
    '''
    PF controller reference (<i>V</i><i><sub>PFREF</sub></i>).
    '''

    vvtmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum machine terminal voltage needed for pf/var controller to be enabled
            (<i>V</i><i><sub>VTMAX</sub></i>) (&gt; PFVArType1IEEEPFController.vvtmin).
            '''

        })
    '''
    Maximum machine terminal voltage needed for pf/var controller to be
    enabled (<i>V</i><i><sub>VTMAX</sub></i>) (&gt; PFVArType1IEEEPFController.vvtmin).
    '''

    vvtmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum machine terminal voltage needed to enable pf/var controller (<i>V</i><i><sub>VTMIN</sub></i>)
            (&lt; PFVArType1IEEEPFController.vvtmax).
            '''

        })
    '''
    Minimum machine terminal voltage needed to enable pf/var controller
    (<i>V</i><i><sub>VTMIN</sub></i>) (&lt; PFVArType1IEEEPFController.vvtmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType1Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArType1IEEEVArController(PFVArControllerType1Dynamics):
    '''
    IEEE VAR controller type 1 which operates by moving the voltage reference
    directly.
    Reference: IEEE 421.5-2005, 11.3.
    '''

    vvarcbw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Var controller deadband (<i>V</i><i><sub>VARC_BW</sub></i>). Typical value
            = 0,02.
            '''

        })
    '''
    Var controller deadband (<i>V</i><i><sub>VARC_BW</sub></i>). Typical
    value = 0,02.
    '''

    tvarc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Var controller time delay (<i>T</i><i><sub>VARC</sub></i>) (&gt;= 0). Typical
            value = 5.
            '''

        })
    '''
    Var controller time delay (<i>T</i><i><sub>VARC</sub></i>) (&gt;= 0).
    Typical value = 5.
    '''

    vvar: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine power factor (<i>V</i><i><sub>VAR</sub></i>).
            '''

        })
    '''
    Synchronous machine power factor (<i>V</i><i><sub>VAR</sub></i>).
    '''

    vvarref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Var controller reference (<i>V</i><i><sub>VARREF</sub></i>).
            '''

        })
    '''
    Var controller reference (<i>V</i><i><sub>VARREF</sub></i>).
    '''

    vvtmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum machine terminal voltage needed for pf/VAr controller to be enabled
            (<i>V</i><i><sub>VTMAX</sub></i>) (&gt; PVFArType1IEEEVArController.vvtmin).
            '''

        })
    '''
    Maximum machine terminal voltage needed for pf/VAr controller to be
    enabled (<i>V</i><i><sub>VTMAX</sub></i>) (&gt; PVFArType1IEEEVArController.vvtmin).
    '''

    vvtmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum machine terminal voltage needed to enable pf/var controller (<i>V</i><i><sub>VTMIN</sub></i>)
            (&lt; PVFArType1IEEEVArController.vvtmax).
            '''

        })
    '''
    Minimum machine terminal voltage needed to enable pf/var controller
    (<i>V</i><i><sub>VTMIN</sub></i>) (&lt; PVFArType1IEEEVArController.vvtmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType1Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArControllerType2Dynamics(DynamicsFunctionBlock):
    '''
    Power factor or VAr controller type 2 function block whose behaviour is
    described by reference to a standard model <font color="#0f0f0f">or by
    definition of a user-defined model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PFVArControllerType2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this power factor or VAr controller
            type 2 is associated.
            '''

        })
    '''
    Excitation system model with which this power factor or VAr controller
    type 2 is associated.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PFVArControllerType2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this power factor or VAr controller
            type 2 is associated.
            '''

        })
    '''
    Excitation system model with which this power factor or VAr controller
    type 2 is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType2Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArControllerType2UserDefined(PFVArControllerType2Dynamics):
    '''
    Power factor or VAr controller type 2 function block whose dynamic behaviour
    is described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.PFVArControllerType2UserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArType2Common1(PFVArControllerType2Dynamics):
    '''
    Power factor / reactive power regulator. This model represents the power
    factor or reactive power controller such as the Basler SCP-250. The controller
    measures power factor or reactive power (PU on generator rated power) and
    compares it with the operator's set point.
    [Footnote: Basler SCP-250 is an example of a suitable product available
    commercially. This information is given for the convenience of users of
    this document and does not constitute an endorsement by IEC of this product.]
    '''

    j: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>J</i>).
            true = control mode for reactive power
            false = control mode for power factor.
            '''

        })
    '''
    Selector (<i>J</i>).
    true = control mode for reactive power
    false = control mode for power factor.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reset gain (<i>Ki</i>).
            '''

        })
    '''
    Reset gain (<i>Ki</i>).
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain (<i>Kp</i>).
            '''

        })
    '''
    Proportional gain (<i>Kp</i>).
    '''

    max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output limit (<i>max</i>).
            '''

        })
    '''
    Output limit (<i>max</i>).
    '''

    ref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference value of reactive power or power factor (<i>Ref</i>).
            The reference value is initialised by this model. This initialisation can
            override the value exchanged by this attribute to represent a plant operator's
            change of the reference setting.
            '''

        })
    '''
    Reference value of reactive power or power factor (<i>Ref</i>).
    The reference value is initialised by this model. This initialisation
    can override the value exchanged by this attribute to represent a plant
    operator's change of the reference setting.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType2Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArType2IEEEPFController(PFVArControllerType2Dynamics):
    '''
    IEEE PF controller type 2 which is a summing point type controller making
    up the outside loop of a two-loop system. This controller is implemented
    as a slow PI type controller. The voltage regulator forms the inner loop
    and is implemented as a fast controller.
    Reference: IEEE 421.5-2005, 11.4.
    '''

    exlon: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overexcitation or under excitation flag (<i>EXLON</i>)
            true = 1 (not in the overexcitation or underexcitation state, integral
            action is active)
            false = 0 (in the overexcitation or underexcitation state, so integral
            action is disabled to allow the limiter to play its role).
            '''

        })
    '''
    Overexcitation or under excitation flag (<i>EXLON</i>)
    true = 1 (not in the overexcitation or underexcitation state, integral
    action is active)
    false = 0 (in the overexcitation or underexcitation state, so integral
    action is disabled to allow the limiter to play its role).
    '''

    vs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Generator sensing voltage (<i>V</i><i><sub>S</sub></i>).
            '''

        })
    '''
    Generator sensing voltage (<i>V</i><i><sub>S</sub></i>).
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of the pf controller (<i>K</i><i><sub>I</sub></i>). Typical
            value = 1.
            '''

        })
    '''
    Integral gain of the pf controller (<i>K</i><i><sub>I</sub></i>). Typical
    value = 1.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of the pf controller (<i>K</i><i><sub>P</sub></i>). Typical
            value = 1.
            '''

        })
    '''
    Proportional gain of the pf controller (<i>K</i><i><sub>P</sub></i>).
    Typical value = 1.
    '''

    pfref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power factor reference (<i>P</i><i><sub>FREF</sub></i>).
            '''

        })
    '''
    Power factor reference (<i>P</i><i><sub>FREF</sub></i>).
    '''

    vclmt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum output of the pf controller (<i>V</i><i><sub>CLMT</sub></i>). Typical
            value = 0,1.
            '''

        })
    '''
    Maximum output of the pf controller (<i>V</i><i><sub>CLMT</sub></i>).
    Typical value = 0,1.
    '''

    vref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator reference (<i>V</i><i><sub>REF</sub></i>).
            '''

        })
    '''
    Voltage regulator reference (<i>V</i><i><sub>REF</sub></i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType2Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PFVArType2IEEEVArController(PFVArControllerType2Dynamics):
    '''
    IEEE VAR controller type 2 which is a summing point type controller. It
    makes up the outside loop of a two-loop system. This controller is implemented
    as a slow PI type controller, and the voltage regulator forms the inner
    loop and is implemented as a fast controller.
    Reference: IEEE 421.5-2005, 11.5.
    '''

    exlon: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overexcitation or under excitation flag (<i>EXLON</i>)
            true = 1 (not in the overexcitation or underexcitation state, integral
            action is active)
            false = 0 (in the overexcitation or underexcitation state, so integral
            action is disabled to allow the limiter to play its role).
            '''

        })
    '''
    Overexcitation or under excitation flag (<i>EXLON</i>)
    true = 1 (not in the overexcitation or underexcitation state, integral
    action is active)
    false = 0 (in the overexcitation or underexcitation state, so integral
    action is disabled to allow the limiter to play its role).
    '''

    vs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Generator sensing voltage (<i>V</i><i><sub>S</sub></i>).
            '''

        })
    '''
    Generator sensing voltage (<i>V</i><i><sub>S</sub></i>).
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of the pf controller (<i>K</i><i><sub>I</sub></i>).
            '''

        })
    '''
    Integral gain of the pf controller (<i>K</i><i><sub>I</sub></i>).
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of the pf controller (<i>K</i><i><sub>P</sub></i>).
            '''

        })
    '''
    Proportional gain of the pf controller (<i>K</i><i><sub>P</sub></i>).
    '''

    qref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power reference (<i>Q</i><i><sub>REF</sub></i>).
            '''

        })
    '''
    Reactive power reference (<i>Q</i><i><sub>REF</sub></i>).
    '''

    vclmt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum output of the pf controller (<i>V</i><i><sub>CLMT</sub></i>).
            '''

        })
    '''
    Maximum output of the pf controller (<i>V</i><i><sub>CLMT</sub></i>).
    '''

    vref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage regulator reference (<i>V</i><i><sub>REF</sub></i>).
            '''

        })
    '''
    Voltage regulator reference (<i>V</i><i><sub>REF</sub></i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PFVArControllerType2Dynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerSystemStabilizerDynamics(DynamicsFunctionBlock):
    '''
    Power system stabilizer function block whose behaviour is described by
    reference to a standard model <font color="#0f0f0f">or by definition of
    a user-defined model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PowerSystemStabilizerDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this power system stabilizer model is
            associated.
            '''

        })
    '''
    Excitation system model with which this power system stabilizer model
    is associated.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.PowerSystemStabilizerDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this power system stabilizer model is
            associated.
            '''

        })
    '''
    Excitation system model with which this power system stabilizer model
    is associated.
    '''

    RemoteInputSignal: list[RemoteInputSignal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RemoteInputSignal.PowerSystemStabilizerDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this power system stabilizer model.
            '''

        })
    '''
    Remote input signal used by this power system stabilizer model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerSystemStabilizerUserDefined(PowerSystemStabilizerDynamics):
    '''
    <font color="#0f0f0f">Power system stabilizer</font> function block whose
    dynamic behaviour is described by <font color="#0f0f0f">a user-defined
    model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.PowerSystemStabilizerUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pss1(PowerSystemStabilizerDynamics):
    '''
    Italian PSS with three inputs (speed, frequency, power).
    '''

    kf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency power input gain (<i>K</i><i><sub>F</sub></i>). Typical value
            = 5.
            '''

        })
    '''
    Frequency power input gain (<i>K</i><i><sub>F</sub></i>). Typical value
    = 5.
    '''

    komega: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shaft speed power input gain (<i>K</i><i><sub>omega</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    Shaft speed power input gain (<i>K</i><i><sub>omega</sub></i>). Typical
    value = 0.
    '''

    kpe: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electric power input gain (<i>K</i><i><sub>PE</sub></i>). Typical value
            = 0,3.
            '''

        })
    '''
    Electric power input gain (<i>K</i><i><sub>PE</sub></i>). Typical value
    = 0,3.
    '''

    ks: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS gain (<i>Ks</i>). Typical value = 1.
            '''

        })
    '''
    PSS gain (<i>Ks</i>). Typical value = 1.
    '''

    vadat: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Signal selector (<i>V</i><i><sub>ADAT</sub></i>).</font>
            <font color="#0f0f0f">true = closed (generator power is greater than <i>Pmin</i>)</font>
            <font color="#0f0f0f">false = open (<i>Pe</i> is smaller than <i>Pmin</i>).</font>
            <font color="#0f0f0f">Typical value = true.</font>
            '''

        })
    '''
    <font color="#0f0f0f">Signal selector (<i>V</i><i><sub>ADAT</sub></i>).</font>
    <font color="#0f0f0f">true = closed (generator power is greater than
    <i>Pmin</i>)</font>
    <font color="#0f0f0f">false = open (<i>Pe</i> is smaller than <i>Pmin</i>).</font>
    <font color="#0f0f0f">Typical value = true.</font>
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum power PSS enabling (<i>Pmin</i>). Typical value = 0,25.
            '''

        })
    '''
    Minimum power PSS enabling (<i>Pmin</i>). Typical value = 0,25.
    '''

    t10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical value = 3,5.
            '''

        })
    '''
    Washout (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical value = 3,5.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Filter time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0). If = 0,
            both blocks are bypassed. Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0). If
    = 0, both blocks are bypassed. Typical value = 0.
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0). If = 0,
            both blocks are bypassed. Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0). If
    = 0, both blocks are bypassed. Typical value = 0.
    '''

    tpe: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electric power filter time constant (<i>T</i><i><sub>PE</sub></i>) (&gt;=
            0). Typical value = 0,05.
            '''

        })
    '''
    Electric power filter time constant (<i>T</i><i><sub>PE</sub></i>)
    (&gt;= 0). Typical value = 0,05.
    '''

    vsmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>V</i><i><sub>SMN</sub></i>). Typical
            value = -0,06.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>V</i><i><sub>SMN</sub></i>). Typical
    value = -0,06.
    '''

    vsmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>V</i><i><sub>SMX</sub></i>). Typical
            value = 0,06.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>V</i><i><sub>SMX</sub></i>). Typical
    value = 0,06.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pss1A(PowerSystemStabilizerDynamics):
    '''
    Single input power system stabilizer. It is a modified version in order
    to allow representation of various vendors' implementations on PSS type
    1A.
    '''

    kd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector (<i>Kd</i>).
            true = e<sup>-sTdelay</sup> used
            false = e<sup>-sTdelay</sup> not used.
            '''

        })
    '''
    Selector (<i>Kd</i>).
    true = e<sup>-sTdelay</sup> used
    false = e<sup>-sTdelay</sup> not used.
    '''

    a1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>1</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>1</sub></i>).
    '''

    a2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>2</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>2</sub></i>).
    '''

    a3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>3</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>3</sub></i>).
    '''

    a4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>4</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>4</sub></i>).
    '''

    a5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>5</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>5</sub></i>).
    '''

    a6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>6</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>6</sub></i>).
    '''

    a7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>7</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>7</sub></i>).
    '''

    a8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A</i><i><sub>8</sub></i>).
            '''

        })
    '''
    Notch filter parameter (<i>A</i><i><sub>8</sub></i>).
    '''

    inputSignalType: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal (rotorAngularFrequencyDeviation, busFrequencyDeviation,
            generatorElectricalPower, generatorAcceleratingPower, busVoltage, or busVoltageDerivative).
            '''

        })
    '''
    Type of input signal (rotorAngularFrequencyDeviation, busFrequencyDeviation,
    generatorElectricalPower, generatorAcceleratingPower, busVoltage, or
    busVoltageDerivative).
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain (<i>K</i><i><sub>s</sub></i>).
            '''

        })
    '''
    Stabilizer gain (<i>K</i><i><sub>s</sub></i>).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Washout time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transducer time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Transducer time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
    '''

    tdelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tdelay</i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>Tdelay</i>) (&gt;= 0).
    '''

    vcl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer input cutoff threshold (<i>Vcl</i>).
            '''

        })
    '''
    Stabilizer input cutoff threshold (<i>Vcl</i>).
    '''

    vcu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer input cutoff threshold (<i>Vcu</i>).
            '''

        })
    '''
    Stabilizer input cutoff threshold (<i>Vcu</i>).
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum stabilizer output (<i>Vrmax</i>) (&gt; Pss1A.vrmin).
            '''

        })
    '''
    Maximum stabilizer output (<i>Vrmax</i>) (&gt; Pss1A.vrmin).
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum stabilizer output (<i>Vrmin</i>) (&lt; Pss1A.vrmax).
            '''

        })
    '''
    Minimum stabilizer output (<i>Vrmin</i>) (&lt; Pss1A.vrmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pss2B(PowerSystemStabilizerDynamics):
    '''
    Modified IEEE PSS2B. Extra lead/lag (or rate) block added at end (up to
    4 lead/lags total).
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Numerator constant (<i>a</i>). Typical value = 1.
            '''

        })
    '''
    Numerator constant (<i>a</i>). Typical value = 1.
    '''

    m: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator order of ramp tracking filter (<i>m</i>). Typical value = 5.
            '''

        })
    '''
    Denominator order of ramp tracking filter (<i>m</i>). Typical value
    = 5.
    '''

    n: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Order of ramp tracking filter (<i>n</i>). Typical value = 1.
            '''

        })
    '''
    Order of ramp tracking filter (<i>n</i>). Typical value = 1.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain (<i>Ks1</i>). Typical value = 12.
            '''

        })
    '''
    Stabilizer gain (<i>Ks1</i>). Typical value = 12.
    '''

    ks2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal #2 (<i>Ks2</i>). Typical value = 0,2.
            '''

        })
    '''
    Gain on signal #2 (<i>Ks2</i>). Typical value = 0,2.
    '''

    ks3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal #2 input before ramp-tracking filter (<i>Ks3</i>). Typical
            value = 1.
            '''

        })
    '''
    Gain on signal #2 input before ramp-tracking filter (<i>Ks3</i>). Typical
    value = 1.
    '''

    ks4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal #2 input after ramp-tracking filter (<i>Ks4</i>). Typical
            value = 1.
            '''

        })
    '''
    Gain on signal #2 input after ramp-tracking filter (<i>Ks4</i>). Typical
    value = 1.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical
            value = 0,12.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). Typical
    value = 0,12.
    '''

    t10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t11: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>11</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>11</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
            value = 0,02.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
    value = 0,02.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical
            value = 0,3.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0). Typical
    value = 0,3.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical
            value = 0,02.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0). Typical
    value = 0,02.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant on signal #1 (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Time constant on signal #1 (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant on signal #2 (<i>T</i><i><sub>7</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    Time constant on signal #2 (<i>T</i><i><sub>7</sub></i>) (&gt;= 0).
    Typical value = 2.
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead of ramp tracking filter (<i>T</i><i><sub>8</sub></i>) (&gt;= 0). Typical
            value = 0,2.
            '''

        })
    '''
    Lead of ramp tracking filter (<i>T</i><i><sub>8</sub></i>) (&gt;= 0).
    Typical value = 0,2.
    '''

    t9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag of ramp tracking filter (<i>T</i><i><sub>9</sub></i>) (&gt;= 0). Typical
            value = 0,1.
            '''

        })
    '''
    Lag of ramp tracking filter (<i>T</i><i><sub>9</sub></i>) (&gt;= 0).
    Typical value = 0,1.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead constant (<i>T</i><i><sub>a</sub></i>) (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Lead constant (<i>T</i><i><sub>a</sub></i>) (&gt;= 0). Typical value
    = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>b</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>b</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tw1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First washout on signal #1 (<i>T</i><i><sub>w1</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    First washout on signal #1 (<i>T</i><i><sub>w1</sub></i>) (&gt;= 0).
    Typical value = 2.
    '''

    tw2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second washout on signal #1 (<i>T</i><i><sub>w2</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    Second washout on signal #1 (<i>T</i><i><sub>w2</sub></i>) (&gt;= 0).
    Typical value = 2.
    '''

    tw3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First washout on signal #2 (<i>T</i><i><sub>w3</sub></i>) (&gt;= 0). Typical
            value = 2.
            '''

        })
    '''
    First washout on signal #2 (<i>T</i><i><sub>w3</sub></i>) (&gt;= 0).
    Typical value = 2.
    '''

    tw4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second washout on signal #2 (<i>T</i><i><sub>w4</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Second washout on signal #2 (<i>T</i><i><sub>w4</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    vsi1max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #1 maximum limit (<i>Vsi1max</i>) (&gt; Pss2B.vsi1min). Typical
            value = 2.
            '''

        })
    '''
    Input signal #1 maximum limit (<i>Vsi1max</i>) (&gt; Pss2B.vsi1min).
    Typical value = 2.
    '''

    vsi1min: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #1 minimum limit (<i>Vsi1min</i>) (&lt; Pss2B.vsi1max). Typical
            value = -2.
            '''

        })
    '''
    Input signal #1 minimum limit (<i>Vsi1min</i>) (&lt; Pss2B.vsi1max).
    Typical value = -2.
    '''

    vsi2max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #2 maximum limit (<i>Vsi2max</i>) (&gt; Pss2B.vsi2min). Typical
            value = 2.
            '''

        })
    '''
    Input signal #2 maximum limit (<i>Vsi2max</i>) (&gt; Pss2B.vsi2min).
    Typical value = 2.
    '''

    vsi2min: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #2 minimum limit (<i>Vsi2min</i>) (&lt; Pss2B.vsi2max). Typical
            value = -2.
            '''

        })
    '''
    Input signal #2 minimum limit (<i>Vsi2min</i>) (&lt; Pss2B.vsi2max).
    Typical value = -2.
    '''

    vstmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; Pss2B.vstmin). Typical
            value = 0,1.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; Pss2B.vstmin).
    Typical value = 0,1.
    '''

    vstmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; Pss2B.vstmax). Typical
            value = -0,1.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; Pss2B.vstmax).
    Typical value = -0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pss2ST(PowerSystemStabilizerDynamics):
    '''
    PTI microprocessor-based stabilizer type 1.
    '''

    inputSignal1Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
            generatorElectricalPower, generatorAcceleratingPower, busVoltage, or busVoltageDerivative
            - shall be different than Pss2ST.inputSignal2Type). Typical value = rotorAngularFrequencyDeviation.
            '''

        })
    '''
    Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
    generatorElectricalPower, generatorAcceleratingPower, busVoltage, or
    busVoltageDerivative - shall be different than Pss2ST.inputSignal2Type).
    Typical value = rotorAngularFrequencyDeviation.
    '''

    inputSignal2Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #2 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
            generatorElectricalPower, generatorAcceleratingPower, busVoltage, or busVoltageDerivative
            - shall be different than Pss2ST.inputSignal1Type). Typical value = busVoltageDerivative.
            '''

        })
    '''
    Type of input signal #2 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
    generatorElectricalPower, generatorAcceleratingPower, busVoltage, or
    busVoltageDerivative - shall be different than Pss2ST.inputSignal1Type).
    Typical value = busVoltageDerivative.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>1</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>1</sub></i>).
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i><i><sub>2</sub></i>).
            '''

        })
    '''
    Gain (<i>K</i><i><sub>2</sub></i>).
    '''

    lsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>L</i><i><sub>SMAX</sub></i>) (&gt; Pss2ST.lsmin).
            '''

        })
    '''
    Limiter (<i>L</i><i><sub>SMAX</sub></i>) (&gt; Pss2ST.lsmin).
    '''

    lsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>L</i><i><sub>SMIN</sub></i>) (&lt; Pss2ST.lsmax).
            '''

        })
    '''
    Limiter (<i>L</i><i><sub>SMIN</sub></i>) (&lt; Pss2ST.lsmax).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0).
    '''

    t10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0).
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>4</sub></i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0).
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0).
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0).
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0).
    '''

    t9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0).
    '''

    vcl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cutoff limiter (<i>V</i><i><sub>CL</sub></i>).
            '''

        })
    '''
    Cutoff limiter (<i>V</i><i><sub>CL</sub></i>).
    '''

    vcu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cutoff limiter (<i>V</i><i><sub>CU</sub></i>).
            '''

        })
    '''
    Cutoff limiter (<i>V</i><i><sub>CU</sub></i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Pss5(PowerSystemStabilizerDynamics):
    '''
    Detailed Italian PSS.
    '''

    ctw2: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector for second washout enabling (<i>C</i><i><sub>TW2</sub></i>).
            true = second washout filter is bypassed
            false = second washout filter in use.
            Typical value = true.
            '''

        })
    '''
    Selector for second washout enabling (<i>C</i><i><sub>TW2</sub></i>).
    true = second washout filter is bypassed
    false = second washout filter in use.
    Typical value = true.
    '''

    isfreq: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Selector for frequency/shaft speed input (<i>isFreq</i>).
            true = speed (same meaning as InputSignaKind.rotorSpeed)
            false = frequency (same meaning as InputSignalKind.busFrequency).
            Typical value = true (same meaning as InputSignalKind.rotorSpeed).
            '''

        })
    '''
    Selector for frequency/shaft speed input (<i>isFreq</i>).
    true = speed (same meaning as InputSignaKind.rotorSpeed)
    false = frequency (same meaning as InputSignalKind.busFrequency).
    Typical value = true (same meaning as InputSignalKind.rotorSpeed).
    '''

    kf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency/shaft speed input gain (<i>K</i><i><sub>F</sub></i>). Typical
            value = 5.
            '''

        })
    '''
    Frequency/shaft speed input gain (<i>K</i><i><sub>F</sub></i>). Typical
    value = 5.
    '''

    kpe: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electric power input gain (<i>K</i><i><sub>PE</sub></i>). Typical value
            = 0,3.
            '''

        })
    '''
    Electric power input gain (<i>K</i><i><sub>PE</sub></i>). Typical value
    = 0,3.
    '''

    kpss: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS gain (<i>K</i><i><sub>PSS</sub></i>). Typical value = 1.
            '''

        })
    '''
    PSS gain (<i>K</i><i><sub>PSS</sub></i>). Typical value = 1.
    '''

    vadat: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Signal selector (<i>V</i><i><sub>adAtt</sub></i>).</font>
            <font color="#0f0f0f">true = closed (generator power is greater than <i>Pmin</i>)</font>
            <font color="#0f0f0f">false = open (<i>Pe</i> is smaller than <i>Pmin</i>).</font>
            <font color="#0f0f0f">Typical value = true.</font>
            '''

        })
    '''
    <font color="#0f0f0f">Signal selector (<i>V</i><i><sub>adAtt</sub></i>).</font>
    <font color="#0f0f0f">true = closed (generator power is greater than
    <i>Pmin</i>)</font>
    <font color="#0f0f0f">false = open (<i>Pe</i> is smaller than <i>Pmin</i>).</font>
    <font color="#0f0f0f">Typical value = true.</font>
    '''

    deadband: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output deadband (<i>DEADBAND</i>). Typical value = 0.
            '''

        })
    '''
    Stabilizer output deadband (<i>DEADBAND</i>). Typical value = 0.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum power PSS enabling (<i>Pmin</i>). Typical value = 0,25.
            '''

        })
    '''
    Minimum power PSS enabling (<i>Pmin</i>). Typical value = 0,25.
    '''

    tl1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>L1</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>L1</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>L2</sub></i>) (&gt;= 0). If = 0,
            both blocks are bypassed. Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>L2</sub></i>) (&gt;= 0). If
    = 0, both blocks are bypassed. Typical value = 0.
    '''

    tl3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T</i><i><sub>L3</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T</i><i><sub>L3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (T<sub>L4</sub>) (&gt;= 0). If = 0, both blocks
            are bypassed. Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (T<sub>L4</sub>) (&gt;= 0). If = 0, both blocks
    are bypassed. Typical value = 0.
    '''

    tpe: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electric power filter time constant (<i>T</i><i><sub>PE</sub></i>) (&gt;=
            0). Typical value = 0,05.
            '''

        })
    '''
    Electric power filter time constant (<i>T</i><i><sub>PE</sub></i>)
    (&gt;= 0). Typical value = 0,05.
    '''

    tw1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First washout (<i>T</i><i><sub>W1</sub></i>) (&gt;= 0). Typical value =
            3,5.
            '''

        })
    '''
    First washout (<i>T</i><i><sub>W1</sub></i>) (&gt;= 0). Typical value
    = 3,5.
    '''

    tw2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second washout (<i>T</i><i><sub>W2</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Second washout (<i>T</i><i><sub>W2</sub></i>) (&gt;= 0). Typical value
    = 0.
    '''

    vsmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>V</i><i><sub>SMN</sub></i>). Typical
            value = -0,1.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>V</i><i><sub>SMN</sub></i>). Typical
    value = -0,1.
    '''

    vsmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>V</i><i><sub>SMX</sub></i>). Typical
            value = 0,1.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>V</i><i><sub>SMX</sub></i>). Typical
    value = 0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssELIN2(PowerSystemStabilizerDynamics):
    '''
    Power system stabilizer typically associated with ExcELIN2 (though PssIEEE2B
    or Pss2B can also be used).
    '''

    apss: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient (<i>a_PSS</i>). Typical value = 0,1.
            '''

        })
    '''
    Coefficient (<i>a_PSS</i>). Typical value = 0,1.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ks1</i>). Typical value = 1.
            '''

        })
    '''
    Gain (<i>Ks1</i>). Typical value = 1.
    '''

    ks2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ks2</i>). Typical value = 0,1.
            '''

        })
    '''
    Gain (<i>Ks2</i>). Typical value = 0,1.
    '''

    ppss: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient (<i>p_PSS</i>) (&gt;= 0 and &lt;= 4). Typical value = 0,1.
            '''

        })
    '''
    Coefficient (<i>p_PSS</i>) (&gt;= 0 and &lt;= 4). Typical value = 0,1.
    '''

    psslim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS limiter (<i>psslim</i>). Typical value = 0,1.
            '''

        })
    '''
    PSS limiter (<i>psslim</i>). Typical value = 0,1.
    '''

    ts1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Time constant (<i>Ts1</i>) (&gt;= 0). Typical value = 0.
    '''

    ts2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts2</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Time constant (<i>Ts2</i>) (&gt;= 0). Typical value = 1.
    '''

    ts3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts3</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Time constant (<i>Ts3</i>) (&gt;= 0). Typical value = 1.
    '''

    ts4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts4</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Time constant (<i>Ts4</i>) (&gt;= 0). Typical value = 0,1.
    '''

    ts5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts5</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Time constant (<i>Ts5</i>) (&gt;= 0). Typical value = 0.
    '''

    ts6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ts6</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Time constant (<i>Ts6</i>) (&gt;= 0). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssIEEE1A(PowerSystemStabilizerDynamics):
    '''
    IEEE 421.5-2005 type PSS1A power system stabilizer model. PSS1A is the
    generalized form of a PSS with a single input signal.
    Reference: IEEE 1A 421.5-2005, 8.1.
    '''

    a1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS signal conditioning frequency filter constant (<i>A1</i>). Typical
            value = 0,061.
            '''

        })
    '''
    PSS signal conditioning frequency filter constant (<i>A1</i>). Typical
    value = 0,061.
    '''

    a2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS signal conditioning frequency filter constant (<i>A2</i>). Typical
            value = 0,0017.
            '''

        })
    '''
    PSS signal conditioning frequency filter constant (<i>A2</i>). Typical
    value = 0,0017.
    '''

    inputSignalType: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal (rotorAngularFrequencyDeviation, generatorElectricalPower,
            or busFrequencyDeviation). Typical value = rotorAngularFrequencyDeviation.
            '''

        })
    '''
    Type of input signal (rotorAngularFrequencyDeviation, generatorElectricalPower,
    or busFrequencyDeviation). Typical value = rotorAngularFrequencyDeviation.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain (<i>Ks</i>). Typical value = 5.
            '''

        })
    '''
    Stabilizer gain (<i>Ks</i>). Typical value = 5.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Lead/lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Lead/lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,03.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Lead/lag time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,3.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,03.
            '''

        })
    '''
    Lead/lag time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,03.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>T5</i>) (&gt;= 0). Typical value = 10.
            '''

        })
    '''
    Washout time constant (<i>T5</i>) (&gt;= 0). Typical value = 10.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transducer time constant (<i>T6</i>) (&gt;= 0). Typical value = 0,01.
            '''

        })
    '''
    Transducer time constant (<i>T6</i>) (&gt;= 0). Typical value = 0,01.
    '''

    vrmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum stabilizer output (<i>Vrmax</i>) (&gt; PssIEEE1A.vrmin). Typical
            value = 0,05.
            '''

        })
    '''
    Maximum stabilizer output (<i>Vrmax</i>) (&gt; PssIEEE1A.vrmin). Typical
    value = 0,05.
    '''

    vrmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum stabilizer output (<i>Vrmin</i>) (&lt; PssIEEE1A.vrmax). Typical
            value = -0,05.
            '''

        })
    '''
    Minimum stabilizer output (<i>Vrmin</i>) (&lt; PssIEEE1A.vrmax). Typical
    value = -0,05.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssIEEE2B(PowerSystemStabilizerDynamics):
    '''
    IEEE 421.5-2005 type PSS2B power system stabilizer model. This stabilizer
    model is designed to represent a variety of dual-input stabilizers, which
    normally use combinations of power and speed or frequency to derive the
    stabilizing signal.
    Reference: IEEE 2B 421.5-2005, 8.2.
    '''

    m: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator order of ramp tracking filter (<i>M</i>). Typical value = 5.
            '''

        })
    '''
    Denominator order of ramp tracking filter (<i>M</i>). Typical value
    = 5.
    '''

    n: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Order of ramp tracking filter (<i>N</i>). Typical value = 1.
            '''

        })
    '''
    Order of ramp tracking filter (<i>N</i>). Typical value = 1.
    '''

    inputSignal1Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation).
            Typical value = rotorAngularFrequencyDeviation.
            '''

        })
    '''
    Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation).
    Typical value = rotorAngularFrequencyDeviation.
    '''

    inputSignal2Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #2 (generatorElectricalPower). Typical value = generatorElectricalPower.
            '''

        })
    '''
    Type of input signal #2 (generatorElectricalPower). Typical value =
    generatorElectricalPower.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer gain (<i>Ks1</i>). Typical value = 12.
            '''

        })
    '''
    Stabilizer gain (<i>Ks1</i>). Typical value = 12.
    '''

    ks2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal #2 (<i>Ks2</i>). Typical value = 0,2.
            '''

        })
    '''
    Gain on signal #2 (<i>Ks2</i>). Typical value = 0,2.
    '''

    ks3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal #2 input before ramp-tracking filter (<i>Ks3</i>). Typical
            value = 1.
            '''

        })
    '''
    Gain on signal #2 input before ramp-tracking filter (<i>Ks3</i>). Typical
    value = 1.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,12.
            '''

        })
    '''
    Lead/lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,12.
    '''

    t10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T10</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T10</i>) (&gt;= 0). Typical value = 0.
    '''

    t11: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T11</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead/lag time constant (<i>T11</i>) (&gt;= 0). Typical value = 0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Lead/lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,02.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Lead/lag time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,3.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead/lag time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Lead/lag time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,02.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant on signal #1 (<i>T6</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Time constant on signal #1 (<i>T6</i>) (&gt;= 0). Typical value = 0.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant on signal #2 (<i>T7</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    Time constant on signal #2 (<i>T7</i>) (&gt;= 0). Typical value = 2.
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead of ramp tracking filter (<i>T8</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Lead of ramp tracking filter (<i>T8</i>) (&gt;= 0). Typical value =
    0,2.
    '''

    t9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag of ramp tracking filter (<i>T9</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Lag of ramp tracking filter (<i>T9</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    tw1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First washout on signal #1 (<i>Tw1</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    First washout on signal #1 (<i>Tw1</i>) (&gt;= 0). Typical value =
    2.
    '''

    tw2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second washout on signal #1 (<i>Tw2</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    Second washout on signal #1 (<i>Tw2</i>) (&gt;= 0). Typical value =
    2.
    '''

    tw3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First washout on signal #2 (<i>Tw3</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    First washout on signal #2 (<i>Tw3</i>) (&gt;= 0). Typical value =
    2.
    '''

    tw4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second washout on signal #2 (<i>Tw4</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Second washout on signal #2 (<i>Tw4</i>) (&gt;= 0). Typical value =
    0.
    '''

    vsi1max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #1 maximum limit (<i>Vsi1max</i>) (&gt; PssIEEE2B.vsi1min).
            Typical value = 2.
            '''

        })
    '''
    Input signal #1 maximum limit (<i>Vsi1max</i>) (&gt; PssIEEE2B.vsi1min).
    Typical value = 2.
    '''

    vsi1min: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #1 minimum limit (<i>Vsi1min</i>) (&lt; PssIEEE2B.vsi1max).
            Typical value = -2.
            '''

        })
    '''
    Input signal #1 minimum limit (<i>Vsi1min</i>) (&lt; PssIEEE2B.vsi1max).
    Typical value = -2.
    '''

    vsi2max: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #2 maximum limit (<i>Vsi2max</i>) (&gt; PssIEEE2B.vsi2min).
            Typical value = 2.
            '''

        })
    '''
    Input signal #2 maximum limit (<i>Vsi2max</i>) (&gt; PssIEEE2B.vsi2min).
    Typical value = 2.
    '''

    vsi2min: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal #2 minimum limit (<i>Vsi2min</i>) (&lt; PssIEEE2B.vsi2max).
            Typical value = -2.
            '''

        })
    '''
    Input signal #2 minimum limit (<i>Vsi2min</i>) (&lt; PssIEEE2B.vsi2max).
    Typical value = -2.
    '''

    vstmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; PssIEEE2B.vstmin).
            Typical value = 0,1.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; PssIEEE2B.vstmin).
    Typical value = 0,1.
    '''

    vstmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; PssIEEE2B.vstmax).
            Typical value = -0,1.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; PssIEEE2B.vstmax).
    Typical value = -0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssIEEE3B(PowerSystemStabilizerDynamics):
    '''
    IEEE 421.5-2005 type PSS3B power system stabilizer model. The PSS model
    PSS3B has dual inputs of electrical power and rotor angular frequency deviation.
    The signals are used to derive an equivalent mechanical power signal.
    This model has 2 input signals. They have the following fixed types (expressed
    in terms of InputSignalKind values): the first one is of rotorAngleFrequencyDeviation
    type and the second one is of generatorElectricalPower type.
    Reference: IEEE 3B 421.5-2005, 8.3.
    '''

    a1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A1</i>). Typical value = 0,359.
            '''

        })
    '''
    Notch filter parameter (<i>A1</i>). Typical value = 0,359.
    '''

    a2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A2</i>). Typical value = 0,586.
            '''

        })
    '''
    Notch filter parameter (<i>A2</i>). Typical value = 0,586.
    '''

    a3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A3</i>). Typical value = 0,429.
            '''

        })
    '''
    Notch filter parameter (<i>A3</i>). Typical value = 0,429.
    '''

    a4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A4</i>). Typical value = 0,564.
            '''

        })
    '''
    Notch filter parameter (<i>A4</i>). Typical value = 0,564.
    '''

    a5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A5</i>). Typical value = 0,001.
            '''

        })
    '''
    Notch filter parameter (<i>A5</i>). Typical value = 0,001.
    '''

    a6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A6</i>). Typical value = 0.
            '''

        })
    '''
    Notch filter parameter (<i>A6</i>). Typical value = 0.
    '''

    a7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A7</i>). Typical value = 0,031.
            '''

        })
    '''
    Notch filter parameter (<i>A7</i>). Typical value = 0,031.
    '''

    a8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter parameter (<i>A8</i>). Typical value = 0.
            '''

        })
    '''
    Notch filter parameter (<i>A8</i>). Typical value = 0.
    '''

    ks1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal # 1 (<i>Ks1</i>). Typical value = -0,602.
            '''

        })
    '''
    Gain on signal # 1 (<i>Ks1</i>). Typical value = -0,602.
    '''

    ks2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain on signal # 2 (<i>Ks2</i>). Typical value = 30,12.
            '''

        })
    '''
    Gain on signal # 2 (<i>Ks2</i>). Typical value = 30,12.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transducer time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,012.
            '''

        })
    '''
    Transducer time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,012.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transducer time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,012.
            '''

        })
    '''
    Transducer time constant (<i>T2</i>) (&gt;= 0). Typical value = 0,012.
    '''

    tw1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tw1</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Washout time constant (<i>Tw1</i>) (&gt;= 0). Typical value = 0,3.
    '''

    tw2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tw2</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Washout time constant (<i>Tw2</i>) (&gt;= 0). Typical value = 0,3.
    '''

    tw3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tw3</i>) (&gt;= 0). Typical value = 0,6.
            '''

        })
    '''
    Washout time constant (<i>Tw3</i>) (&gt;= 0). Typical value = 0,6.
    '''

    vstmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; PssIEEE3B.vstmin).
            Typical value = 0,1.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>Vstmax</i>) (&gt; PssIEEE3B.vstmin).
    Typical value = 0,1.
    '''

    vstmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; PssIEEE3B.vstmax).
            Typical value = -0,1.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>Vstmin</i>) (&lt; PssIEEE3B.vstmax).
    Typical value = -0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssIEEE4B(PowerSystemStabilizerDynamics):
    '''
    IEEE 421.5-2005 type PSS4B power system stabilizer. The PSS4B model represents
    a structure based on multiple working frequency bands. Three separate bands,
    respectively dedicated to the low-, intermediate- and high-frequency modes
    of oscillations, are used in this delta omega (speed input) PSS.
    There is an error in the in IEEE 421.5-2005 PSS4B model: the <i>Pe</i>
    input should read �<i>Pe</i>. This implies that the input <i>Pe</i> needs
    to be multiplied by -1.
    Reference: IEEE 4B 421.5-2005, 8.4.
    Parameter details:
    This model has 2 input signals. They have the following fixed types (expressed
    in terms of InputSignalKind values): the first one is of rotorAngleFrequencyDeviation
    type and the second one is of generatorElectricalPower type.
    '''

    bwh1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 1 (high-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
            '''

        })
    '''
    Notch filter 1 (high-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
    '''

    bwh2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 2 (high-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
            '''

        })
    '''
    Notch filter 2 (high-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
    '''

    bwl1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 1 (low-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
            '''

        })
    '''
    Notch filter 1 (low-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
    '''

    bwl2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 2 (low-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
            '''

        })
    '''
    Notch filter 2 (low-frequency band): three dB bandwidth (<i>B</i><i><sub>wi</sub></i>).
    '''

    omeganh1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 1 (high-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
            '''

        })
    '''
    Notch filter 1 (high-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
    '''

    omeganh2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 2 (high-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
            '''

        })
    '''
    Notch filter 2 (high-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
    '''

    omeganl1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 1 (low-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
            '''

        })
    '''
    Notch filter 1 (low-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
    '''

    omeganl2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Notch filter 2 (low-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
            '''

        })
    '''
    Notch filter 2 (low-frequency band): filter frequency (<i>omega</i><i><sub>ni</sub></i>).
    '''

    kh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band gain (<i>K</i><i><sub>H</sub></i>). Typical value = 120.
            '''

        })
    '''
    High band gain (<i>K</i><i><sub>H</sub></i>). Typical value = 120.
    '''

    kh1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band differential filter gain (<i>K</i><i><sub>H1</sub></i>). Typical
            value = 66.
            '''

        })
    '''
    High band differential filter gain (<i>K</i><i><sub>H1</sub></i>).
    Typical value = 66.
    '''

    kh11: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band first lead-lag blocks coefficient (<i>K</i><i><sub>H11</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    High band first lead-lag blocks coefficient (<i>K</i><i><sub>H11</sub></i>).
    Typical value = 1.
    '''

    kh17: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band first lead-lag blocks coefficient (<i>K</i><i><sub>H17</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    High band first lead-lag blocks coefficient (<i>K</i><i><sub>H17</sub></i>).
    Typical value = 1.
    '''

    kh2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band differential filter gain (<i>K</i><i><sub>H2</sub></i>). Typical
            value = 66.
            '''

        })
    '''
    High band differential filter gain (<i>K</i><i><sub>H2</sub></i>).
    Typical value = 66.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band gain (<i>K</i><i><sub>I</sub></i>). Typical value = 30.
            '''

        })
    '''
    Intermediate band gain (<i>K</i><i><sub>I</sub></i>). Typical value
    = 30.
    '''

    ki1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band differential filter gain (<i>K</i><i><sub>I1</sub></i>).
            Typical value = 66.
            '''

        })
    '''
    Intermediate band differential filter gain (<i>K</i><i><sub>I1</sub></i>).
    Typical value = 66.
    '''

    ki11: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band first lead-lag blocks coefficient (<i>K</i><i><sub>I11</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Intermediate band first lead-lag blocks coefficient (<i>K</i><i><sub>I11</sub></i>).
    Typical value = 1.
    '''

    ki17: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band first lead-lag blocks coefficient (<i>K</i><i><sub>I17</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Intermediate band first lead-lag blocks coefficient (<i>K</i><i><sub>I17</sub></i>).
    Typical value = 1.
    '''

    ki2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band differential filter gain (<i>K</i><i><sub>I2</sub></i>).
            Typical value = 66.
            '''

        })
    '''
    Intermediate band differential filter gain (<i>K</i><i><sub>I2</sub></i>).
    Typical value = 66.
    '''

    kl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band gain (<i>K</i><i><sub>L</sub></i>). Typical value = 7.5.
            '''

        })
    '''
    Low band gain (<i>K</i><i><sub>L</sub></i>). Typical value = 7.5.
    '''

    kl1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band differential filter gain (<i>K</i><i><sub>L1</sub></i>). Typical
            value = 66.
            '''

        })
    '''
    Low band differential filter gain (<i>K</i><i><sub>L1</sub></i>). Typical
    value = 66.
    '''

    kl11: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band first lead-lag blocks coefficient (<i>K</i><i><sub>L11</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Low band first lead-lag blocks coefficient (<i>K</i><i><sub>L11</sub></i>).
    Typical value = 1.
    '''

    kl17: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band first lead-lag blocks coefficient (<i>K</i><i><sub>L17</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Low band first lead-lag blocks coefficient (<i>K</i><i><sub>L17</sub></i>).
    Typical value = 1.
    '''

    kl2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band differential filter gain (<i>K</i><i><sub>L2</sub></i>). Typical
            value = 66.
            '''

        })
    '''
    Low band differential filter gain (<i>K</i><i><sub>L2</sub></i>). Typical
    value = 66.
    '''

    th1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H1</sub></i>) (&gt;= 0). Typical
            value = 0,01513.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H1</sub></i>) (&gt;= 0). Typical
    value = 0,01513.
    '''

    th10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H10</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H10</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    th11: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H11</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H11</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    th12: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H12</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H12</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    th2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H2</sub></i>) (&gt;= 0). Typical
            value = 0,01816.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H2</sub></i>) (&gt;= 0). Typical
    value = 0,01816.
    '''

    th3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H3</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    th4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H4</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    th5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H5</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H5</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    th6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H6</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H6</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    th7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H7</sub></i>) (&gt;= 0). Typical
            value = 0,01816.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H7</sub></i>) (&gt;= 0). Typical
    value = 0,01816.
    '''

    th8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H8</sub></i>) (&gt;= 0). Typical
            value = 0,02179.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H8</sub></i>) (&gt;= 0). Typical
    value = 0,02179.
    '''

    th9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band time constant (<i>T</i><i><sub>H9</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    High band time constant (<i>T</i><i><sub>H9</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    ti1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I1</sub></i>) (&gt;= 0).
            Typical value = 0,173.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I1</sub></i>) (&gt;=
    0). Typical value = 0,173.
    '''

    ti10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I10</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I10</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti11: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I11</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I11</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti12: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I12</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I12</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I2</sub></i>) (&gt;= 0).
            Typical value = 0,2075.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I2</sub></i>) (&gt;=
    0). Typical value = 0,2075.
    '''

    ti3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I3</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I3</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I4</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I4</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I5</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I5</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I6</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I6</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    ti7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I7</sub></i>) (&gt;= 0).
            Typical value = 0,2075.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I7</sub></i>) (&gt;=
    0). Typical value = 0,2075.
    '''

    ti8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I8</sub></i>) (&gt;= 0).
            Typical value = 0,2491.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I8</sub></i>) (&gt;=
    0). Typical value = 0,2491.
    '''

    ti9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band time constant (<i>T</i><i><sub>I9</sub></i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Intermediate band time constant (<i>T</i><i><sub>I9</sub></i>) (&gt;=
    0). Typical value = 0.
    '''

    tl1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L1</sub></i>) (&gt;= 0). Typical
            value = 1,73.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L1</sub></i>) (&gt;= 0). Typical
    value = 1,73.
    '''

    tl10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L10</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L10</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl11: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L11</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L11</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl12: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L12</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L12</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L2</sub></i>) (&gt;= 0). Typical
            value = 2,075.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L2</sub></i>) (&gt;= 0). Typical
    value = 2,075.
    '''

    tl3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L3</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L4</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L5</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L5</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L6</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L6</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tl7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L7</sub></i>) (&gt;= 0). Typical
            value = 2,075.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L7</sub></i>) (&gt;= 0). Typical
    value = 2,075.
    '''

    tl8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L8</sub></i>) (&gt;= 0). Typical
            value = 2,491.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L8</sub></i>) (&gt;= 0). Typical
    value = 2,491.
    '''

    tl9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band time constant (<i>T</i><i><sub>L9</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Low band time constant (<i>T</i><i><sub>L9</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    vhmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band output maximum limit (<i>V</i><i><sub>Hmax</sub></i>) (&gt; PssIEEE4B.vhmin).
            Typical value = 0,6.
            '''

        })
    '''
    High band output maximum limit (<i>V</i><i><sub>Hmax</sub></i>) (&gt;
    PssIEEE4B.vhmin). Typical value = 0,6.
    '''

    vhmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High band output minimum limit (<i>V</i><i><sub>Hmin</sub></i>) (&lt; PssIEEE4V.vhmax).
            Typical value = -0,6.
            '''

        })
    '''
    High band output minimum limit (<i>V</i><i><sub>Hmin</sub></i>) (&lt;
    PssIEEE4V.vhmax). Typical value = -0,6.
    '''

    vimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band output maximum limit (<i>V</i><i><sub>Imax</sub></i>)
            (&gt; PssIEEE4B.vimin). Typical value = 0,6.
            '''

        })
    '''
    Intermediate band output maximum limit (<i>V</i><i><sub>Imax</sub></i>)
    (&gt; PssIEEE4B.vimin). Typical value = 0,6.
    '''

    vimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate band output minimum limit (<i>V</i><i><sub>Imin</sub></i>)
            (&lt; PssIEEE4B.vimax). Typical value = -0,6.
            '''

        })
    '''
    Intermediate band output minimum limit (<i>V</i><i><sub>Imin</sub></i>)
    (&lt; PssIEEE4B.vimax). Typical value = -0,6.
    '''

    vlmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band output maximum limit (<i>V</i><i><sub>Lmax</sub></i>) (&gt; PssIEEE4B.vlmin).
            Typical value = 0,075.
            '''

        })
    '''
    Low band output maximum limit (<i>V</i><i><sub>Lmax</sub></i>) (&gt;
    PssIEEE4B.vlmin). Typical value = 0,075.
    '''

    vlmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low band output minimum limit (<i>V</i><i><sub>Lmin</sub></i>) (&lt; PssIEEE4B.vlmax).
            Typical value = -0,075.
            '''

        })
    '''
    Low band output minimum limit (<i>V</i><i><sub>Lmin</sub></i>) (&lt;
    PssIEEE4B.vlmax). Typical value = -0,075.
    '''

    vstmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS output maximum limit (<i>V</i><i><sub>STmax</sub></i>) (&gt; PssIEEE4B.vstmin).
            Typical value = 0,15.
            '''

        })
    '''
    PSS output maximum limit (<i>V</i><i><sub>STmax</sub></i>) (&gt; PssIEEE4B.vstmin).
    Typical value = 0,15.
    '''

    vstmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PSS output minimum limit (<i>V</i><i><sub>STmin</sub></i>) (&lt; PssIEEE4B.vstmax).
            Typical value = -0,15.
            '''

        })
    '''
    PSS output minimum limit (<i>V</i><i><sub>STmin</sub></i>) (&lt; PssIEEE4B.vstmax).
    Typical value = -0,15.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssPTIST1(PowerSystemStabilizerDynamics):
    '''
    PTI microprocessor-based stabilizer type 1.
    '''

    dtc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step related to activation of controls (<i>deltatc</i>) (&gt;= 0).
            Typical value = 0,025.
            '''

        })
    '''
    Time step related to activation of controls (<i>deltatc</i>) (&gt;=
    0). Typical value = 0,025.
    '''

    dtf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step frequency calculation (<i>deltatf</i>) (&gt;= 0). Typical value
            = 0,025.
            '''

        })
    '''
    Time step frequency calculation (<i>deltatf</i>) (&gt;= 0). Typical
    value = 0,025.
    '''

    dtp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step active power calculation (<i>deltatp</i>) (&gt;= 0). Typical
            value = 0,0125.
            '''

        })
    '''
    Time step active power calculation (<i>deltatp</i>) (&gt;= 0). Typical
    value = 0,0125.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i>). Typical value = 9.
            '''

        })
    '''
    Gain (<i>K</i>). Typical value = 9.
    '''

    m: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>M</i>). <i>M </i>= 2 x <i>H</i>. Typical value = 5.
            '''

        })
    '''
    (<i>M</i>). <i>M </i>= 2 x <i>H</i>. Typical value = 5.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,2.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,05.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,2.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssPTIST3(PowerSystemStabilizerDynamics):
    '''
    PTI microprocessor-based stabilizer type 3.
    '''

    isw: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Digital/analogue output switch (<i>Isw</i>).
            true = produce analogue output
            false = convert to digital output, using tap selection table.
            '''

        })
    '''
    Digital/analogue output switch (<i>Isw</i>).
    true = produce analogue output
    false = convert to digital output, using tap selection table.
    '''

    nav: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of control outputs to average (<i>NAV</i>) (1 &lt;= <i>NAV</i> &lt;=
            16). Typical value = 4.
            '''

        })
    '''
    Number of control outputs to average (<i>NAV</i>) (1 &lt;= <i>NAV</i>
    &lt;= 16). Typical value = 4.
    '''

    ncl: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of counts at limit to active limit function (<i>NCL</i>) (&gt; 0).
            '''

        })
    '''
    Number of counts at limit to active limit function (<i>NCL</i>) (&gt;
    0).
    '''

    ncr: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of counts until reset after limit function is triggered (<i>NCR</i>).
            '''

        })
    '''
    Number of counts until reset after limit function is triggered (<i>NCR</i>).
    '''

    a0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>A0</i>).
            '''

        })
    '''
    Filter coefficient (<i>A0</i>).
    '''

    a1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Al</i>).
            '''

        })
    '''
    Limiter (<i>Al</i>).
    '''

    a2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>A2</i>).
            '''

        })
    '''
    Filter coefficient (<i>A2</i>).
    '''

    a3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>A3</i>).
            '''

        })
    '''
    Filter coefficient (<i>A3</i>).
    '''

    a4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>A4</i>).
            '''

        })
    '''
    Filter coefficient (<i>A4</i>).
    '''

    a5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>A5</i>).
            '''

        })
    '''
    Filter coefficient (<i>A5</i>).
    '''

    al: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Al</i>).
            '''

        })
    '''
    Limiter (<i>Al</i>).
    '''

    athres: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Threshold value above which output averaging will be bypassed (<i>Athres</i>).
            Typical value = 0,005.
            '''

        })
    '''
    Threshold value above which output averaging will be bypassed (<i>Athres</i>).
    Typical value = 0,005.
    '''

    b0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B0</i>).
            '''

        })
    '''
    Filter coefficient (<i>B0</i>).
    '''

    b1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B1</i>).
            '''

        })
    '''
    Filter coefficient (<i>B1</i>).
    '''

    b2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B2</i>).
            '''

        })
    '''
    Filter coefficient (<i>B2</i>).
    '''

    b3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B3</i>).
            '''

        })
    '''
    Filter coefficient (<i>B3</i>).
    '''

    b4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B4</i>).
            '''

        })
    '''
    Filter coefficient (<i>B4</i>).
    '''

    b5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter coefficient (<i>B5</i>).
            '''

        })
    '''
    Filter coefficient (<i>B5</i>).
    '''

    dl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Dl</i>).
            '''

        })
    '''
    Limiter (<i>Dl</i>).
    '''

    dtc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step related to activation of controls (<i>deltatc</i>) (&gt;= 0).
            Typical value = 0,025 (0,03 for 50 Hz).
            '''

        })
    '''
    Time step related to activation of controls (<i>deltatc</i>) (&gt;=
    0). Typical value = 0,025 (0,03 for 50 Hz).
    '''

    dtf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step frequency calculation (<i>deltatf</i>) (&gt;= 0). Typical value
            = 0,025 (0,03 for 50 Hz).
            '''

        })
    '''
    Time step frequency calculation (<i>deltatf</i>) (&gt;= 0). Typical
    value = 0,025 (0,03 for 50 Hz).
    '''

    dtp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time step active power calculation (<i>deltatp</i>) (&gt;= 0). Typical
            value = 0,0125 (0,015 for 50 Hz).
            '''

        })
    '''
    Time step active power calculation (<i>deltatp</i>) (&gt;= 0). Typical
    value = 0,0125 (0,015 for 50 Hz).
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K</i>). Typical value = 9.
            '''

        })
    '''
    Gain (<i>K</i>). Typical value = 9.
    '''

    lthres: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Threshold value (<i>Lthres</i>).
            '''

        })
    '''
    Threshold value (<i>Lthres</i>).
    '''

    m: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>M</i>). <i>M</i> = 2 x <i>H</i>. Typical value = 5.
            '''

        })
    '''
    (<i>M</i>). <i>M</i> = 2 x <i>H</i>. Typical value = 5.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Pmin</i>).
            '''

        })
    '''
    (<i>Pmin</i>).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,3.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Time constant (<i>T2</i>) (&gt;= 0). Typical value = 1.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,2.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Time constant (<i>T4</i>) (&gt;= 0). Typical value = 0,05.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T5</i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T5</i>) (&gt;= 0).
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T6</i>) (&gt;= 0).
            '''

        })
    '''
    Time constant (<i>T6</i>) (&gt;= 0).
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,2.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssRQB(PowerSystemStabilizerDynamics):
    '''
    Power system stabilizer type RQB. This power system stabilizer is intended
    to be used together with excitation system type ExcRQB, which is primarily
    used in nuclear or thermal generating units.
    '''

    kdpm: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead lag gain (<i>KDPM</i>). Typical value = 0,185.
            '''

        })
    '''
    Lead lag gain (<i>KDPM</i>). Typical value = 0,185.
    '''

    ki2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed input gain (<i>Ki2</i>). Typical value = 3,43.
            '''

        })
    '''
    Speed input gain (<i>Ki2</i>). Typical value = 3,43.
    '''

    ki3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electrical power input gain (<i>Ki3</i>). Typical value = -11,45.
            '''

        })
    '''
    Electrical power input gain (<i>Ki3</i>). Typical value = -11,45.
    '''

    ki4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mechanical power input gain (<i>Ki4</i>). Typical value = 11,86.
            '''

        })
    '''
    Mechanical power input gain (<i>Ki4</i>). Typical value = 11,86.
    '''

    sibv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed deadband (<i>SIBV</i>). Typical value = 0,006.
            '''

        })
    '''
    Speed deadband (<i>SIBV</i>). Typical value = 0,006.
    '''

    t4f: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead lag time constant (<i>T4F</i>) (&gt;= 0). Typical value = 0,045.
            '''

        })
    '''
    Lead lag time constant (<i>T4F</i>) (&gt;= 0). Typical value = 0,045.
    '''

    t4m: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input time constant (<i>T4M</i>) (&gt;= 0). Typical value = 5.
            '''

        })
    '''
    Input time constant (<i>T4M</i>) (&gt;= 0). Typical value = 5.
    '''

    t4mom: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed time constant (<i>T4MOM</i>) (&gt;= 0). Typical value = 1,27.
            '''

        })
    '''
    Speed time constant (<i>T4MOM</i>) (&gt;= 0). Typical value = 1,27.
    '''

    tomd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed delay (<i>TOMD</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Speed delay (<i>TOMD</i>) (&gt;= 0). Typical value = 0,02.
    '''

    tomsl: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed time constant (<i>TOMSL</i>) (&gt;= 0). Typical value = 0,04.
            '''

        })
    '''
    Speed time constant (<i>TOMSL</i>) (&gt;= 0). Typical value = 0,04.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssSB4(PowerSystemStabilizerDynamics):
    '''
    Power sensitive stabilizer model.
    '''

    kx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Kx</i>). Typical value = 2,7.
            '''

        })
    '''
    Gain (<i>Kx</i>). Typical value = 2,7.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0,37.
            '''

        })
    '''
    Time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0,37.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0,37.
            '''

        })
    '''
    Time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0,37.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0,035.
            '''

        })
    '''
    Time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0,035.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,0.
            '''

        })
    '''
    Time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,0.
    '''

    te: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Te</i>) (&gt;= 0). Typical value = 0,0169.
            '''

        })
    '''
    Time constant (<i>Te</i>) (&gt;= 0). Typical value = 0,0169.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tt</i>) (&gt;= 0). Typical value = 0,18.
            '''

        })
    '''
    Time constant (<i>Tt</i>) (&gt;= 0). Typical value = 0,18.
    '''

    tx1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reset time constant (<i>Tx1</i>) (&gt;= 0). Typical value = 0,035.
            '''

        })
    '''
    Reset time constant (<i>Tx1</i>) (&gt;= 0). Typical value = 0,035.
    '''

    tx2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tx2</i>) (&gt;= 0). Typical value = 5,0.
            '''

        })
    '''
    Time constant (<i>Tx2</i>) (&gt;= 0). Typical value = 5,0.
    '''

    vsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Vsmax</i>) (&gt; PssSB4.vsmin). Typical value = 0,062.
            '''

        })
    '''
    Limiter (<i>Vsmax</i>) (&gt; PssSB4.vsmin). Typical value = 0,062.
    '''

    vsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limiter (<i>Vsmin</i>) (&lt; PssSB4.vsmax). Typical value = -0,062.
            '''

        })
    '''
    Limiter (<i>Vsmin</i>) (&lt; PssSB4.vsmax). Typical value = -0,062.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssSH(PowerSystemStabilizerDynamics):
    '''
    Siemens<sup>TM</sup> �H infinity� power system stabilizer with generator
    electrical power input.
    [Footnote: Siemens "H infinity" power system stabilizers are an example
    of suitable products available commercially. This information is given
    for the convenience of users of this document and does not constitute an
    endorsement by IEC of these products.]
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Main gain (<i>K</i>). Typical value = 1.
            '''

        })
    '''
    Main gain (<i>K</i>). Typical value = 1.
    '''

    k0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain 0 (<i>K0</i>). Typical value = 0,012.
            '''

        })
    '''
    Gain 0 (<i>K0</i>). Typical value = 0,012.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain 1 (<i>K1</i>). Typical value = 0,488.
            '''

        })
    '''
    Gain 1 (<i>K1</i>). Typical value = 0,488.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain 2 (<i>K2</i>). Typical value = 0,064.
            '''

        })
    '''
    Gain 2 (<i>K2</i>). Typical value = 0,064.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain 3 (<i>K3</i>). Typical value = 0,224.
            '''

        })
    '''
    Gain 3 (<i>K3</i>). Typical value = 0,224.
    '''

    k4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain 4 (<i>K4</i>). Typical value = 0,1.
            '''

        })
    '''
    Gain 4 (<i>K4</i>). Typical value = 0,1.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant 1 (<i>T1</i>) (&gt; 0). Typical value = 0,076.
            '''

        })
    '''
    Time constant 1 (<i>T1</i>) (&gt; 0). Typical value = 0,076.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant 2 (<i>T2</i>) (&gt; 0). Typical value = 0,086.
            '''

        })
    '''
    Time constant 2 (<i>T2</i>) (&gt; 0). Typical value = 0,086.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant 3 (<i>T3</i>) (&gt; 0). Typical value = 1,068.
            '''

        })
    '''
    Time constant 3 (<i>T3</i>) (&gt; 0). Typical value = 1,068.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant 4 (<i>T4</i>) (&gt; 0). Typical value = 1,913.
            '''

        })
    '''
    Time constant 4 (<i>T4</i>) (&gt; 0). Typical value = 1,913.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input time constant (<i>T</i><i><sub>d</sub></i>) (&gt;= 0). Typical value
            = 10.
            '''

        })
    '''
    Input time constant (<i>T</i><i><sub>d</sub></i>) (&gt;= 0). Typical
    value = 10.
    '''

    vsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output maximum limit (<i>Vsmax</i>) (&gt; PssSH.vsmin). Typical value =
            0,1.
            '''

        })
    '''
    Output maximum limit (<i>Vsmax</i>) (&gt; PssSH.vsmin). Typical value
    = 0,1.
    '''

    vsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output minimum limit (<i>Vsmin</i>) (&lt; PssSH.vsmax). Typical value =
            -0,1.
            '''

        })
    '''
    Output minimum limit (<i>Vsmin</i>) (&lt; PssSH.vsmax). Typical value
    = -0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssSK(PowerSystemStabilizerDynamics):
    '''
    Slovakian PSS with three inputs.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain <i>P</i> (<i>K</i><i><sub>1</sub></i>). Typical value = -0,3.
            '''

        })
    '''
    Gain <i>P</i> (<i>K</i><i><sub>1</sub></i>). Typical value = -0,3.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain <i>f</i><i><sub>E</sub></i><i> </i>(<i>K</i><i><sub>2</sub></i>).
            Typical value = -0,15.
            '''

        })
    '''
    Gain <i>f</i><i><sub>E</sub></i><i> </i>(<i>K</i><i><sub>2</sub></i>).
    Typical value = -0,15.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain <i>I</i><i><sub>f</sub></i><i> </i>(<i>K</i><i><sub>3</sub></i>).
            Typical value = 10.
            '''

        })
    '''
    Gain <i>I</i><i><sub>f</sub></i><i> </i>(<i>K</i><i><sub>3</sub></i>).
    Typical value = 10.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator time constant (<i>T</i><i><sub>1</sub></i>) (&gt; 0,005). Typical
            value = 0,3.
            '''

        })
    '''
    Denominator time constant (<i>T</i><i><sub>1</sub></i>) (&gt; 0,005).
    Typical value = 0,3.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>T</i><i><sub>2</sub></i>) (&gt; 0,005). Typical
            value = 0,35.
            '''

        })
    '''
    Filter time constant (<i>T</i><i><sub>2</sub></i>) (&gt; 0,005). Typical
    value = 0,35.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator time constant (<i>T</i><i><sub>3</sub></i>) (&gt; 0,005). Typical
            value = 0,22.
            '''

        })
    '''
    Denominator time constant (<i>T</i><i><sub>3</sub></i>) (&gt; 0,005).
    Typical value = 0,22.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>T</i><i><sub>4</sub></i>) (&gt; 0,005). Typical
            value = 0,02.
            '''

        })
    '''
    Filter time constant (<i>T</i><i><sub>4</sub></i>) (&gt; 0,005). Typical
    value = 0,02.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator time constant (<i>T</i><i><sub>5</sub></i>) (&gt; 0,005). Typical
            value = 0,02.
            '''

        })
    '''
    Denominator time constant (<i>T</i><i><sub>5</sub></i>) (&gt; 0,005).
    Typical value = 0,02.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>T</i><i><sub>6</sub></i>) (&gt; 0,005). Typical
            value = 0,02.
            '''

        })
    '''
    Filter time constant (<i>T</i><i><sub>6</sub></i>) (&gt; 0,005). Typical
    value = 0,02.
    '''

    vsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output maximum limit (<i>V</i><i><sub>SMAX</sub></i>) (&gt;
            PssSK.vsmin). Typical value = 0,4.
            '''

        })
    '''
    Stabilizer output maximum limit (<i>V</i><i><sub>SMAX</sub></i>) (&gt;
    PssSK.vsmin). Typical value = 0,4.
    '''

    vsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output minimum limit (<i>V</i><i><sub>SMIN</sub></i>) (&lt;
            PssSK.vsmax). Typical value = -0.4.
            '''

        })
    '''
    Stabilizer output minimum limit (<i>V</i><i><sub>SMIN</sub></i>) (&lt;
    PssSK.vsmax). Typical value = -0.4.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssSTAB2A(PowerSystemStabilizerDynamics):
    '''
    Power system stabilizer part of an ABB excitation system.
    [Footnote: ABB excitation systems are an example of suitable products available
    commercially. This information is given for the convenience of users of
    this document and does not constitute an endorsement by IEC of these products.]
    '''

    hlim: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer output limiter (<i>H</i><i><sub>LIM</sub></i>). Typical value
            = 0,5.
            '''

        })
    '''
    Stabilizer output limiter (<i>H</i><i><sub>LIM</sub></i>). Typical
    value = 0,5.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K2</i>). Typical value = 1,0.
            '''

        })
    '''
    Gain (<i>K2</i>). Typical value = 1,0.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K3</i>). Typical value = 0,25.
            '''

        })
    '''
    Gain (<i>K3</i>). Typical value = 0,25.
    '''

    k4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K4</i>). Typical value = 0,075.
            '''

        })
    '''
    Gain (<i>K4</i>). Typical value = 0,075.
    '''

    k5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K5</i>). Typical value = 2,5.
            '''

        })
    '''
    Gain (<i>K5</i>). Typical value = 2,5.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T2</i>). Typical value = 4,0.
            '''

        })
    '''
    Time constant (<i>T2</i>). Typical value = 4,0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T3</i>). Typical value = 2,0.
            '''

        })
    '''
    Time constant (<i>T3</i>). Typical value = 2,0.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T5</i>). Typical value = 4,5.
            '''

        })
    '''
    Time constant (<i>T5</i>). Typical value = 4,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PssWECC(PowerSystemStabilizerDynamics):
    '''
    Dual input power system stabilizer, based on IEEE type 2, with modified
    output limiter defined by WECC (Western Electricity Coordinating Council,
    USA).
    '''

    inputSignal1Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
            generatorElectricalPower, generatorAcceleratingPower, busVoltage, or busVoltageDerivative
            - shall be different than PssWECC.inputSignal2Type). Typical value = rotorAngularFrequencyDeviation.
            '''

        })
    '''
    Type of input signal #1 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
    generatorElectricalPower, generatorAcceleratingPower, busVoltage, or
    busVoltageDerivative - shall be different than PssWECC.inputSignal2Type).
    Typical value = rotorAngularFrequencyDeviation.
    '''

    inputSignal2Type: Optional[ InputSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal #2 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
            generatorElectricalPower, generatorAcceleratingPower, busVoltage, busVoltageDerivative
            - shall be different than PssWECC.inputSignal1Type). Typical value = busVoltageDerivative.
            '''

        })
    '''
    Type of input signal #2 (rotorAngularFrequencyDeviation, busFrequencyDeviation,
    generatorElectricalPower, generatorAcceleratingPower, busVoltage, busVoltageDerivative
    - shall be different than PssWECC.inputSignal1Type). Typical value
    = busVoltageDerivative.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal 1 gain (<i>K</i><i><sub>1</sub></i>). Typical value = 1,13.
            '''

        })
    '''
    Input signal 1 gain (<i>K</i><i><sub>1</sub></i>). Typical value =
    1,13.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal 2 gain (<i>K</i><i><sub>2</sub></i>). Typical value = 0,0.
            '''

        })
    '''
    Input signal 2 gain (<i>K</i><i><sub>2</sub></i>). Typical value =
    0,0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal 1 transducer time constant (<i>T</i><i><sub>1</sub></i>) (&gt;=
            0). Typical value = 0,037.
            '''

        })
    '''
    Input signal 1 transducer time constant (<i>T</i><i><sub>1</sub></i>)
    (&gt;= 0). Typical value = 0,037.
    '''

    t10: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>10</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal 2 transducer time constant (<i>T</i><i><sub>2</sub></i>) (&gt;=
            0). Typical value = 0,0.
            '''

        })
    '''
    Input signal 2 transducer time constant (<i>T</i><i><sub>2</sub></i>)
    (&gt;= 0). Typical value = 0,0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer washout time constant (<i>T</i><i><sub>3</sub></i>) (&gt;= 0).
            Typical value = 9,5.
            '''

        })
    '''
    Stabilizer washout time constant (<i>T</i><i><sub>3</sub></i>) (&gt;=
    0). Typical value = 9,5.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stabilizer washout time lag constant (<i>T</i><i><sub>4</sub></i>) (&gt;=
            0). Typical value = 9,5.
            '''

        })
    '''
    Stabilizer washout time lag constant (<i>T</i><i><sub>4</sub></i>)
    (&gt;= 0). Typical value = 9,5.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical value
            = 1,7.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>5</sub></i>) (&gt;= 0). Typical
    value = 1,7.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical value
            = 1,5.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>6</sub></i>) (&gt;= 0). Typical
    value = 1,5.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0). Typical value
            = 1,7.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>7</sub></i>) (&gt;= 0). Typical
    value = 1,7.
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0). Typical value
            = 1,5.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>8</sub></i>) (&gt;= 0). Typical
    value = 1,5.
    '''

    t9: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Lead time constant (<i>T</i><i><sub>9</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    vcl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value for voltage compensator output (<i>V</i><i><sub>CL</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Minimum value for voltage compensator output (<i>V</i><i><sub>CL</sub></i>).
    Typical value = 0.
    '''

    vcu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value for voltage compensator output (<i>V</i><i><sub>CU</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Maximum value for voltage compensator output (<i>V</i><i><sub>CU</sub></i>).
    Typical value = 0.
    '''

    vsmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum output signal (<i>Vsmax</i>) (&gt; PssWECC.vsmin). Typical value
            = 0,05.
            '''

        })
    '''
    Maximum output signal (<i>Vsmax</i>) (&gt; PssWECC.vsmin). Typical
    value = 0,05.
    '''

    vsmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum output signal (<i>Vsmin</i>) (&lt; PssWECC.vsmax). Typical value
            = -0,05.
            '''

        })
    '''
    Minimum output signal (<i>Vsmin</i>) (&lt; PssWECC.vsmax). Typical
    value = -0,05.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RotatingMachineDynamics(DynamicsFunctionBlock):
    '''
    Abstract parent class for all synchronous and asynchronous machine standard
    models.
    '''

    damping: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damping torque coefficient (<i>D</i>) (&gt;= 0). A proportionality constant
            that, when multiplied by the angular velocity of the rotor poles with respect
            to the magnetic field (frequency), results in the damping torque. This
            value is often zero when the sources of damping torques (generator damper
            windings, load damping effects, etc.) are modelled in detail. Typical value
            = 0.
            '''

        })
    '''
    Damping torque coefficient (<i>D</i>) (&gt;= 0). A proportionality
    constant that, when multiplied by the angular velocity of the rotor
    poles with respect to the magnetic field (frequency), results in the
    damping torque. This value is often zero when the sources of damping
    torques (generator damper windings, load damping effects, etc.) are
    modelled in detail. Typical value = 0.
    '''

    saturationFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at rated terminal voltage (<i>S1</i>) (&gt;= 0). Not
            used by simplified model. Defined by defined by <i>S</i>(<i>E1</i>) in
            the SynchronousMachineSaturationParameters diagram. Typical value = 0,02.
            '''

        })
    '''
    Saturation factor at rated terminal voltage (<i>S1</i>) (&gt;= 0).
    Not used by simplified model. Defined by defined by <i>S</i>(<i>E1</i>)
    in the SynchronousMachineSaturationParameters diagram. Typical value
    = 0,02.
    '''

    saturationFactor120: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation factor at 120% of rated terminal voltage (<i>S12</i>) (&gt;=
            RotatingMachineDynamics.saturationFactor). Not used by the simplified model,
            defined by <i>S</i>(<i>E2</i>) in the SynchronousMachineSaturationParameters
            diagram. Typical value = 0,12.
            '''

        })
    '''
    Saturation factor at 120% of rated terminal voltage (<i>S12</i>) (&gt;=
    RotatingMachineDynamics.saturationFactor). Not used by the simplified
    model, defined by <i>S</i>(<i>E2</i>) in the SynchronousMachineSaturationParameters
    diagram. Typical value = 0,12.
    '''

    inertia: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inertia constant of generator or motor and mechanical load (<i>H</i>) (&gt;
            0). This is the specification for the stored energy in the rotating mass
            when operating at rated speed. For a generator, this includes the generator
            plus all other elements (turbine, exciter) on the same shaft and has units
            of MW x s. For a motor, it includes the motor plus its mechanical load.
            Conventional units are PU on the generator MVA base, usually expressed
            as MW x s / MVA or just s. This value is used in the accelerating power
            reference frame for operator training simulator solutions. Typical value
            = 3.
            '''

        })
    '''
    Inertia constant of generator or motor and mechanical load (<i>H</i>)
    (&gt; 0). This is the specification for the stored energy in the rotating
    mass when operating at rated speed. For a generator, this includes
    the generator plus all other elements (turbine, exciter) on the same
    shaft and has units of MW x s. For a motor, it includes the motor plus
    its mechanical load. Conventional units are PU on the generator MVA
    base, usually expressed as MW x s / MVA or just s. This value is used
    in the accelerating power reference frame for operator training simulator
    solutions. Typical value = 3.
    '''

    statorLeakageReactance: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stator leakage reactance (<i>Xl</i>) (&gt;= 0). Typical value = 0,15.
            '''

        })
    '''
    Stator leakage reactance (<i>Xl</i>) (&gt;= 0). Typical value = 0,15.
    '''

    statorResistance: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stator (armature) resistance (<i>Rs</i>) (&gt;= 0). Typical value = 0,005.
            '''

        })
    '''
    Stator (armature) resistance (<i>Rs</i>) (&gt;= 0). Typical value =
    0,005.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StandardModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AsynchronousMachineDynamics(RotatingMachineDynamics):
    '''
    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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachine.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asynchronous machine to which this asynchronous machine dynamics model
            applies.
            '''

        })
    '''
    Asynchronous machine to which this asynchronous machine dynamics model
    applies.
    '''

    MechanicalLoadDynamics: Optional[MechanicalLoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MechanicalLoadDynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mechanical load model associated with this asynchronous machine model.
            '''

        })
    '''
    Mechanical load model associated with this asynchronous machine model.
    '''

    TurbineGovernorDynamics: Optional[TurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineGovernorDynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine-governor model associated with this asynchronous machine model.
            '''

        })
    '''
    Turbine-governor model associated with this asynchronous machine model.
    '''

    WindTurbineType1or2Dynamics: Optional[WindTurbineType1or2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2Dynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 1 or type 2 model associated with this asynchronous
            machine model.
            '''

        })
    '''
    Wind generator type 1 or type 2 model associated with this asynchronous
    machine model.
    '''

    AsynchronousMachine: Optional[AsynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachine.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine to which this asynchronous machine dynamics model
            applies.
            '''

        })
    '''
    Asynchronous machine to which this asynchronous machine dynamics model
    applies.
    '''

    MechanicalLoadDynamics: Optional[MechanicalLoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MechanicalLoadDynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Mechanical load model associated with this asynchronous machine model.
            '''

        })
    '''
    Mechanical load model associated with this asynchronous machine model.
    '''

    TurbineGovernorDynamics: Optional[TurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineGovernorDynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Turbine-governor model associated with this asynchronous machine model.
            '''

        })
    '''
    Turbine-governor model associated with this asynchronous machine model.
    '''

    WindTurbineType1or2Dynamics: Optional[WindTurbineType1or2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2Dynamics.AsynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 1 or type 2 model associated with this asynchronous
            machine model.
            '''

        })
    '''
    Wind generator type 1 or type 2 model associated with this asynchronous
    machine model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AsynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AsynchronousMachineEquivalentCircuit(AsynchronousMachineDynamics):
    '''
    The electrical equations of all variations of the asynchronous model are
    based on the AsynchronousEquivalentCircuit diagram for the direct- and
    quadrature- axes, with two equivalent rotor windings in each axis.
    Equations for conversion between equivalent circuit and time constant reactance
    forms:
    <i>Xs</i> = <i>Xm</i> + <i>Xl</i>
    <i>X'</i> = <i>Xl</i> + <i>Xm</i> x <i>Xlr1 </i>/ (<i>Xm </i>+ <i>Xlr1</i>)
    <i>X''</i> = <i>Xl</i> + <i>Xm</i> x <i>Xlr1</i> x <i>Xlr2</i> / (<i>Xm</i>
    x <i>Xlr1</i> + <i>Xm</i> x <i>Xlr2</i> + <i>Xlr1</i> x <i>Xlr2</i>)
    <i>T'o</i> = (<i>Xm</i> + <i>Xlr1</i>) / (<i>omega</i><i><sub>0</sub></i>
    x <i>Rr1</i>)
    <i>T''o</i> = (<i>Xm</i> x <i>Xlr1</i> + <i>Xm</i> x <i>Xlr2</i> + <i>Xlr1</i>
    x <i>Xlr2</i>) / (<i>omega</i><i><sub>0</sub></i> x <i>Rr2</i> x (<i>Xm</i>
    + <i>Xlr1</i>)
    Same equations using CIM attributes from AsynchronousMachineTimeConstantReactance
    class on left of "=" and AsynchronousMachineEquivalentCircuit class on
    right (except as noted):
    xs = xm + RotatingMachineDynamics.statorLeakageReactance
    xp = RotatingMachineDynamics.statorLeakageReactance + xm x xlr1 / (xm +
    xlr1)
    xpp = RotatingMachineDynamics.statorLeakageReactance + xm x xlr1 x xlr2
    / (xm x xlr1 + xm x xlr2 + xlr1 x xlr2)
    tpo = (xm + xlr1) / (2 x pi x nominal frequency x rr1)
    tppo = (xm x xlr1 + xm x xlr2 + xlr1 x xlr2) / (2 x pi x nominal frequency
    x rr2 x (xm + xlr1).
    '''

    rr1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damper 1 winding resistance.
            '''

        })
    '''
    Damper 1 winding resistance.
    '''

    rr2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damper 2 winding resistance.
            '''

        })
    '''
    Damper 2 winding resistance.
    '''

    xlr1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damper 1 winding leakage reactance.
            '''

        })
    '''
    Damper 1 winding leakage reactance.
    '''

    xlr2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damper 2 winding leakage reactance.
            '''

        })
    '''
    Damper 2 winding leakage reactance.
    '''

    xm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing reactance.
            '''

        })
    '''
    Magnetizing reactance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AsynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AsynchronousMachineTimeConstantReactance(AsynchronousMachineDynamics):
    '''
    Parameter details:
    <ol>
    <li>If <i>X'' </i>=<i> X'</i>, a single cage (one equivalent rotor winding
    per axis) is modelled.</li>
    <li>The �<i>p</i>� in the attribute names is a substitution for a �prime�
    in the usual parameter notation, e.g. <i>tpo</i> refers to <i>T'o</i>.</li>
    </ol>
    The parameters used for models expressed in time constant reactance form
    include:
    - RotatingMachine.ratedS (<i>MVAbase</i>);
    - RotatingMachineDynamics.damping (<i>D</i>);
    - RotatingMachineDynamics.inertia (<i>H</i>);
    - RotatingMachineDynamics.saturationFactor (<i>S1</i>);
    - RotatingMachineDynamics.saturationFactor120 (<i>S12</i>);
    - RotatingMachineDynamics.statorLeakageReactance (<i>Xl</i>);
    - RotatingMachineDynamics.statorResistance (<i>Rs</i>);
    - .xs (<i>Xs</i>);
    - .xp (<i>X'</i>);
    - .xpp (<i>X''</i>);
    - .tpo (<i>T'o</i>);
    - .tppo (<i>T''o</i>).
    '''

    tpo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient rotor time constant (<i>T'o</i>) (&gt; AsynchronousMachineTimeConstantReactance.tppo).
            Typical value = 5.
            '''

        })
    '''
    Transient rotor time constant (<i>T'o</i>) (&gt; AsynchronousMachineTimeConstantReactance.tppo).
    Typical value = 5.
    '''

    tppo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Subtransient rotor time constant (<i>T''o</i>) (&gt; 0). Typical value
            = 0,03.
            '''

        })
    '''
    Subtransient rotor time constant (<i>T''o</i>) (&gt; 0). Typical value
    = 0,03.
    '''

    xp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient reactance (unsaturated) (<i>X'</i>) (&gt;= AsynchronousMachineTimeConstantReactance.xpp).
            Typical value = 0,5.
            '''

        })
    '''
    Transient reactance (unsaturated) (<i>X'</i>) (&gt;= AsynchronousMachineTimeConstantReactance.xpp).
    Typical value = 0,5.
    '''

    xpp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Subtransient reactance (unsaturated) (<i>X''</i>) (&gt; RotatingMachineDynamics.statorLeakageReactance).
            Typical value = 0,2.
            '''

        })
    '''
    Subtransient reactance (unsaturated) (<i>X''</i>) (&gt; RotatingMachineDynamics.statorLeakageReactance).
    Typical value = 0,2.
    '''

    xs: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous reactance (<i>Xs</i>) (&gt;= AsynchronousMachineTimeConstantReactance.xp).
            Typical value = 1,8.
            '''

        })
    '''
    Synchronous reactance (<i>Xs</i>) (&gt;= AsynchronousMachineTimeConstantReactance.xp).
    Typical value = 1,8.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AsynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AsynchronousMachineUserDefined(AsynchronousMachineDynamics):
    '''
    Asynchronous machine whose dynamic behaviour is described by a user-defined
    model.
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.AsynchronousMachineUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineDynamics(RotatingMachineDynamics):
    '''
    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>
    '''

    CrossCompoundTurbineGovernorDyanmics: Optional[CrossCompoundTurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CrossCompoundTurbineGovernorDynamics.HighPressureSynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cross-compound turbine governor with which this high-pressure synchronous
            machine is associated.
            '''

        })
    '''
    The cross-compound turbine governor with which this high-pressure synchronous
    machine is associated.
    '''

    CrossCompoundTurbineGovernorDynamics: Optional[CrossCompoundTurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CrossCompoundTurbineGovernorDynamics.LowPressureSynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cross-compound turbine governor with which this low-pressure synchronous
            machine is associated.
            '''

        })
    '''
    The cross-compound turbine governor with which this low-pressure synchronous
    machine is associated.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model associated with this synchronous machine model.
            '''

        })
    '''
    Excitation system model associated with this synchronous machine model.
    '''

    MechanicalLoadDynamics: Optional[MechanicalLoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MechanicalLoadDynamics.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mechanical load model associated with this synchronous machine model.
            '''

        })
    '''
    Mechanical load model associated with this synchronous machine model.
    '''

    SynchronousMachine: Optional[SynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachine.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine to which synchronous machine dynamics model applies.
            '''

        })
    '''
    Synchronous machine to which synchronous machine dynamics model applies.
    '''

    CrossCompoundTurbineGovernorDyanmics: Optional[CrossCompoundTurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CrossCompoundTurbineGovernorDynamics.HighPressureSynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The cross-compound turbine governor with which this high-pressure synchronous
            machine is associated.
            '''

        })
    '''
    The cross-compound turbine governor with which this high-pressure synchronous
    machine is associated.
    '''

    CrossCompoundTurbineGovernorDynamics: Optional[CrossCompoundTurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CrossCompoundTurbineGovernorDynamics.LowPressureSynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The cross-compound turbine governor with which this low-pressure synchronous
            machine is associated.
            '''

        })
    '''
    The cross-compound turbine governor with which this low-pressure synchronous
    machine is associated.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model associated with this synchronous machine model.
            '''

        })
    '''
    Excitation system model associated with this synchronous machine model.
    '''

    GenICompensationForGenJ: list[GenICompensationForGenJ] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GenICompensationForGenJ.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Compensation of voltage compensator's generator for current flow out of
            this generator.
            '''

        })
    '''
    Compensation of voltage compensator's generator for current flow out
    of this generator.
    '''

    MechanicalLoadDynamics: Optional[MechanicalLoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MechanicalLoadDynamics.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Mechanical load model associated with this synchronous machine model.
            '''

        })
    '''
    Mechanical load model associated with this synchronous machine model.
    '''

    SynchronousMachine: Optional[SynchronousMachine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachine.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Synchronous machine to which synchronous machine dynamics model applies.
            '''

        })
    '''
    Synchronous machine to which synchronous machine dynamics model applies.
    '''

    TurbineGovernorDynamics: list[TurbineGovernorDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TurbineGovernorDynamics.SynchronousMachineDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Turbine-governor model associated with this synchronous machine model.
            Multiplicity of greater than one is intended to support hydro units that
            have multiple turbines on one generator.
            '''

        })
    '''
    Turbine-governor model associated with this synchronous machine model.
    Multiplicity of greater than one is intended to support hydro units
    that have multiple turbines on one generator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineDetailed(SynchronousMachineDynamics):
    '''
    All synchronous machine detailed types use a subset of the same data parameters
    and input/output variables.
    The several variations differ in the following ways:
    - the number of equivalent windings that are included;
    - the way in which saturation is incorporated into the model;
    - whether or not �subtransient saliency� (<i>X''q</i> not = <i>X''d</i>)
    is represented.
    It is not necessary for each simulation tool to have separate models for
    each of the model types. The same model can often be used for several types
    by alternative logic within the model. Also, differences in saturation
    representation might not result in significant model performance differences
    so model substitutions are often acceptable.
    '''

    efdBaseRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio (exciter voltage/generator voltage) of <i>Efd</i> bases of exciter
            and generator models (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Ratio (exciter voltage/generator voltage) of <i>Efd</i> bases of exciter
    and generator models (&gt; 0). Typical value = 1.
    '''

    saturationFactor120QAxis: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis saturation factor at 120% of rated terminal voltage (<i>S12q</i>)
            (&gt;= SynchonousMachineDetailed.saturationFactorQAxis). Typical value
            = 0,12.
            '''

        })
    '''
    Quadrature-axis saturation factor at 120% of rated terminal voltage
    (<i>S12q</i>) (&gt;= SynchonousMachineDetailed.saturationFactorQAxis).
    Typical value = 0,12.
    '''

    saturationFactorQAxis: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis saturation factor at rated terminal voltage (<i>S1q</i>)
            (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Quadrature-axis saturation factor at rated terminal voltage (<i>S1q</i>)
    (&gt;= 0). Typical value = 0,02.
    '''

    ifdBaseType: Optional[ IfdBaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation base system mode. It should be equal to the value of <i>WLMDV</i>
            given by the user. <i>WLMDV</i> is the PU ratio between the field voltage
            and the excitation current: <i>Efd</i> = <i>WLMDV</i> x <i>Ifd</i>. Typical
            value = ifag.
            '''

        })
    '''
    Excitation base system mode. It should be equal to the value of <i>WLMDV</i>
    given by the user. <i>WLMDV</i> is the PU ratio between the field voltage
    and the excitation current: <i>Efd</i> = <i>WLMDV</i> x <i>Ifd</i>.
    Typical value = ifag.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineEquivalentCircuit(SynchronousMachineDetailed):
    '''
    The electrical equations for all variations of the synchronous models are
    based on the SynchronousEquivalentCircuit diagram for the direct- and quadrature-
    axes.
    Equations for conversion between equivalent circuit and time constant reactance
    forms:
    <i>Xd</i> = <i>Xad </i>+<i> Xl</i>
    <i>X�d</i> = <i>Xl</i> + <i>Xad</i> x <i>Xfd</i> / (<i>Xad</i> + <i>Xfd</i>)
    <i>X�d</i> = <i>Xl</i> + <i>Xad</i> x <i>Xfd</i> x <i>X1d</i> / (<i>Xad</i>
    x <i>Xfd</i> + <i>Xad</i> x <i>X1d</i> + <i>Xfd</i> x <i>X1d</i>)
    <i>Xq</i> = <i>Xaq</i> + <i>Xl</i>
    <i>X�q</i> = <i>Xl</i> + <i>Xaq</i> x <i>X1q</i> / (<i>Xaq</i> + <i>X1q</i>)
    <i>X�q</i> = <i>Xl</i> + <i>Xaq</i> x <i>X1q</i> x <i>X2q</i> / (<i>Xaq</i>
    x <i>X1q</i> + <i>Xaq</i> x <i>X2q</i> + <i>X1q</i> x <i>X2q</i>)
    <i>T�do</i> = (<i>Xad</i> + <i>Xfd</i>) / (<i>omega</i><i><sub>0</sub></i>
    x <i>Rfd</i>)
    <i>T�do</i> = (<i>Xad</i> x <i>Xfd</i> + <i>Xad</i> x <i>X1d</i> + <i>Xfd</i>
    x <i>X1d</i>) / (<i>omega</i><i><sub>0</sub></i> x <i>R1d</i> x (<i>Xad</i>
    + <i>Xfd</i>)
    <i>T�qo</i> = (<i>Xaq</i> + <i>X1q</i>) / (<i>omega</i><i><sub>0</sub></i>
    x <i>R1q</i>)
    <i>T�qo</i> = (<i>Xaq</i> x <i>X1q</i> + <i>Xaq</i> x <i>X2q</i> + <i>X1q</i>
    x <i>X2q</i>) / (<i>omega</i><i><sub>0</sub></i> x <i>R2q</i> x (<i>Xaq</i>
    + <i>X1q</i>)
    Same equations using CIM attributes from SynchronousMachineTimeConstantReactance
    class on left of "=" and SynchronousMachineEquivalentCircuit class on right
    (except as noted):
    xDirectSync = xad + RotatingMachineDynamics.statorLeakageReactance
    xDirectTrans = RotatingMachineDynamics.statorLeakageReactance + xad x xfd
    / (xad + xfd)
    xDirectSubtrans = RotatingMachineDynamics.statorLeakageReactance + xad
    x xfd x x1d / (xad x xfd + xad x x1d + xfd x x1d)
    xQuadSync = xaq + RotatingMachineDynamics.statorLeakageReactance
    xQuadTrans = RotatingMachineDynamics.statorLeakageReactance + xaq x x1q
    / (xaq+ x1q)
    xQuadSubtrans = RotatingMachineDynamics.statorLeakageReactance + xaq x
    x1q x x2q / (xaq x x1q + xaq x x2q + x1q x x2q)
    tpdo = (xad + xfd) / (2 x pi x nominal frequency x rfd)
    tppdo = (xad x xfd + xad x x1d + xfd x x1d) / (2 x pi x nominal frequency
    x r1d x (xad + xfd)
    tpqo = (xaq + x1q) / (2 x pi x nominal frequency x r1q)
    tppqo = (xaq x x1q + xaq x x2q + x1q x x2q) / (2 x pi x nominal frequency
    x r2q x (xaq + x1q)
    These are only valid for a simplified model where "Canay" reactance is
    zero.
    '''

    r1d: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis damper 1 winding resistance.
            '''

        })
    '''
    Direct-axis damper 1 winding resistance.
    '''

    r1q: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis damper 1 winding resistance.
            '''

        })
    '''
    Quadrature-axis damper 1 winding resistance.
    '''

    r2q: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis damper 2 winding resistance.
            '''

        })
    '''
    Quadrature-axis damper 2 winding resistance.
    '''

    rfd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field winding resistance.
            '''

        })
    '''
    Field winding resistance.
    '''

    x1d: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis damper 1 winding leakage reactance.
            '''

        })
    '''
    Direct-axis damper 1 winding leakage reactance.
    '''

    x1q: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis damper 1 winding leakage reactance.
            '''

        })
    '''
    Quadrature-axis damper 1 winding leakage reactance.
    '''

    x2q: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis damper 2 winding leakage reactance.
            '''

        })
    '''
    Quadrature-axis damper 2 winding leakage reactance.
    '''

    xad: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis mutual reactance.
            '''

        })
    '''
    Direct-axis mutual reactance.
    '''

    xaq: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis mutual reactance.
            '''

        })
    '''
    Quadrature-axis mutual reactance.
    '''

    xf1d: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Differential mutual (�Canay�) reactance.
            '''

        })
    '''
    Differential mutual (�Canay�) reactance.
    '''

    xfd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Field winding leakage reactance.
            '''

        })
    '''
    Field winding leakage reactance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineTimeConstantReactance(SynchronousMachineDetailed):
    '''
    Synchronous machine detailed modelling types are defined by the combination
    of the attributes SynchronousMachineTimeConstantReactance.modelType and
    SynchronousMachineTimeConstantReactance.rotorType.
    Parameter details:
    <ol>
    <li>The �p� in the time-related attribute names is a substitution for a
    �prime� in the usual parameter notation, e.g. tpdo refers to <i>T'do</i>.</li>
    <li>The parameters used for models expressed in time constant reactance
    form include:</li>
    </ol>
    - RotatingMachine.ratedS (<i>MVAbase</i>);
    - RotatingMachineDynamics.damping (<i>D</i>);
    - RotatingMachineDynamics.inertia (<i>H</i>);
    - RotatingMachineDynamics.saturationFactor (<i>S1</i>);
    - RotatingMachineDynamics.saturationFactor120 (<i>S12</i>);
    - RotatingMachineDynamics.statorLeakageReactance (<i>Xl</i>);
    - RotatingMachineDynamics.statorResistance (<i>Rs</i>);
    - SynchronousMachineTimeConstantReactance.ks (<i>Ks</i>);
    - SynchronousMachineDetailed.saturationFactorQAxis (<i>S1q</i>);
    - SynchronousMachineDetailed.saturationFactor120QAxis (<i>S12q</i>);
    - SynchronousMachineDetailed.efdBaseRatio;
    - SynchronousMachineDetailed.ifdBaseType;
    - .xDirectSync (<i>Xd</i>);
    - .xDirectTrans (<i>X'd</i>);
    - .xDirectSubtrans (<i>X''d</i>);
    - .xQuadSync (<i>Xq</i>);
    - .xQuadTrans (<i>X'q</i>);
    - .xQuadSubtrans (<i>X''q</i>);
    - .tpdo (<i>T'do</i>);
    - .tppdo (<i>T''do</i>);
    - .tpqo (<i>T'qo</i>);
    - .tppqo (<i>T''qo</i>);
    - .tc.
    '''

    ks: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Saturation loading correction factor (<i>Ks</i>) (&gt;= 0). Used only by
            type J model. Typical value = 0.
            '''

        })
    '''
    Saturation loading correction factor (<i>Ks</i>) (&gt;= 0). Used only
    by type J model. Typical value = 0.
    '''

    modelType: Optional[ SynchronousMachineModelKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of synchronous machine model used in dynamic simulation applications.
            '''

        })
    '''
    Type of synchronous machine model used in dynamic simulation applications.
    '''

    rotorType: Optional[ RotorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of rotor on physical machine.
            '''

        })
    '''
    Type of rotor on physical machine.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damping time constant for �Canay� reactance (&gt;= 0). Typical value =
            0.
            '''

        })
    '''
    Damping time constant for �Canay� reactance (&gt;= 0). Typical value
    = 0.
    '''

    tpdo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis transient rotor time constant (<i>T'do</i>) (&gt; SynchronousMachineTimeConstantReactance.tppdo).
            Typical value = 5.
            '''

        })
    '''
    Direct-axis transient rotor time constant (<i>T'do</i>) (&gt; SynchronousMachineTimeConstantReactance.tppdo).
    Typical value = 5.
    '''

    tppdo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis subtransient rotor time constant (<i>T''do</i>) (&gt; 0). Typical
            value = 0,03.
            '''

        })
    '''
    Direct-axis subtransient rotor time constant (<i>T''do</i>) (&gt; 0).
    Typical value = 0,03.
    '''

    tppqo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis subtransient rotor time constant (<i>T''qo</i>) (&gt; 0).
            Typical value = 0,03.
            '''

        })
    '''
    Quadrature-axis subtransient rotor time constant (<i>T''qo</i>) (&gt;
    0). Typical value = 0,03.
    '''

    tpqo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis transient rotor time constant (<i>T'qo</i>) (&gt; SynchronousMachineTimeConstantReactance.tppqo).
            Typical value = 0,5.
            '''

        })
    '''
    Quadrature-axis transient rotor time constant (<i>T'qo</i>) (&gt; SynchronousMachineTimeConstantReactance.tppqo).
    Typical value = 0,5.
    '''

    xDirectSubtrans: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis subtransient reactance (unsaturated) (<i>X''d</i>) (&gt; RotatingMachineDynamics.statorLeakageReactance).
            Typical value = 0,2.
            '''

        })
    '''
    Direct-axis subtransient reactance (unsaturated) (<i>X''d</i>) (&gt;
    RotatingMachineDynamics.statorLeakageReactance). Typical value = 0,2.
    '''

    xDirectSync: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis synchronous reactance (<i>Xd</i>) (&gt;= SynchronousMachineTimeConstantReactance.xDirectTrans).
            The quotient of a sustained value of that AC component of armature voltage
            that is produced by the total direct-axis flux due to direct-axis armature
            current and the value of the AC component of this current, the machine
            running at rated speed. Typical value = 1,8.
            '''

        })
    '''
    Direct-axis synchronous reactance (<i>Xd</i>) (&gt;= SynchronousMachineTimeConstantReactance.xDirectTrans).
    The quotient of a sustained value of that AC component of armature
    voltage that is produced by the total direct-axis flux due to direct-axis
    armature current and the value of the AC component of this current,
    the machine running at rated speed. Typical value = 1,8.
    '''

    xDirectTrans: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direct-axis transient reactance (unsaturated) (<i>X'd</i>) (&gt;= SynchronousMachineTimeConstantReactance.xDirectSubtrans).
            Typical value = 0,5.
            '''

        })
    '''
    Direct-axis transient reactance (unsaturated) (<i>X'd</i>) (&gt;= SynchronousMachineTimeConstantReactance.xDirectSubtrans).
    Typical value = 0,5.
    '''

    xQuadSubtrans: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis subtransient reactance (<i>X''q</i>) (&gt; RotatingMachineDynamics.statorLeakageReactance).
            Typical value = 0,2.
            '''

        })
    '''
    Quadrature-axis subtransient reactance (<i>X''q</i>) (&gt; RotatingMachineDynamics.statorLeakageReactance).
    Typical value = 0,2.
    '''

    xQuadSync: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis synchronous reactance (<i>Xq</i>) (&gt;= SynchronousMachineTimeConstantReactance.xQuadTrans).
            The ratio of the component of reactive armature voltage, due to the quadrature-axis
            component of armature current, to this component of current, under steady
            state conditions and at rated frequency. Typical value = 1,6.
            '''

        })
    '''
    Quadrature-axis synchronous reactance (<i>Xq</i>) (&gt;= SynchronousMachineTimeConstantReactance.xQuadTrans).
    The ratio of the component of reactive armature voltage, due to the
    quadrature-axis component of armature current, to this component of
    current, under steady state conditions and at rated frequency. Typical
    value = 1,6.
    '''

    xQuadTrans: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quadrature-axis transient reactance (<i>X'q</i>) (&gt;= SynchronousMachineTimeConstantReactance.xQuadSubtrans).
            Typical value = 0,3.
            '''

        })
    '''
    Quadrature-axis transient reactance (<i>X'q</i>) (&gt;= SynchronousMachineTimeConstantReactance.xQuadSubtrans).
    Typical value = 0,3.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineSimplified(SynchronousMachineDynamics):
    '''
    The simplified model represents a synchronous generator as a constant internal
    voltage behind an impedance<i> </i>(<i>Rs + jXp</i>) as shown in the Simplified
    diagram.
    Since internal voltage is held constant, there is no <i>Efd</i> input and
    any excitation system model will be ignored. There is also no <i>Ifd</i>
    output.
    This model should not be used for representing a real generator except,
    perhaps, small generators whose response is insignificant.
    The parameters used for the simplified model include:
    - RotatingMachineDynamics.damping (<i>D</i>);
    - RotatingMachineDynamics.inertia (<i>H</i>);
    - RotatingMachineDynamics.statorLeakageReactance (used to exchange <i>jXp
    </i>for SynchronousMachineSimplified);
    - RotatingMachineDynamics.statorResistance (<i>Rs</i>).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchronousMachineUserDefined(SynchronousMachineDynamics):
    '''
    Synchronous machine whose dynamic behaviour is described by a user-defined
    model.
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.SynchronousMachineUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticVarCompensatorDynamics(DynamicsFunctionBlock):
    '''
    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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensator.StaticVarCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Static Var Compensator to which Static Var Compensator dynamics model applies.
            '''

        })
    '''
    Static Var Compensator to which Static Var Compensator dynamics model
    applies.
    '''

    StaticVarCompensator: Optional[StaticVarCompensator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensator.StaticVarCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StaticVarCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SVCUserDefined(StaticVarCompensatorDynamics):
    '''
    Static var compensator (SVC) function block whose dynamic behaviour is
    described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.SVCUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TurbineGovernorDynamics(DynamicsFunctionBlock):
    '''
    Turbine-governor function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.TurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asynchronous machine model with which this turbine-governor model is associated.
            TurbineGovernorDynamics shall have either an association to SynchronousMachineDynamics
            or to AsynchronousMachineDynamics.
            '''

        })
    '''
    Asynchronous machine model with which this turbine-governor model is
    associated. TurbineGovernorDynamics shall have either an association
    to SynchronousMachineDynamics or to AsynchronousMachineDynamics.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.TurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous machine model with which this turbine-governor model is associated.
            TurbineGovernorDynamics shall have either an association to SynchronousMachineDynamics
            or to AsynchronousMachineDynamics.
            '''

        })
    '''
    Synchronous machine model with which this turbine-governor model is
    associated. TurbineGovernorDynamics shall have either an association
    to SynchronousMachineDynamics or to AsynchronousMachineDynamics.
    '''

    TurbineLoadControllerDynamics: Optional[TurbineLoadControllerDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineLoadControllerDynamics.TurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine load controller providing input to this turbine-governor.
            '''

        })
    '''
    Turbine load controller providing input to this turbine-governor.
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.TurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine model with which this turbine-governor model is associated.
            TurbineGovernorDynamics shall have either an association to SynchronousMachineDynamics
            or to AsynchronousMachineDynamics.
            '''

        })
    '''
    Asynchronous machine model with which this turbine-governor model is
    associated. TurbineGovernorDynamics shall have either an association
    to SynchronousMachineDynamics or to AsynchronousMachineDynamics.
    '''

    TurbineLoadControllerDynamics: Optional[TurbineLoadControllerDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineLoadControllerDynamics.TurbineGovernorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Turbine load controller providing input to this turbine-governor.
            '''

        })
    '''
    Turbine load controller providing input to this turbine-governor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovCT1(TurbineGovernorDynamics):
    '''
    General model for any prime mover with a PID governor, used primarily for
    combustion turbine and combined cycle units.
    This model can be used to represent a variety of prime movers controlled
    by PID governors. It is suitable, for example, for the representation of:
    <ul>
    <li>gas turbine and single shaft combined cycle turbines</li>
    </ul>
    <ul>
    <li>diesel engines with modern electronic or digital governors </li>
    </ul>
    <ul>
    <li>steam turbines where steam is supplied from a large boiler drum or
    a large header whose pressure is substantially constant over the period
    under study</li>
    <li>simple hydro turbines in dam configurations where the water column
    length is short and water inertia effects are minimal.</li>
    </ul>
    Additional information on this model is available in the 2012 IEEE report,
    <i><u>Dynamic Models for Turbine-Governors in Power System Studies</u></i>,
    3.1.2.3 pages 3-4 (GGOV1).
    '''

    aset: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter setpoint (<i>Aset</i>). Unit = PU / s. Typical value
            = 0,01.
            '''

        })
    '''
    Acceleration limiter setpoint (<i>Aset</i>). Unit = PU / s. Typical
    value = 0,01.
    '''

    rclose: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve closing rate (<i>Rclose</i>). Unit = PU / s. Typical value
            = -0,1.
            '''

        })
    '''
    Minimum valve closing rate (<i>Rclose</i>). Unit = PU / s. Typical
    value = -0,1.
    '''

    ropen: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening rate (<i>Ropen</i>). Unit = PU / s. Typical value
            = 0.10.
            '''

        })
    '''
    Maximum valve opening rate (<i>Ropen</i>). Unit = PU / s. Typical value
    = 0.10.
    '''

    wfspd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switch for fuel source characteristic to recognize that fuel flow, for
            a given fuel valve stroke, can be proportional to engine speed (<i>Wfspd</i>).
            true = fuel flow proportional to speed (for some gas turbines and diesel
            engines with positive displacement fuel injectors)
            false = fuel control system keeps fuel flow independent of engine speed.
            Typical value = true.
            '''

        })
    '''
    Switch for fuel source characteristic to recognize that fuel flow,
    for a given fuel valve stroke, can be proportional to engine speed
    (<i>Wfspd</i>).
    true = fuel flow proportional to speed (for some gas turbines and diesel
    engines with positive displacement fuel injectors)
    false = fuel control system keeps fuel flow independent of engine speed.
    Typical value = true.
    '''

    db: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed governor deadband in PU speed (<i>db</i>). In the majority of applications,
            it is recommended that this value be set to zero. Typical value = 0.
            '''

        })
    '''
    Speed governor deadband in PU speed (<i>db</i>). In the majority of
    applications, it is recommended that this value be set to zero. Typical
    value = 0.
    '''

    dm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed sensitivity coefficient (<i>Dm</i>). <i>Dm</i> can represent either
            the variation of the engine power with the shaft speed or the variation
            of maximum power capability with shaft speed. If it is positive it describes
            the falling slope of the engine speed verses power characteristic as speed
            increases. A slightly falling characteristic is typical for reciprocating
            engines and some aero-derivative turbines. If it is negative the engine
            power is assumed to be unaffected by the shaft speed, but the maximum permissible
            fuel flow is taken to fall with falling shaft speed. This is characteristic
            of single-shaft industrial turbines due to exhaust temperature limits.
            Typical value = 0.
            '''

        })
    '''
    Speed sensitivity coefficient (<i>Dm</i>). <i>Dm</i> can represent
    either the variation of the engine power with the shaft speed or the
    variation of maximum power capability with shaft speed. If it is positive
    it describes the falling slope of the engine speed verses power characteristic
    as speed increases. A slightly falling characteristic is typical for
    reciprocating engines and some aero-derivative turbines. If it is negative
    the engine power is assumed to be unaffected by the shaft speed, but
    the maximum permissible fuel flow is taken to fall with falling shaft
    speed. This is characteristic of single-shaft industrial turbines due
    to exhaust temperature limits. Typical value = 0.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter gain (<i>Ka</i>). Typical value = 10.
            '''

        })
    '''
    Acceleration limiter gain (<i>Ka</i>). Typical value = 10.
    '''

    kdgov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor derivative gain (<i>Kdgov</i>). Typical value = 0.
            '''

        })
    '''
    Governor derivative gain (<i>Kdgov</i>). Typical value = 0.
    '''

    kigov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor integral gain (<i>Kigov</i>). Typical value = 2.
            '''

        })
    '''
    Governor integral gain (<i>Kigov</i>). Typical value = 2.
    '''

    kiload: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter integral gain for PI controller (<i>Kiload</i>). Typical value
            = 0,67.
            '''

        })
    '''
    Load limiter integral gain for PI controller (<i>Kiload</i>). Typical
    value = 0,67.
    '''

    kimw: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power controller (reset) gain (<i>Kimw</i>). The default value of 0,01
            corresponds to a reset time of 100 s. A value of 0,001 corresponds to a
            relatively slow-acting load controller. Typical value = 0,01.
            '''

        })
    '''
    Power controller (reset) gain (<i>Kimw</i>). The default value of 0,01
    corresponds to a reset time of 100 s. A value of 0,001 corresponds
    to a relatively slow-acting load controller. Typical value = 0,01.
    '''

    kpgov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor proportional gain (<i>Kpgov</i>). Typical value = 10.
            '''

        })
    '''
    Governor proportional gain (<i>Kpgov</i>). Typical value = 10.
    '''

    kpload: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter proportional gain for PI controller (<i>Kpload</i>). Typical
            value = 2.
            '''

        })
    '''
    Load limiter proportional gain for PI controller (<i>Kpload</i>). Typical
    value = 2.
    '''

    kturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>Kturb</i>) (&gt; 0). Typical value = 1,5.
            '''

        })
    '''
    Turbine gain (<i>Kturb</i>) (&gt; 0). Typical value = 1,5.
    '''

    ldref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter reference value (<i>Ldref</i>). Typical value = 1.
            '''

        })
    '''
    Load limiter reference value (<i>Ldref</i>). Typical value = 1.
    '''

    maxerr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value for speed error signal (<i>maxerr</i>) (&gt; GovCT1.minerr).
            Typical value = 0,05.
            '''

        })
    '''
    Maximum value for speed error signal (<i>maxerr</i>) (&gt; GovCT1.minerr).
    Typical value = 0,05.
    '''

    minerr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value for speed error signal (<i>minerr</i>) (&lt; GovCT1.maxerr).
            Typical value = -0,05.
            '''

        })
    '''
    Minimum value for speed error signal (<i>minerr</i>) (&lt; GovCT1.maxerr).
    Typical value = -0,05.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>). Typical value = 0,04.
            '''

        })
    '''
    Permanent droop (<i>R</i>). Typical value = 0,04.
    '''

    rdown: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate of load limit decrease (<i>Rdown</i>). Typical value = -99.
            '''

        })
    '''
    Maximum rate of load limit decrease (<i>Rdown</i>). Typical value =
    -99.
    '''

    rselect: Optional[ DroopSignalFeedbackKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback signal for droop (<i>Rselect</i>). Typical value = electricalPower.
            '''

        })
    '''
    Feedback signal for droop (<i>Rselect</i>). Typical value = electricalPower.
    '''

    rup: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate of load limit increase (<i>Rup</i>). Typical value = 99.
            '''

        })
    '''
    Maximum rate of load limit increase (<i>Rup</i>). Typical value = 99.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter time constant (<i>Ta</i>) (&gt; 0). Typical value
            = 0,1.
            '''

        })
    '''
    Acceleration limiter time constant (<i>Ta</i>) (&gt; 0). Typical value
    = 0,1.
    '''

    tact: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actuator time constant (<i>Tact</i>) (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Actuator time constant (<i>Tact</i>) (&gt;= 0). Typical value = 0,5.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine lag time constant (<i>Tb</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Turbine lag time constant (<i>Tb</i>) (&gt; 0). Typical value = 0,5.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine lead time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Turbine lead time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0.
    '''

    tdgov: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor derivative controller time constant (<i>Tdgov</i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Governor derivative controller time constant (<i>Tdgov</i>) (&gt;=
    0). Typical value = 1.
    '''

    teng: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transport time delay for diesel engine used in representing diesel engines
            where there is a small but measurable transport delay between a change
            in fuel flow setting and the development of torque (<i>Teng</i>) (&gt;=
            0). <i>Teng</i> should be zero in all but special cases where this transport
            delay is of particular concern. Typical value = 0.
            '''

        })
    '''
    Transport time delay for diesel engine used in representing diesel
    engines where there is a small but measurable transport delay between
    a change in fuel flow setting and the development of torque (<i>Teng</i>)
    (&gt;= 0). <i>Teng</i> should be zero in all but special cases where
    this transport delay is of particular concern. Typical value = 0.
    '''

    tfload: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load-limiter time constant (<i>Tfload</i>) (&gt; 0). Typical value = 3.
            '''

        })
    '''
    Load-limiter time constant (<i>Tfload</i>) (&gt; 0). Typical value
    = 3.
    '''

    tpelec: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electrical power transducer time constant (<i>Tpelec</i>) (&gt; 0). Typical
            value = 1.
            '''

        })
    '''
    Electrical power transducer time constant (<i>Tpelec</i>) (&gt; 0).
    Typical value = 1.
    '''

    tsa: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature detection lead time constant (<i>Tsa</i>) (&gt;= 0). Typical
            value = 4.
            '''

        })
    '''
    Temperature detection lead time constant (<i>Tsa</i>) (&gt;= 0). Typical
    value = 4.
    '''

    tsb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature detection lag time constant (<i>Tsb</i>) (&gt;= 0). Typical
            value = 5.
            '''

        })
    '''
    Temperature detection lag time constant (<i>Tsb</i>) (&gt;= 0). Typical
    value = 5.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve position limit (<i>Vmax</i>) (&gt; GovCT1.vmin). Typical
            value = 1.
            '''

        })
    '''
    Maximum valve position limit (<i>Vmax</i>) (&gt; GovCT1.vmin). Typical
    value = 1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve position limit (<i>Vmin</i>) (&lt; GovCT1.vmax). Typical
            value = 0,15.
            '''

        })
    '''
    Minimum valve position limit (<i>Vmin</i>) (&lt; GovCT1.vmax). Typical
    value = 0,15.
    '''

    wfnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No load fuel flow (<i>Wfnl</i>). Typical value = 0,2.
            '''

        })
    '''
    No load fuel flow (<i>Wfnl</i>). Typical value = 0,2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovCT2(TurbineGovernorDynamics):
    '''
    General governor with frequency-dependent fuel flow limit. This model is
    a modification of the GovCT1<b> </b>model in order to represent the frequency-dependent
    fuel flow limit of a specific gas turbine manufacturer.
    '''

    aset: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter setpoint (<i>Aset</i>). Unit = PU / s. Typical value
            = 10.
            '''

        })
    '''
    Acceleration limiter setpoint (<i>Aset</i>). Unit = PU / s. Typical
    value = 10.
    '''

    rclose: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve closing rate (<i>Rclose</i>). Unit = PU / s. Typical value
            = -99.
            '''

        })
    '''
    Minimum valve closing rate (<i>Rclose</i>). Unit = PU / s. Typical
    value = -99.
    '''

    ropen: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening rate (<i>Ropen</i>). Unit = PU / s. Typical value
            = 99.
            '''

        })
    '''
    Maximum valve opening rate (<i>Ropen</i>). Unit = PU / s. Typical value
    = 99.
    '''

    wfspd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switch for fuel source characteristic to recognize that fuel flow, for
            a given fuel valve stroke, can be proportional to engine speed (<i>Wfspd</i>).
            true = fuel flow proportional to speed (for some gas turbines and diesel
            engines with positive displacement fuel injectors)
            false = fuel control system keeps fuel flow independent of engine speed.
            Typical value = false.
            '''

        })
    '''
    Switch for fuel source characteristic to recognize that fuel flow,
    for a given fuel valve stroke, can be proportional to engine speed
    (<i>Wfspd</i>).
    true = fuel flow proportional to speed (for some gas turbines and diesel
    engines with positive displacement fuel injectors)
    false = fuel control system keeps fuel flow independent of engine speed.
    Typical value = false.
    '''

    db: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed governor deadband in PU speed (<i>db</i>). In the majority of applications,
            it is recommended that this value be set to zero. Typical value = 0.
            '''

        })
    '''
    Speed governor deadband in PU speed (<i>db</i>). In the majority of
    applications, it is recommended that this value be set to zero. Typical
    value = 0.
    '''

    dm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed sensitivity coefficient (<i>Dm</i>). <i>Dm</i> can represent either
            the variation of the engine power with the shaft speed or the variation
            of maximum power capability with shaft speed. If it is positive it describes
            the falling slope of the engine speed verses power characteristic as speed
            increases. A slightly falling characteristic is typical for reciprocating
            engines and some aero-derivative turbines. If it is negative the engine
            power is assumed to be unaffected by the shaft speed, but the maximum permissible
            fuel flow is taken to fall with falling shaft speed. This is characteristic
            of single-shaft industrial turbines due to exhaust temperature limits.
            Typical value = 0.
            '''

        })
    '''
    Speed sensitivity coefficient (<i>Dm</i>). <i>Dm</i> can represent
    either the variation of the engine power with the shaft speed or the
    variation of maximum power capability with shaft speed. If it is positive
    it describes the falling slope of the engine speed verses power characteristic
    as speed increases. A slightly falling characteristic is typical for
    reciprocating engines and some aero-derivative turbines. If it is negative
    the engine power is assumed to be unaffected by the shaft speed, but
    the maximum permissible fuel flow is taken to fall with falling shaft
    speed. This is characteristic of single-shaft industrial turbines due
    to exhaust temperature limits. Typical value = 0.
    '''

    flim1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 1 (<i>Flim1</i>). Unit = Hz. Typical value = 59.
            '''

        })
    '''
    Frequency threshold 1 (<i>Flim1</i>). Unit = Hz. Typical value = 59.
    '''

    flim10: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 10 (<i>Flim10</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 10 (<i>Flim10</i>). Unit = Hz. Typical value =
    0.
    '''

    flim2: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 2 (<i>Flim2</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 2 (<i>Flim2</i>). Unit = Hz. Typical value = 0.
    '''

    flim3: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 3 (<i>Flim3</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 3 (<i>Flim3</i>). Unit = Hz. Typical value = 0.
    '''

    flim4: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 4 (<i>Flim4</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 4 (<i>Flim4</i>). Unit = Hz. Typical value = 0.
    '''

    flim5: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 5 (<i>Flim5</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 5 (<i>Flim5</i>). Unit = Hz. Typical value = 0.
    '''

    flim6: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 6 (<i>Flim6</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 6 (<i>Flim6</i>). Unit = Hz. Typical value = 0.
    '''

    flim7: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 7 (<i>Flim7</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 7 (<i>Flim7</i>). Unit = Hz. Typical value = 0.
    '''

    flim8: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 8 (<i>Flim8</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 8 (<i>Flim8</i>). Unit = Hz. Typical value = 0.
    '''

    flim9: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency threshold 9 (<i>Flim9</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Frequency threshold 9 (<i>Flim9</i>). Unit = Hz. Typical value = 0.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter gain (<i>Ka</i>). Typical value = 10.
            '''

        })
    '''
    Acceleration limiter gain (<i>Ka</i>). Typical value = 10.
    '''

    kdgov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor derivative gain (<i>Kdgov</i>). Typical value = 0.
            '''

        })
    '''
    Governor derivative gain (<i>Kdgov</i>). Typical value = 0.
    '''

    kigov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor integral gain (<i>Kigov</i>). Typical value = 0,45.
            '''

        })
    '''
    Governor integral gain (<i>Kigov</i>). Typical value = 0,45.
    '''

    kiload: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter integral gain for PI controller (<i>Kiload</i>). Typical value
            = 1.
            '''

        })
    '''
    Load limiter integral gain for PI controller (<i>Kiload</i>). Typical
    value = 1.
    '''

    kimw: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power controller (reset) gain (<i>Kimw</i>). The default value of 0,01
            corresponds to a reset time of 100 seconds. A value of 0,001 corresponds
            to a relatively slow-acting load controller. Typical value = 0.
            '''

        })
    '''
    Power controller (reset) gain (<i>Kimw</i>). The default value of 0,01
    corresponds to a reset time of 100 seconds. A value of 0,001 corresponds
    to a relatively slow-acting load controller. Typical value = 0.
    '''

    kpgov: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor proportional gain (<i>Kpgov</i>). Typical value = 4.
            '''

        })
    '''
    Governor proportional gain (<i>Kpgov</i>). Typical value = 4.
    '''

    kpload: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter proportional gain for PI controller (<i>Kpload</i>). Typical
            value = 1.
            '''

        })
    '''
    Load limiter proportional gain for PI controller (<i>Kpload</i>). Typical
    value = 1.
    '''

    kturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>Kturb</i>). Typical value = 1,9168.
            '''

        })
    '''
    Turbine gain (<i>Kturb</i>). Typical value = 1,9168.
    '''

    ldref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter reference value (<i>Ldref</i>). Typical value = 1.
            '''

        })
    '''
    Load limiter reference value (<i>Ldref</i>). Typical value = 1.
    '''

    maxerr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value for speed error signal (<i>Maxerr</i>) (&gt; GovCT2.minerr).
            Typical value = 1.
            '''

        })
    '''
    Maximum value for speed error signal (<i>Maxerr</i>) (&gt; GovCT2.minerr).
    Typical value = 1.
    '''

    minerr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value for speed error signal (<i>Minerr</i>) (&lt; GovCT2.maxerr).
            Typical value = -1.
            '''

        })
    '''
    Minimum value for speed error signal (<i>Minerr</i>) (&lt; GovCT2.maxerr).
    Typical value = -1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    plim1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 1 (<i>Plim1</i>). Typical value = 0,8325.
            '''

        })
    '''
    Power limit 1 (<i>Plim1</i>). Typical value = 0,8325.
    '''

    plim10: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 10 (<i>Plim10</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 10 (<i>Plim10</i>). Typical value = 0.
    '''

    plim2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 2 (Plim2). Typical value = 0.
            '''

        })
    '''
    Power limit 2 (Plim2). Typical value = 0.
    '''

    plim3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 3 (<i>Plim3</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 3 (<i>Plim3</i>). Typical value = 0.
    '''

    plim4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 4 (<i>Plim4</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 4 (<i>Plim4</i>). Typical value = 0.
    '''

    plim5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 5 (<i>Plim5</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 5 (<i>Plim5</i>). Typical value = 0.
    '''

    plim6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 6 (<i>Plim6</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 6 (<i>Plim6</i>). Typical value = 0.
    '''

    plim7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 7 (<i>Plim7</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 7 (<i>Plim7</i>). Typical value = 0.
    '''

    plim8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power limit 8 (<i>Plim8</i>). Typical value = 0.
            '''

        })
    '''
    Power limit 8 (<i>Plim8</i>). Typical value = 0.
    '''

    plim9: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power Limit 9 (<i>Plim9</i>). Typical value = 0.
            '''

        })
    '''
    Power Limit 9 (<i>Plim9</i>). Typical value = 0.
    '''

    prate: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramp rate for frequency-dependent power limit (<i>Prate</i>). Typical value
            = 0,017.
            '''

        })
    '''
    Ramp rate for frequency-dependent power limit (<i>Prate</i>). Typical
    value = 0,017.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>). Typical value = 0,05.
            '''

        })
    '''
    Permanent droop (<i>R</i>). Typical value = 0,05.
    '''

    rdown: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate of load limit decrease (<i>Rdown</i>). Typical value = -99.
            '''

        })
    '''
    Maximum rate of load limit decrease (<i>Rdown</i>). Typical value =
    -99.
    '''

    rselect: Optional[ DroopSignalFeedbackKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback signal for droop (<i>Rselect</i>). Typical value = electricalPower.
            '''

        })
    '''
    Feedback signal for droop (<i>Rselect</i>). Typical value = electricalPower.
    '''

    rup: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate of load limit increase (<i>Rup</i>). Typical value = 99.
            '''

        })
    '''
    Maximum rate of load limit increase (<i>Rup</i>). Typical value = 99.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limiter time constant (<i>Ta</i>) (&gt;= 0). Typical value
            = 1.
            '''

        })
    '''
    Acceleration limiter time constant (<i>Ta</i>) (&gt;= 0). Typical value
    = 1.
    '''

    tact: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actuator time constant (<i>Tact</i>) (&gt;= 0). Typical value = 0,4.
            '''

        })
    '''
    Actuator time constant (<i>Tact</i>) (&gt;= 0). Typical value = 0,4.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine lag time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Turbine lag time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine lead time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Turbine lead time constant (<i>Tc</i>) (&gt;= 0). Typical value = 0.
    '''

    tdgov: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor derivative controller time constant (<i>Tdgov</i>) (&gt;= 0).
            Typical value = 1.
            '''

        })
    '''
    Governor derivative controller time constant (<i>Tdgov</i>) (&gt;=
    0). Typical value = 1.
    '''

    teng: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transport time delay for diesel engine used in representing diesel engines
            where there is a small but measurable transport delay between a change
            in fuel flow setting and the development of torque (<i>Teng</i>) (&gt;=
            0). <i>Teng</i> should be zero in all but special cases where this transport
            delay is of particular concern. Typical value = 0.
            '''

        })
    '''
    Transport time delay for diesel engine used in representing diesel
    engines where there is a small but measurable transport delay between
    a change in fuel flow setting and the development of torque (<i>Teng</i>)
    (&gt;= 0). <i>Teng</i> should be zero in all but special cases where
    this transport delay is of particular concern. Typical value = 0.
    '''

    tfload: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limiter time constant (<i>Tfload</i>) (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Load limiter time constant (<i>Tfload</i>) (&gt;= 0). Typical value
    = 3.
    '''

    tpelec: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electrical power transducer time constant (<i>Tpelec</i>) (&gt;= 0). Typical
            value = 2,5.
            '''

        })
    '''
    Electrical power transducer time constant (<i>Tpelec</i>) (&gt;= 0).
    Typical value = 2,5.
    '''

    tsa: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature detection lead time constant (<i>Tsa</i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Temperature detection lead time constant (<i>Tsa</i>) (&gt;= 0). Typical
    value = 0.
    '''

    tsb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature detection lag time constant (<i>Tsb</i>) (&gt;= 0). Typical
            value = 50.
            '''

        })
    '''
    Temperature detection lag time constant (<i>Tsb</i>) (&gt;= 0). Typical
    value = 50.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve position limit (<i>Vmax</i>) (&gt; GovCT2.vmin). Typical
            value = 1.
            '''

        })
    '''
    Maximum valve position limit (<i>Vmax</i>) (&gt; GovCT2.vmin). Typical
    value = 1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve position limit (<i>Vmin</i>) (&lt; GovCT2.vmax). Typical
            value = 0,175.
            '''

        })
    '''
    Minimum valve position limit (<i>Vmin</i>) (&lt; GovCT2.vmax). Typical
    value = 0,175.
    '''

    wfnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No load fuel flow (<i>Wfnl</i>). Typical value = 0,187.
            '''

        })
    '''
    No load fuel flow (<i>Wfnl</i>). Typical value = 0,187.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGAST(TurbineGovernorDynamics):
    '''
    Single shaft gas turbine.
    '''

    at: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ambient temperature load limit (<i>Load Limit</i>). Typical value = 1.
            '''

        })
    '''
    Ambient temperature load limit (<i>Load Limit</i>). Typical value =
    1.
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>). Typical value = 0,18.
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>). Typical value = 0,18.
    '''

    kt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature limiter gain (<i>Kt</i>). Typical value = 3.
            '''

        })
    '''
    Temperature limiter gain (<i>Kt</i>). Typical value = 3.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>) (&gt;0). Typical value = 0,04.
            '''

        })
    '''
    Permanent droop (<i>R</i>) (&gt;0). Typical value = 0,04.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor mechanism time constant (<i>T1</i>) (&gt;= 0). <i>T1</i> represents
            the natural valve positioning time constant of the governor for small disturbances,
            as seen when rate limiting is not in effect. Typical value = 0,5.
            '''

        })
    '''
    Governor mechanism time constant (<i>T1</i>) (&gt;= 0). <i>T1</i> represents
    the natural valve positioning time constant of the governor for small
    disturbances, as seen when rate limiting is not in effect. Typical
    value = 0,5.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine power time constant (<i>T2</i>) (&gt;= 0). <i>T2</i> represents
            delay due to internal energy storage of the gas turbine engine. <i>T2</i>
            can be used to give a rough approximation to the delay associated with
            acceleration of the compressor spool of a multi-shaft engine, or with the
            compressibility of gas in the plenum of a free power turbine of an aero-derivative
            unit, for example. Typical value = 0,5.
            '''

        })
    '''
    Turbine power time constant (<i>T2</i>) (&gt;= 0). <i>T2</i> represents
    delay due to internal energy storage of the gas turbine engine. <i>T2</i>
    can be used to give a rough approximation to the delay associated with
    acceleration of the compressor spool of a multi-shaft engine, or with
    the compressibility of gas in the plenum of a free power turbine of
    an aero-derivative unit, for example. Typical value = 0,5.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine exhaust temperature time constant (<i>T3</i>) (&gt;= 0). Typical
            value = 3.
            '''

        })
    '''
    Turbine exhaust temperature time constant (<i>T3</i>) (&gt;= 0). Typical
    value = 3.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum turbine power, PU of MWbase (<i>Vmax</i>) (&gt; GovGAST.vmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum turbine power, PU of MWbase (<i>Vmax</i>) (&gt; GovGAST.vmin).
    Typical value = 1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum turbine power, PU of MWbase (<i>Vmin</i>) (&lt; GovGAST.vmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum turbine power, PU of MWbase (<i>Vmin</i>) (&lt; GovGAST.vmax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGAST1(TurbineGovernorDynamics):
    '''
    Modified single shaft gas turbine.
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine power time constant numerator scale factor (<i>a</i>). Typical
            value = 0,8.
            '''

        })
    '''
    Turbine power time constant numerator scale factor (<i>a</i>). Typical
    value = 0,8.
    '''

    b: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine power time constant denominator scale factor (<i>b</i>) (&gt;0).
            Typical value = 1.
            '''

        })
    '''
    Turbine power time constant denominator scale factor (<i>b</i>) (&gt;0).
    Typical value = 1.
    '''

    ltrate: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum long term fuel valve opening rate (<i>Ltrate</i>). Typical value
            = 0,02.
            '''

        })
    '''
    Maximum long term fuel valve opening rate (<i>Ltrate</i>). Typical
    value = 0,02.
    '''

    rmax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum fuel valve opening rate (<i>Rmax</i>). Unit = PU / s. Typical value
            = 1.
            '''

        })
    '''
    Maximum fuel valve opening rate (<i>Rmax</i>). Unit = PU / s. Typical
    value = 1.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    fidle: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow at zero power output (<i>Fidle</i>). Typical value = 0,18.
            '''

        })
    '''
    Fuel flow at zero power output (<i>Fidle</i>). Typical value = 0,18.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2,PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2,PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (<i>Ka</i>). Typical value = 0.
            '''

        })
    '''
    Governor gain (<i>Ka</i>). Typical value = 0.
    '''

    kt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature limiter gain (<i>Kt</i>). Typical value = 3.
            '''

        })
    '''
    Temperature limiter gain (<i>Kt</i>). Typical value = 3.
    '''

    lmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ambient temperature load limit (<i>Lmax</i>). <i>Lmax</i> is the turbine
            power output corresponding to the limiting exhaust gas temperature. Typical
            value = 1.
            '''

        })
    '''
    Ambient temperature load limit (<i>Lmax</i>). <i>Lmax</i> is the turbine
    power output corresponding to the limiting exhaust gas temperature.
    Typical value = 1.
    '''

    loadinc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve position change allowed at fast rate (<i>Loadinc</i>). Typical value
            = 0,05.
            '''

        })
    '''
    Valve position change allowed at fast rate (<i>Loadinc</i>). Typical
    value = 0,05.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>) (&gt;0). Typical value = 0,04.
            '''

        })
    '''
    Permanent droop (<i>R</i>) (&gt;0). Typical value = 0,04.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor mechanism time constant (<i>T1</i>) (&gt;= 0). <i>T1</i> represents
            the natural valve positioning time constant of the governor for small disturbances,
            as seen when rate limiting is not in effect. Typical value = 0,5.
            '''

        })
    '''
    Governor mechanism time constant (<i>T1</i>) (&gt;= 0). <i>T1</i> represents
    the natural valve positioning time constant of the governor for small
    disturbances, as seen when rate limiting is not in effect. Typical
    value = 0,5.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine power time constant (<i>T2</i>) (&gt;= 0). <i>T2</i> represents
            delay due to internal energy storage of the gas turbine engine. <i>T2</i>
            can be used to give a rough approximation to the delay associated with
            acceleration of the compressor spool of a multi-shaft engine, or with the
            compressibility of gas in the plenum of the free power turbine of an aero-derivative
            unit, for example. Typical value = 0,5.
            '''

        })
    '''
    Turbine power time constant (<i>T2</i>) (&gt;= 0). <i>T2</i> represents
    delay due to internal energy storage of the gas turbine engine. <i>T2</i>
    can be used to give a rough approximation to the delay associated with
    acceleration of the compressor spool of a multi-shaft engine, or with
    the compressibility of gas in the plenum of the free power turbine
    of an aero-derivative unit, for example. Typical value = 0,5.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine exhaust temperature time constant (<i>T3</i>) (&gt;= 0). <i>T3</i>
            represents delay in the exhaust temperature and load limiting system. Typical
            value = 3.
            '''

        })
    '''
    Turbine exhaust temperature time constant (<i>T3</i>) (&gt;= 0). <i>T3</i>
    represents delay in the exhaust temperature and load limiting system.
    Typical value = 3.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T4</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T4</i>) (&gt;= 0). Typical value =
    0.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T5</i>) (&gt;= 0). If = 0, entire gain and
            lead-lag block is bypassed. Typical value = 0.
            '''

        })
    '''
    Governor lag time constant (<i>T5</i>) (&gt;= 0). If = 0, entire gain
    and lead-lag block is bypassed. Typical value = 0.
    '''

    tltr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve position averaging time constant (<i>Tltr</i>) (&gt;= 0). Typical
            value = 10.
            '''

        })
    '''
    Valve position averaging time constant (<i>Tltr</i>) (&gt;= 0). Typical
    value = 10.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum turbine power, PU of MWbase (<i>Vmax</i>) (&gt; GovGAST1.vmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum turbine power, PU of MWbase (<i>Vmax</i>) (&gt; GovGAST1.vmin).
    Typical value = 1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum turbine power, PU of MWbase (<i>Vmin</i>) (&lt; GovGAST1.vmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum turbine power, PU of MWbase (<i>Vmin</i>) (&lt; GovGAST1.vmax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGAST2(TurbineGovernorDynamics):
    '''
    Gas turbine.
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>A</i>).
            '''

        })
    '''
    Valve positioner (<i>A</i>).
    '''

    b: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>B</i>).
            '''

        })
    '''
    Valve positioner (<i>B</i>).
    '''

    c: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>C</i>).
            '''

        })
    '''
    Valve positioner (<i>C</i>).
    '''

    z: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor mode (<i>Z</i>).
            1 = droop
            0 = isochronous.
            '''

        })
    '''
    Governor mode (<i>Z</i>).
    1 = droop
    0 = isochronous.
    '''

    af1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exhaust temperature parameter (<i>Af1</i>). Unit = PU temperature. Based
            on temperature in degrees C.
            '''

        })
    '''
    Exhaust temperature parameter (<i>Af1</i>). Unit = PU temperature.
    Based on temperature in degrees C.
    '''

    af2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient equal to 0,5(1-speed) (<i>Af2</i>).
            '''

        })
    '''
    Coefficient equal to 0,5(1-speed) (<i>Af2</i>).
    '''

    bf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Bf1</i>). <i>Bf1</i> = <i>E</i>(1 - <i>W</i>) where <i>E</i> (speed
            sensitivity coefficient) is 0,55 to 0,65 x <i>Tr</i>. Unit = PU temperature.
            Based on temperature in degrees C.
            '''

        })
    '''
    (<i>Bf1</i>). <i>Bf1</i> = <i>E</i>(1 - <i>W</i>) where <i>E</i> (speed
    sensitivity coefficient) is 0,55 to 0,65 x <i>Tr</i>. Unit = PU temperature.
    Based on temperature in degrees C.
    '''

    bf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine torque coefficient K<sub>hhv</sub> (depends on heating value of
            fuel stream in combustion chamber) (<i>Bf2</i>).
            '''

        })
    '''
    Turbine torque coefficient K<sub>hhv</sub> (depends on heating value
    of fuel stream in combustion chamber) (<i>Bf2</i>).
    '''

    cf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient defining fuel flow where power output is 0% (<i>Cf2</i>). Synchronous
            but no output. Typically 0,23 x K<sub>hhv</sub> (23% fuel flow).
            '''

        })
    '''
    Coefficient defining fuel flow where power output is 0% (<i>Cf2</i>).
    Synchronous but no output. Typically 0,23 x K<sub>hhv</sub> (23% fuel
    flow).
    '''

    ecr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Combustion reaction time delay (<i>Ecr</i>) (&gt;= 0).
            '''

        })
    '''
    Combustion reaction time delay (<i>Ecr</i>) (&gt;= 0).
    '''

    etd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine and exhaust delay (<i>Etd</i>) (&gt;= 0).
            '''

        })
    '''
    Turbine and exhaust delay (<i>Etd</i>) (&gt;= 0).
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio of fuel adjustment (<i>K3</i>).
            '''

        })
    '''
    Ratio of fuel adjustment (<i>K3</i>).
    '''

    k4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of radiation shield (<i>K4</i>).
            '''

        })
    '''
    Gain of radiation shield (<i>K4</i>).
    '''

    k5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of radiation shield (<i>K5</i>).
            '''

        })
    '''
    Gain of radiation shield (<i>K5</i>).
    '''

    k6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum fuel flow (<i>K6</i>).
            '''

        })
    '''
    Minimum fuel flow (<i>K6</i>).
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel system feedback (<i>Kf</i>).
            '''

        })
    '''
    Fuel system feedback (<i>Kf</i>).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    t: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel control time constant (<i>T</i>) (&gt;= 0).
            '''

        })
    '''
    Fuel control time constant (<i>T</i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Radiation shield time constant (<i>T3</i>) (&gt;= 0).
            '''

        })
    '''
    Radiation shield time constant (<i>T3</i>) (&gt;= 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Thermocouple time constant (<i>T4</i>) (&gt;= 0).
            '''

        })
    '''
    Thermocouple time constant (<i>T4</i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature control time constant (<i>T5</i>) (&gt;= 0).
            '''

        })
    '''
    Temperature control time constant (<i>T5</i>) (&gt;= 0).
    '''

    tc: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature control (<i>Tc</i>). Unit = �F or �C depending on parameters
            <i>Af1</i> and <i>Bf1</i>.
            '''

        })
    '''
    Temperature control (<i>Tc</i>). Unit = �F or �C depending on parameters
    <i>Af1</i> and <i>Bf1</i>.
    '''

    tcd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Compressor discharge time constant (<i>Tcd</i>) (&gt;= 0).
            '''

        })
    '''
    Compressor discharge time constant (<i>Tcd</i>) (&gt;= 0).
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel system time constant (<i>Tf</i>) (&gt;= 0).
            '''

        })
    '''
    Fuel system time constant (<i>Tf</i>) (&gt;= 0).
    '''

    tmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum turbine limit (<i>Tmax</i>) (&gt; GovGAST2.tmin).
            '''

        })
    '''
    Maximum turbine limit (<i>Tmax</i>) (&gt; GovGAST2.tmin).
    '''

    tmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum turbine limit (<i>Tmin</i>) (&lt; GovGAST2.tmax).
            '''

        })
    '''
    Minimum turbine limit (<i>Tmin</i>) (&lt; GovGAST2.tmax).
    '''

    tr: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated temperature (<i>Tr</i>). Unit = �C depending on parameters<i> Af1
            </i>and <i>Bf1</i>.
            '''

        })
    '''
    Rated temperature (<i>Tr</i>). Unit = �C depending on parameters<i>
    Af1 </i>and <i>Bf1</i>.
    '''

    trate: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine rating (<i>Trate</i>). Unit = MW.
            '''

        })
    '''
    Turbine rating (<i>Trate</i>). Unit = MW.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature controller integration rate (<i>Tt</i>) (&gt;= 0).
            '''

        })
    '''
    Temperature controller integration rate (<i>Tt</i>) (&gt;= 0).
    '''

    w: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (1/droop) on turbine rating (<i>W</i>).
            '''

        })
    '''
    Governor gain (1/droop) on turbine rating (<i>W</i>).
    '''

    x: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>X</i>) (&gt;= 0).
            '''

        })
    '''
    Governor lead time constant (<i>X</i>) (&gt;= 0).
    '''

    y: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>Y</i>) (&gt; 0).
            '''

        })
    '''
    Governor lag time constant (<i>Y</i>) (&gt; 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGAST3(TurbineGovernorDynamics):
    '''
    Generic turbogas with acceleration and temperature controller.
    '''

    bca: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration limit set-point (<i>Bca</i>). Unit = 1/s. Typical value =
            0,01.
            '''

        })
    '''
    Acceleration limit set-point (<i>Bca</i>). Unit = 1/s. Typical value
    = 0,01.
    '''

    kac: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel system feedback (<i>K</i><i><sub>AC</sub></i>). Typical value = 0.
            '''

        })
    '''
    Fuel system feedback (<i>K</i><i><sub>AC</sub></i>). Typical value
    = 0.
    '''

    kca: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Acceleration control integral gain (<i>Kca</i>). Unit = 1/s. Typical value
            = 100.
            '''

        })
    '''
    Acceleration control integral gain (<i>Kca</i>). Unit = 1/s. Typical
    value = 100.
    '''

    ksi: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of radiation shield (<i>Ksi</i>). Typical value = 0,8.
            '''

        })
    '''
    Gain of radiation shield (<i>Ksi</i>). Typical value = 0,8.
    '''

    ky: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient of transfer function of fuel valve positioner (<i>Ky</i>).
            Typical value = 1.
            '''

        })
    '''
    Coefficient of transfer function of fuel valve positioner (<i>Ky</i>).
    Typical value = 1.
    '''

    bp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Droop (<i>bp</i>). Typical value = 0,05.
            '''

        })
    '''
    Droop (<i>bp</i>). Typical value = 0,05.
    '''

    dtc: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exhaust temperature variation due to fuel flow increasing from 0 to 1 PU
            (<i>deltaTc</i>). Typical value = 390.
            '''

        })
    '''
    Exhaust temperature variation due to fuel flow increasing from 0 to
    1 PU (<i>deltaTc</i>). Typical value = 390.
    '''

    ka: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum fuel flow (<i>Ka</i>). Typical value = 0,23.
            '''

        })
    '''
    Minimum fuel flow (<i>Ka</i>). Typical value = 0,23.
    '''

    mnef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum negative error value (<i>MNef</i>). Typical value = -0,05.
            '''

        })
    '''
    Fuel flow maximum negative error value (<i>MNef</i>). Typical value
    = -0,05.
    '''

    mxef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum positive error value (<i>MXef</i>). Typical value = 0,05.
            '''

        })
    '''
    Fuel flow maximum positive error value (<i>MXef</i>). Typical value
    = 0,05.
    '''

    rcmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum fuel flow (<i>RCMN</i>). Typical value = -0,1.
            '''

        })
    '''
    Minimum fuel flow (<i>RCMN</i>). Typical value = -0,1.
    '''

    rcmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum fuel flow (<i>RCMX</i>). Typical value = 1.
            '''

        })
    '''
    Maximum fuel flow (<i>RCMX</i>). Typical value = 1.
    '''

    tac: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel control time constant (<i>Tac</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Fuel control time constant (<i>Tac</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Compressor discharge volume time constant (<i>Tc</i>) (&gt;= 0). Typical
            value = 0,2.
            '''

        })
    '''
    Compressor discharge volume time constant (<i>Tc</i>) (&gt;= 0). Typical
    value = 0,2.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature controller derivative gain (<i>Td</i>) (&gt;= 0). Typical value
            = 3,3.
            '''

        })
    '''
    Temperature controller derivative gain (<i>Td</i>) (&gt;= 0). Typical
    value = 3,3.
    '''

    tfen: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine rated exhaust temperature correspondent to Pm=1 PU (<i>Tfen</i>).
            Typical value = 540.
            '''

        })
    '''
    Turbine rated exhaust temperature correspondent to Pm=1 PU (<i>Tfen</i>).
    Typical value = 540.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of speed governor (<i>Tg</i>) (&gt;= 0). Typical value =
            0,05.
            '''

        })
    '''
    Time constant of speed governor (<i>Tg</i>) (&gt;= 0). Typical value
    = 0,05.
    '''

    tsi: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of radiation shield (<i>Tsi</i>) (&gt;= 0). Typical value
            = 15.
            '''

        })
    '''
    Time constant of radiation shield (<i>Tsi</i>) (&gt;= 0). Typical value
    = 15.
    '''

    tt: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature controller integration rate (<i>Tt</i>). Typical value = 250.
            '''

        })
    '''
    Temperature controller integration rate (<i>Tt</i>). Typical value
    = 250.
    '''

    ttc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of thermocouple (<i>Ttc</i>) (&gt;= 0). Typical value = 2,5.
            '''

        })
    '''
    Time constant of thermocouple (<i>Ttc</i>) (&gt;= 0). Typical value
    = 2,5.
    '''

    ty: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of fuel valve positioner (<i>Ty</i>) (&gt;= 0). Typical value
            = 0,2.
            '''

        })
    '''
    Time constant of fuel valve positioner (<i>Ty</i>) (&gt;= 0). Typical
    value = 0,2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGAST4(TurbineGovernorDynamics):
    '''
    Generic turbogas.
    '''

    bp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Droop (<i>b</i><i><sub>p</sub></i>). Typical value = 0,05.
            '''

        })
    '''
    Droop (<i>b</i><i><sub>p</sub></i>). Typical value = 0,05.
    '''

    ktm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Compressor gain (<i>Ktm</i>). Typical value = 0.
            '''

        })
    '''
    Compressor gain (<i>Ktm</i>). Typical value = 0.
    '''

    mnef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum negative error value (<i>MNef</i>). Typical value = -0,05.
            '''

        })
    '''
    Fuel flow maximum negative error value (<i>MNef</i>). Typical value
    = -0,05.
    '''

    mxef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum positive error value (<i>MXef</i>). Typical value = 0,05.
            '''

        })
    '''
    Fuel flow maximum positive error value (<i>MXef</i>). Typical value
    = 0,05.
    '''

    rymn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve opening (<i>RYMN</i>). Typical value = 0.
            '''

        })
    '''
    Minimum valve opening (<i>RYMN</i>). Typical value = 0.
    '''

    rymx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening (<i>RYMX</i>). Typical value = 1,1.
            '''

        })
    '''
    Maximum valve opening (<i>RYMX</i>). Typical value = 1,1.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>TA</i>) (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Maximum gate opening velocity (<i>TA</i>) (&gt;= 0). Typical value
    = 3.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>TC</i>) (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Maximum gate closing velocity (<i>TC</i>) (&gt;= 0). Typical value
    = 0,5.
    '''

    tcm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel control time constant (<i>Tcm</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Fuel control time constant (<i>Tcm</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Compressor discharge volume time constant (<i>Tm</i>) (&gt;= 0). Typical
            value = 0,2.
            '''

        })
    '''
    Compressor discharge volume time constant (<i>Tm</i>) (&gt;= 0). Typical
    value = 0,2.
    '''

    ty: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of fuel valve positioner (<i>Ty</i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Time constant of fuel valve positioner (<i>Ty</i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovGASTWD(TurbineGovernorDynamics):
    '''
    Woodward� gas turbine governor.
    [Footnote: Woodward gas turbines are an example of suitable products available
    commercially. This information is given for the convenience of users of
    this document and does not constitute an endorsement by IEC of these products.]
    '''

    a: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>A</i>).
            '''

        })
    '''
    Valve positioner (<i>A</i>).
    '''

    b: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>B</i>).
            '''

        })
    '''
    Valve positioner (<i>B</i>).
    '''

    c: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner (<i>C</i>).
            '''

        })
    '''
    Valve positioner (<i>C</i>).
    '''

    af1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Exhaust temperature parameter (<i>Af1</i>).
            '''

        })
    '''
    Exhaust temperature parameter (<i>Af1</i>).
    '''

    af2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient equal to 0,5(1-speed) (<i>Af2</i>).
            '''

        })
    '''
    Coefficient equal to 0,5(1-speed) (<i>Af2</i>).
    '''

    bf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Bf1</i>). <i>Bf1</i> = <i>E</i>(1-<i>w</i>) where <i>E</i> (speed sensitivity
            coefficient) is 0,55 to 0,65 x <i>Tr</i>.
            '''

        })
    '''
    (<i>Bf1</i>). <i>Bf1</i> = <i>E</i>(1-<i>w</i>) where <i>E</i> (speed
    sensitivity coefficient) is 0,55 to 0,65 x <i>Tr</i>.
    '''

    bf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine torque coefficient K<sub>hhv</sub> (depends on heating value of
            fuel stream in combustion chamber) (<i>Bf2</i>).
            '''

        })
    '''
    Turbine torque coefficient K<sub>hhv</sub> (depends on heating value
    of fuel stream in combustion chamber) (<i>Bf2</i>).
    '''

    cf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient defining fuel flow where power output is 0 % (<i>Cf2</i>).
            Synchronous but no output. Typically 0,23 x K<sub>hhv </sub>(23 % fuel
            flow).
            '''

        })
    '''
    Coefficient defining fuel flow where power output is 0 % (<i>Cf2</i>).
    Synchronous but no output. Typically 0,23 x K<sub>hhv </sub>(23 % fuel
    flow).
    '''

    ecr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Combustion reaction time delay (<i>Ecr</i>) (&gt;= 0).
            '''

        })
    '''
    Combustion reaction time delay (<i>Ecr</i>) (&gt;= 0).
    '''

    etd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine and exhaust delay (<i>Etd</i>) (&gt;= 0).
            '''

        })
    '''
    Turbine and exhaust delay (<i>Etd</i>) (&gt;= 0).
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio of fuel adjustment (<i>K3</i>).
            '''

        })
    '''
    Ratio of fuel adjustment (<i>K3</i>).
    '''

    k4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of radiation shield (<i>K4</i>).
            '''

        })
    '''
    Gain of radiation shield (<i>K4</i>).
    '''

    k5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of radiation shield (<i>K5</i>).
            '''

        })
    '''
    Gain of radiation shield (<i>K5</i>).
    '''

    k6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum fuel flow (<i>K6</i>).
            '''

        })
    '''
    Minimum fuel flow (<i>K6</i>).
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Drop governor gain (<i>Kd</i>).
            '''

        })
    '''
    Drop governor gain (<i>Kd</i>).
    '''

    kdroop: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Kdroop</i>) (&gt;= 0).
            '''

        })
    '''
    (<i>Kdroop</i>) (&gt;= 0).
    '''

    kf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel system feedback (<i>Kf</i>).
            '''

        })
    '''
    Fuel system feedback (<i>Kf</i>).
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Isochronous Governor Gain (<i>Ki</i>).
            '''

        })
    '''
    Isochronous Governor Gain (<i>Ki</i>).
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PID proportional gain (<i>Kp</i>).
            '''

        })
    '''
    PID proportional gain (<i>Kp</i>).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    t: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel control time constant (<i>T</i>) (&gt;= 0).
            '''

        })
    '''
    Fuel control time constant (<i>T</i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Radiation shield time constant (<i>T3</i>) (&gt;= 0).
            '''

        })
    '''
    Radiation shield time constant (<i>T3</i>) (&gt;= 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Thermocouple time constant (<i>T4</i>) (&gt;= 0).
            '''

        })
    '''
    Thermocouple time constant (<i>T4</i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature control time constant (<i>T5</i>) (&gt;= 0).
            '''

        })
    '''
    Temperature control time constant (<i>T5</i>) (&gt;= 0).
    '''

    tc: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature control (<i>Tc</i>).
            '''

        })
    '''
    Temperature control (<i>Tc</i>).
    '''

    tcd: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Compressor discharge time constant (<i>Tcd</i>) (&gt;= 0).
            '''

        })
    '''
    Compressor discharge time constant (<i>Tcd</i>) (&gt;= 0).
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power transducer time constant (<i>Td</i>) (&gt;= 0).
            '''

        })
    '''
    Power transducer time constant (<i>Td</i>) (&gt;= 0).
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel system time constant (<i>Tf</i>) (&gt;= 0).
            '''

        })
    '''
    Fuel system time constant (<i>Tf</i>) (&gt;= 0).
    '''

    tmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Turbine limit (<i>Tmax</i>) (&gt; GovGASTWD.tmin).
            '''

        })
    '''
    Maximum Turbine limit (<i>Tmax</i>) (&gt; GovGASTWD.tmin).
    '''

    tmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum turbine limit (<i>Tmin</i>) (&lt; GovGASTWD.tmax).
            '''

        })
    '''
    Minimum turbine limit (<i>Tmin</i>) (&lt; GovGASTWD.tmax).
    '''

    tr: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated temperature (<i>Tr</i>).
            '''

        })
    '''
    Rated temperature (<i>Tr</i>).
    '''

    trate: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine rating (<i>Trate</i>). Unit = MW.
            '''

        })
    '''
    Turbine rating (<i>Trate</i>). Unit = MW.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature controller integration rate (<i>Tt</i>) (&gt;= 0).
            '''

        })
    '''
    Temperature controller integration rate (<i>Tt</i>) (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydro1(TurbineGovernorDynamics):
    '''
    Basic hydro turbine governor.
    '''

    velm: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate velocity (<i>Vlem</i>) (&gt; 0). Typical value = 0,2.
            '''

        })
    '''
    Maximum gate velocity (<i>Vlem</i>) (&gt; 0). Typical value = 0,2.
    '''

    at: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>At</i>) (&gt; 0). Typical value = 1,2.
            '''

        })
    '''
    Turbine gain (<i>At</i>) (&gt; 0). Typical value = 1,2.
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>) (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>) (&gt;= 0). Typical value = 0,5.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>Gmax</i>) (&gt; 0 and &gt; GovHydro.gmin). Typical
            value = 1.
            '''

        })
    '''
    Maximum gate opening (<i>Gmax</i>) (&gt; 0 and &gt; GovHydro.gmin).
    Typical value = 1.
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>Gmin</i>) (&gt;= 0 and &lt; GovHydro1.gmax). Typical
            value = 0.
            '''

        })
    '''
    Minimum gate opening (<i>Gmin</i>) (&gt;= 0 and &lt; GovHydro1.gmax).
    Typical value = 0.
    '''

    hdam: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine nominal head (<i>hdam</i>). Typical value = 1.
            '''

        })
    '''
    Turbine nominal head (<i>hdam</i>). Typical value = 1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    qnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load flow at nominal head (<i>qnl</i>) (&gt;= 0). Typical value = 0,08.
            '''

        })
    '''
    No-load flow at nominal head (<i>qnl</i>) (&gt;= 0). Typical value
    = 0,08.
    '''

    rperm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>) (&gt; 0). Typical value = 0,04.
            '''

        })
    '''
    Permanent droop (<i>R</i>) (&gt; 0). Typical value = 0,04.
    '''

    rtemp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temporary droop (<i>r</i>) (&gt; GovHydro1.rperm). Typical value = 0,3.
            '''

        })
    '''
    Temporary droop (<i>r</i>) (&gt; GovHydro1.rperm). Typical value =
    0,3.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant (<i>Tf</i>) (&gt; 0). Typical value = 0,05.
            '''

        })
    '''
    Filter time constant (<i>Tf</i>) (&gt; 0). Typical value = 0,05.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tr</i>) (&gt; 0). Typical value = 5.
            '''

        })
    '''
    Washout time constant (<i>Tr</i>) (&gt; 0). Typical value = 5.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydro2(TurbineGovernorDynamics):
    '''
    IEEE hydro turbine governor with straightforward penstock configuration
    and hydraulic-dashpot governor.
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s. Typical
            value = -0,1.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s.
    Typical value = -0,1.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Uo</i>). Unit = PU / s. Typical value
            = 0,1.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Uo</i>). Unit = PU / s. Typical value
    = 0,1.
    '''

    aturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine numerator multiplier (<i>Aturb</i>). Typical value = -1.
            '''

        })
    '''
    Turbine numerator multiplier (<i>Aturb</i>). Typical value = -1.
    '''

    bturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine denominator multiplier (<i>Bturb</i>) (&gt; 0). Typical value =
            0,5.
            '''

        })
    '''
    Turbine denominator multiplier (<i>Bturb</i>) (&gt; 0). Typical value
    = 0,5.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value =
    0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional deadband (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional deadband (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    kturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>Kturb</i>). Typical value = 1.
            '''

        })
    '''
    Turbine gain (<i>Kturb</i>). Typical value = 1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (P<i>gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (P<i>gv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>Pmax</i>) (&gt; GovHydro2.pmin). Typical value
            = 1.
            '''

        })
    '''
    Maximum gate opening (<i>Pmax</i>) (&gt; GovHydro2.pmin). Typical value
    = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>Pmin</i>) (&lt; GovHydro2.pmax). Typical value
            = 0.
            '''

        })
    '''
    Minimum gate opening (<i>Pmin</i>) (&lt; GovHydro2.pmax). Typical value
    = 0.
    '''

    rperm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>Rperm</i>). Typical value = 0,05.
            '''

        })
    '''
    Permanent droop (<i>Rperm</i>). Typical value = 0,05.
    '''

    rtemp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temporary droop (<i>Rtemp</i>). Typical value = 0,5.
            '''

        })
    '''
    Temporary droop (<i>Rtemp</i>). Typical value = 0,5.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pilot servo valve time constant (<i>Tp</i>) (&gt;= 0). Typical value =
            0,03.
            '''

        })
    '''
    Pilot servo valve time constant (<i>Tp</i>) (&gt;= 0). Typical value
    = 0,03.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 12.
            '''

        })
    '''
    Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 12.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value =
    2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydro3(TurbineGovernorDynamics):
    '''
    Modified IEEE hydro governor-turbine. This model differs from that defined
    in the IEEE modelling guideline paper in that the limits on gate position
    and velocity do not permit "wind up" of the upstream signals.
    '''

    governorControl: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor control flag (<i>Cflag</i>).
            true = PID control is active
            false = double derivative control is active.
            Typical value = true.
            '''

        })
    '''
    Governor control flag (<i>Cflag</i>).
    true = PID control is active
    false = double derivative control is active.
    Typical value = true.
    '''

    velcl: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical value
            = -0,2.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical
    value = -0,2.
    '''

    velop: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical value
            = 0,2.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical
    value = 0,2.
    '''

    at: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>At</i>) (&gt;0). Typical value = 1,2.
            '''

        })
    '''
    Turbine gain (<i>At</i>) (&gt;0). Typical value = 1,2.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>). Typical value = 0,2.
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>). Typical value = 0,2.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    h0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine nominal head (<i>H0</i>). Typical value = 1.
            '''

        })
    '''
    Turbine nominal head (<i>H0</i>). Typical value = 1.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (<i>K1</i>). Typical value = 0,01.
            '''

        })
    '''
    Derivative gain (<i>K1</i>). Typical value = 0,01.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Double derivative gain, if <i>Cflag</i> = -1 (<i>K2</i>). Typical value
            = 2,5.
            '''

        })
    '''
    Double derivative gain, if <i>Cflag</i> = -1 (<i>K2</i>). Typical value
    = 2,5.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo gain (<i>Kg</i>). Typical value = 2.
            '''

        })
    '''
    Gate servo gain (<i>Kg</i>). Typical value = 2.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain (<i>Ki</i>). Typical value = 0,5.
            '''

        })
    '''
    Integral gain (<i>Ki</i>). Typical value = 0,5.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening, PU of MWbase (<i>Pmax</i>) (&gt; GovHydro3.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum gate opening, PU of MWbase (<i>Pmax</i>) (&gt; GovHydro3.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovHydro3.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovHydro3.pmax).
    Typical value = 0.
    '''

    qnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load turbine flow at nominal head (<i>Qnl</i>). Typical value = 0,08.
            '''

        })
    '''
    No-load turbine flow at nominal head (<i>Qnl</i>). Typical value =
    0,08.
    '''

    relec: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady-state droop, PU, for electrical power feedback (<i>Relec</i>). Typical
            value = 0,05.
            '''

        })
    '''
    Steady-state droop, PU, for electrical power feedback (<i>Relec</i>).
    Typical value = 0,05.
    '''

    rgate: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady-state droop, PU, for governor output feedback (<i>Rgate</i>). Typical
            value = 0.
            '''

        })
    '''
    Steady-state droop, PU, for governor output feedback (<i>Rgate</i>).
    Typical value = 0.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input filter time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Input filter time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,05.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Gate servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,05.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power feedback time constant (<i>Tt</i>) (&gt;= 0). Typical value = 0,2.
            '''

        })
    '''
    Power feedback time constant (<i>Tt</i>) (&gt;= 0). Typical value =
    0,2.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydro4(TurbineGovernorDynamics):
    '''
    Hydro turbine and governor. Represents plants with straight-forward penstock
    configurations and hydraulic governors of the traditional 'dashpot' type.
    This model can be used to represent simple, Francis/Pelton or Kaplan turbines.
    '''

    bmax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum blade adjustment factor (<i>Bmax</i>) (= 0 for simple, = 0 for
            Francis/Pelton). Typical value for Kaplan = 1,1276.
            '''

        })
    '''
    Maximum blade adjustment factor (<i>Bmax</i>) (= 0 for simple, = 0
    for Francis/Pelton). Typical value for Kaplan = 1,1276.
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Max gate closing velocity (<i>Uc</i>). Typical value = 0,2.
            '''

        })
    '''
    Max gate closing velocity (<i>Uc</i>). Typical value = 0,2.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Max gate opening velocity (<i>Uo</i>). Typical value = 0,2.
            '''

        })
    '''
    Max gate opening velocity (<i>Uo</i>). Typical value = 0,2.
    '''

    at: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>At</i>). Typical value = 1,2.
            '''

        })
    '''
    Turbine gain (<i>At</i>). Typical value = 1,2.
    '''

    bgv0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 0 (<i>Bgv0</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 0.
            '''

        })
    '''
    Kaplan blade servo point 0 (<i>Bgv0</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 0.
    '''

    bgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 1 (<i>Bgv1</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 0.
            '''

        })
    '''
    Kaplan blade servo point 1 (<i>Bgv1</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 0.
    '''

    bgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 2 (<i>Bgv2</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 0,1.
            '''

        })
    '''
    Kaplan blade servo point 2 (<i>Bgv2</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 0,1.
    '''

    bgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 3 (<i>Bgv3</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 0,667.
            '''

        })
    '''
    Kaplan blade servo point 3 (<i>Bgv3</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 0,667.
    '''

    bgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 4 (<i>Bgv4</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 0,9.
            '''

        })
    '''
    Kaplan blade servo point 4 (<i>Bgv4</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 0,9.
    '''

    bgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kaplan blade servo point 5 (<i>Bgv5</i>) (= 0 for simple, = 0 for Francis/Pelton).
            Typical value for Kaplan = 1.
            '''

        })
    '''
    Kaplan blade servo point 5 (<i>Bgv5</i>) (= 0 for simple, = 0 for Francis/Pelton).
    Typical value for Kaplan = 1.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value =
    0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>). Unit = delta P (PU of <i>MWbase</i>)
            / delta speed (PU). Typical value for simple = 0,5, Francis/Pelton = 1,1,
            Kaplan = 1,1.
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>). Unit = delta P (PU of <i>MWbase</i>)
    / delta speed (PU). Typical value for simple = 0,5, Francis/Pelton
    = 1,1, Kaplan = 1,1.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening, PU of <i>MWbase</i> (<i>Gmax</i>) (&gt; GovHydro4.gmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum gate opening, PU of <i>MWbase</i> (<i>Gmax</i>) (&gt; GovHydro4.gmin).
    Typical value = 1.
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening, PU of <i>MWbase</i> (<i>Gmin</i>) (&lt; GovHydro4.gmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum gate opening, PU of <i>MWbase</i> (<i>Gmin</i>) (&lt; GovHydro4.gmax).
    Typical value = 0.
    '''

    gv0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 0, PU gv (<i>Gv0</i>) (= 0 for simple). Typical for
            Francis/Pelton = 0,1, Kaplan = 0,1.
            '''

        })
    '''
    Nonlinear gain point 0, PU gv (<i>Gv0</i>) (= 0 for simple). Typical
    for Francis/Pelton = 0,1, Kaplan = 0,1.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>) (= 0 for simple, &gt; GovHydro4.gv0
            for Francis/Pelton and Kaplan). Typical value for Francis/Pelton = 0,4,
            Kaplan = 0,4.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>) (= 0 for simple, &gt; GovHydro4.gv0
    for Francis/Pelton and Kaplan). Typical value for Francis/Pelton =
    0,4, Kaplan = 0,4.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>) (= 0 for simple, &gt; GovHydro4.gv1
            for Francis/Pelton and Kaplan). Typical value for Francis/Pelton = 0,5,
            Kaplan = 0,5.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>) (= 0 for simple, &gt; GovHydro4.gv1
    for Francis/Pelton and Kaplan). Typical value for Francis/Pelton =
    0,5, Kaplan = 0,5.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>) (= 0 for simple, &gt; GovHydro4.gv2
            for Francis/Pelton and Kaplan). Typical value for Francis/Pelton = 0,7,
            Kaplan = 0,7.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>) (= 0 for simple, &gt; GovHydro4.gv2
    for Francis/Pelton and Kaplan). Typical value for Francis/Pelton =
    0,7, Kaplan = 0,7.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>) (= 0 for simple, &gt; GovHydro4.gv3
            for Francis/Pelton and Kaplan). Typical value for Francis/Pelton = 0,8,
            Kaplan = 0,8.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>) (= 0 for simple, &gt; GovHydro4.gv3
    for Francis/Pelton and Kaplan). Typical value for Francis/Pelton =
    0,8, Kaplan = 0,8.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>) (= 0 for simple, &lt; 1 and
            &gt; GovHydro4.gv4 for Francis/Pelton and Kaplan). Typical value for Francis/Pelton
            = 0,9, Kaplan = 0,9.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>) (= 0 for simple, &lt; 1
    and &gt; GovHydro4.gv4 for Francis/Pelton and Kaplan). Typical value
    for Francis/Pelton = 0,9, Kaplan = 0,9.
    '''

    hdam: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head available at dam (<i>hdam</i>). Typical value = 1.
            '''

        })
    '''
    Head available at dam (<i>hdam</i>). Typical value = 1.
    '''

    model: Optional[ GovHydro4ModelKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of model being represented (simple, Francis/Pelton or Kaplan).
            '''

        })
    '''
    The kind of model being represented (simple, Francis/Pelton or Kaplan).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 0, PU power (<i>Pgv0</i>) (= 0 for simple). Typical
            value = 0.
            '''

        })
    '''
    Nonlinear gain point 0, PU power (<i>Pgv0</i>) (= 0 for simple). Typical
    value = 0.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>) (= 0 for simple).
            Typical value for Francis/Pelton = 0,42, Kaplan = 0,35.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>) (= 0 for simple).
    Typical value for Francis/Pelton = 0,42, Kaplan = 0,35.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>) (= 0 for simple).
            Typical value for Francis/Pelton = 0,56, Kaplan = 0,468.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>) (= 0 for simple).
    Typical value for Francis/Pelton = 0,56, Kaplan = 0,468.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>) (= 0 for simple).
            Typical value for Francis/Pelton = 0,8, Kaplan = 0,796.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>) (= 0 for simple).
    Typical value for Francis/Pelton = 0,8, Kaplan = 0,796.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>) (= 0 for simple).
            Typical value for Francis/Pelton = 0,9, Kaplan = 0,917.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>) (= 0 for simple).
    Typical value for Francis/Pelton = 0,9, Kaplan = 0,917.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>) (= 0 for simple).
            Typical value for Francis/Pelton = 0,97, Kaplan = 0,99.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>) (= 0 for simple).
    Typical value for Francis/Pelton = 0,97, Kaplan = 0,99.
    '''

    qnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load flow at nominal head (<i>Qnl</i>).
            Typical value for simple = 0,08, Francis/Pelton = 0, Kaplan = 0.
            '''

        })
    '''
    No-load flow at nominal head (<i>Qnl</i>).
    Typical value for simple = 0,08, Francis/Pelton = 0, Kaplan = 0.
    '''

    rperm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>Rperm</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Permanent droop (<i>Rperm</i>) (&gt;= 0). Typical value = 0,05.
    '''

    rtemp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temporary droop (<i>Rtemp</i>) (&gt;= 0). Typical value = 0,3.
            '''

        })
    '''
    Temporary droop (<i>Rtemp</i>) (&gt;= 0). Typical value = 0,3.
    '''

    tblade: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Blade servo time constant (<i>Tblade</i>) (&gt;= 0). Typical value = 100.
            '''

        })
    '''
    Blade servo time constant (<i>Tblade</i>) (&gt;= 0). Typical value
    = 100.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Gate servo time constant (<i>Tg</i>) (&gt; 0). Typical value = 0,5.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pilot servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Pilot servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 5.
            '''

        })
    '''
    Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 5.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroDD(TurbineGovernorDynamics):
    '''
    Double derivative hydro governor and turbine.
    '''

    inputSignal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal switch (<i>Flag</i>).
            true = <i>Pe</i> input is used
            false = feedback is received from <i>CV</i>.
            <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt</i> is zero, <i>Flag</i>
            is set to false. If <i>Tt</i> is not zero, <i>Flag</i> is set to true.
            Typical value = true.
            '''

        })
    '''
    Input signal switch (<i>Flag</i>).
    true = <i>Pe</i> input is used
    false = feedback is received from <i>CV</i>.
    <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt</i> is zero,
    <i>Flag</i> is set to false. If <i>Tt</i> is not zero, <i>Flag</i>
    is set to true.
    Typical value = true.
    '''

    velcl: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical value
            = -0,14.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical
    value = -0,14.
    '''

    velop: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical value
            = 0,09.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical
    value = 0,09.
    '''

    aturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine numerator multiplier (<i>Aturb</i>) (see parameter detail 3). Typical
            value = -1.
            '''

        })
    '''
    Turbine numerator multiplier (<i>Aturb</i>) (see parameter detail 3).
    Typical value = -1.
    '''

    bturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine denominator multiplier (<i>Bturb</i>) (see parameter detail 3).
            Typical value = 0,5.
            '''

        })
    '''
    Turbine denominator multiplier (<i>Bturb</i>) (see parameter detail
    3). Typical value = 0,5.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>Gmax</i>) (&gt; GovHydroDD.gmin). Typical value
            = 0.
            '''

        })
    '''
    Maximum gate opening (<i>Gmax</i>) (&gt; GovHydroDD.gmin). Typical
    value = 0.
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>Gmin</i>) (&lt; GovHydroDD.gmax). Typical value
            = 0.
            '''

        })
    '''
    Minimum gate opening (<i>Gmin</i>) (&lt; GovHydroDD.gmax). Typical
    value = 0.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Single derivative gain (<i>K1</i>). Typical value = 3,6.
            '''

        })
    '''
    Single derivative gain (<i>K1</i>). Typical value = 3,6.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Double derivative gain (<i>K2</i>). Typical value = 0,2.
            '''

        })
    '''
    Double derivative gain (<i>K2</i>). Typical value = 0,2.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo gain (<i>Kg</i>). Typical value = 3.
            '''

        })
    '''
    Gate servo gain (<i>Kg</i>). Typical value = 3.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain (<i>Ki</i>). Typical value = 1.
            '''

        })
    '''
    Integral gain (<i>Ki</i>). Typical value = 1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt;0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt;0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovHydroDD.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum gate opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovHydroDD.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&gt; GovHydroDD.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&gt; GovHydroDD.pmax).
    Typical value = 0.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady state droop (<i>R</i>). Typical value = 0,05.
            '''

        })
    '''
    Steady state droop (<i>R</i>). Typical value = 0,05.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input filter time constant (<i>Td</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0.
            '''

        })
    '''
    Input filter time constant (<i>Td</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 0.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tp</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,35.
            '''

        })
    '''
    Gate servo time constant (<i>Tp</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0,35.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power feedback time constant (<i>Tt</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,02.
            '''

        })
    '''
    Power feedback time constant (<i>Tt</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 0,02.
    '''

    tturb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine time constant (<i>Tturb</i>) (&gt;= 0). See parameter detail 3.
            Typical value = 0,8.
            '''

        })
    '''
    Turbine time constant (<i>Tturb</i>) (&gt;= 0). See parameter detail
    3. Typical value = 0,8.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroFrancis(TurbineGovernorDynamics):
    '''
    Detailed hydro unit - Francis model. This model can be used to represent
    three types of governors.
    A schematic of the hydraulic system of detailed hydro unit models, such
    as Francis and Pelton, is provided in the DetailedHydroModelHydraulicSystem
    diagram.
    '''

    va: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Va</i>). Unit = PU / s. Typical value
            = 0,06.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Va</i>). Unit = PU / s. Typical value
    = 0,06.
    '''

    vc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Vc</i>). Unit = PU / s. Typical value
            = -0,06.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Vc</i>). Unit = PU / s. Typical value
    = -0,06.
    '''

    waterTunnelSurgeChamberSimulation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber simulation (<i>Tflag</i>).
            true = enable of water tunnel and surge chamber simulation
            false = inhibit of water tunnel and surge chamber simulation.
            Typical value = false.
            '''

        })
    '''
    Water tunnel and surge chamber simulation (<i>Tflag</i>).
    true = enable of water tunnel and surge chamber simulation
    false = inhibit of water tunnel and surge chamber simulation.
    Typical value = false.
    '''

    am: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Opening section <i>S</i><i><sub>EFF</sub></i> at the maximum efficiency
            (<i>Am</i>). Typical value = 0,7.
            '''

        })
    '''
    Opening section <i>S</i><i><sub>EFF</sub></i> at the maximum efficiency
    (<i>Am</i>). Typical value = 0,7.
    '''

    av0: Optional[ float | Area ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Area of the surge tank (<i>A</i><i><sub>V0</sub></i>). Unit = m<sup>2</sup>.
            Typical value = 30.
            '''

        })
    '''
    Area of the surge tank (<i>A</i><i><sub>V0</sub></i>). Unit = m<sup>2</sup>.
    Typical value = 30.
    '''

    av1: Optional[ float | Area ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Area of the compensation tank (<i>A</i><i><sub>V1</sub></i>). Unit = m<sup>2</sup>.
            Typical value = 700.
            '''

        })
    '''
    Area of the compensation tank (<i>A</i><i><sub>V1</sub></i>). Unit
    = m<sup>2</sup>. Typical value = 700.
    '''

    bp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Droop (<i>Bp</i>). Typical value = 0,05.
            '''

        })
    '''
    Droop (<i>Bp</i>). Typical value = 0,05.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>DB1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>DB1</i>). Unit = Hz. Typical value
    = 0.
    '''

    etamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum efficiency (<i>EtaMax</i>). Typical value = 1,05.
            '''

        })
    '''
    Maximum efficiency (<i>EtaMax</i>). Typical value = 1,05.
    '''

    governorControl: Optional[ FrancisGovernorControlKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor control flag (<i>Cflag</i>). Typical value = mechanicHydrolicTachoAccelerator.
            '''

        })
    '''
    Governor control flag (<i>Cflag</i>). Typical value = mechanicHydrolicTachoAccelerator.
    '''

    h1: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of compensation chamber water level with respect to the level of penstock
            (<i>H</i><i><sub>1</sub></i>). Unit = km. Typical value = 0,004.
            '''

        })
    '''
    Head of compensation chamber water level with respect to the level
    of penstock (<i>H</i><i><sub>1</sub></i>). Unit = km. Typical value
    = 0,004.
    '''

    h2: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of surge tank water level with respect to the level of penstock (<i>H</i><i><sub>2</sub></i>).
            Unit = km. Typical value = 0,040.
            '''

        })
    '''
    Head of surge tank water level with respect to the level of penstock
    (<i>H</i><i><sub>2</sub></i>). Unit = km. Typical value = 0,040.
    '''

    hn: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated hydraulic head (<i>H</i><i><sub>n</sub></i>). Unit = km. Typical
            value = 0,250.
            '''

        })
    '''
    Rated hydraulic head (<i>H</i><i><sub>n</sub></i>). Unit = km. Typical
    value = 0,250.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Penstock loss coefficient (due to friction) (<i>Kc</i>). Typical value
            = 0,025.
            '''

        })
    '''
    Penstock loss coefficient (due to friction) (<i>Kc</i>). Typical value
    = 0,025.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber loss coefficient (due to friction) (<i>Kg</i>).
            Typical value = 0,025.
            '''

        })
    '''
    Water tunnel and surge chamber loss coefficient (due to friction) (<i>Kg</i>).
    Typical value = 0,025.
    '''

    kt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout gain (<i>Kt</i>). Typical value = 0,25.
            '''

        })
    '''
    Washout gain (<i>Kt</i>). Typical value = 0,25.
    '''

    qc0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load turbine flow at nominal head (<i>Qc0</i>). Typical value = 0,1.
            '''

        })
    '''
    No-load turbine flow at nominal head (<i>Qc0</i>). Typical value =
    0,1.
    '''

    qn: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated flow (<i>Q</i><i><sub>n</sub></i>). Unit = m<sup>3</sup>/s. Typical
            value = 250.
            '''

        })
    '''
    Rated flow (<i>Q</i><i><sub>n</sub></i>). Unit = m<sup>3</sup>/s. Typical
    value = 250.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (<i>Ta</i>) (&gt;= 0). Typical value = 3.
            '''

        })
    '''
    Derivative gain (<i>Ta</i>) (&gt;= 0). Typical value = 3.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Td</i>) (&gt;= 0). Typical value = 6.
            '''

        })
    '''
    Washout time constant (<i>Td</i>) (&gt;= 0). Typical value = 6.
    '''

    ts: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Gate servo time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0,5.
    '''

    twnc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Twnc</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Twnc</i>) (&gt;= 0). Typical value
    = 1.
    '''

    twng: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber inertia time constant (<i>Twng</i>) (&gt;=
            0). Typical value = 3.
            '''

        })
    '''
    Water tunnel and surge chamber inertia time constant (<i>Twng</i>)
    (&gt;= 0). Typical value = 3.
    '''

    tx: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative feedback gain (<i>Tx</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Derivative feedback gain (<i>Tx</i>) (&gt;= 0). Typical value = 1.
    '''

    valvmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>ValvMax</i>) (&gt; GovHydroFrancis.valvmin). Typical
            value = 1,1.
            '''

        })
    '''
    Maximum gate opening (<i>ValvMax</i>) (&gt; GovHydroFrancis.valvmin).
    Typical value = 1,1.
    '''

    valvmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>ValvMin</i>) (&lt; GovHydroFrancis.valvmax). Typical
            value = 0.
            '''

        })
    '''
    Minimum gate opening (<i>ValvMin</i>) (&lt; GovHydroFrancis.valvmax).
    Typical value = 0.
    '''

    zsfc: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of upper water level with respect to the level of penstock (<i>Zsfc</i>).
            Unit = km. Typical value = 0,025.
            '''

        })
    '''
    Head of upper water level with respect to the level of penstock (<i>Zsfc</i>).
    Unit = km. Typical value = 0,025.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroIEEE0(TurbineGovernorDynamics):
    '''
    IEEE simplified hydro governor-turbine model. Used for mechanical-hydraulic
    and electro-hydraulic turbine governors, with or without steam feedback.
    Typical values given are for mechanical-hydraulic turbine-governor.
    Ref<font color="#0f0f0f">erence: IEEE Transactions on Power Apparatus and
    Systems, November/December 1973, Volume PAS-92, Number 6, <i><u>Dynamic
    Models for Steam and Hydro Turbines in Power System Studies</u></i>, page
    1904.</font>
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (<i>K)</i>.
            '''

        })
    '''
    Governor gain (<i>K)</i>.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate maximum (<i>Pmax</i>) (&gt; GovHydroIEEE0.pmin).
            '''

        })
    '''
    Gate maximum (<i>Pmax</i>) (&gt; GovHydroIEEE0.pmin).
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate minimum (<i>Pmin</i>) (&lt; GovHydroIEEE.pmax).
            '''

        })
    '''
    Gate minimum (<i>Pmin</i>) (&lt; GovHydroIEEE.pmax).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,25.
            '''

        })
    '''
    Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0,25.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T2)</i> (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T2)</i> (&gt;= 0). Typical value =
    0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate actuator time constant (<i>T3</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Gate actuator time constant (<i>T3</i>) (&gt;= 0). Typical value =
    0,1.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water starting time (<i>T4</i>) (&gt;= 0).
            '''

        })
    '''
    Water starting time (<i>T4</i>) (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroIEEE2(TurbineGovernorDynamics):
    '''
    IEEE hydro turbine governor model represents plants with straightforward
    penstock configurations and hydraulic-dashpot governors.
    Ref<font color="#0f0f0f">erence: IEEE Transactions on Power Apparatus and
    Systems, November/December 1973, Volume PAS-92, Number 6, <i><u>Dynamic
    Models for Steam and Hydro Turbines in Power System Studies</u></i>, page
    1904.</font>
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Uc</i>) (&lt;0). Typical value = -0,1.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Uc</i>) (&lt;0). Typical value =
    -0,1.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Uo</i>). Unit = PU / s. Typical value
            = 0,1.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Uo</i>). Unit = PU / s. Typical value
    = 0,1.
    '''

    aturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine numerator multiplier (<i>Aturb</i>). Typical value = -1.
            '''

        })
    '''
    Turbine numerator multiplier (<i>Aturb</i>). Typical value = -1.
    '''

    bturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine denominator multiplier (<i>Bturb</i>) (&gt; 0). Typical value =
            0,5.
            '''

        })
    '''
    Turbine denominator multiplier (<i>Bturb</i>) (&gt; 0). Typical value
    = 0,5.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    kturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>Kturb</i>). Typical value = 1.
            '''

        })
    '''
    Turbine gain (<i>Kturb</i>). Typical value = 1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>Pmax</i>) (&gt; GovHydroIEEE2.pmin). Typical value
            = 1.
            '''

        })
    '''
    Maximum gate opening (<i>Pmax</i>) (&gt; GovHydroIEEE2.pmin). Typical
    value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>Pmin</i>) (&lt;GovHydroIEEE2.pmax). Typical value
            = 0.
            '''

        })
    '''
    Minimum gate opening (<i>Pmin</i>) (&lt;GovHydroIEEE2.pmax). Typical
    value = 0.
    '''

    rperm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>Rperm</i>). Typical value = 0,05.
            '''

        })
    '''
    Permanent droop (<i>Rperm</i>). Typical value = 0,05.
    '''

    rtemp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temporary droop (<i>Rtemp</i>). Typical value = 0,5.
            '''

        })
    '''
    Temporary droop (<i>Rtemp</i>). Typical value = 0,5.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tg</i>) (&gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Gate servo time constant (<i>Tg</i>) (&gt;= 0). Typical value = 0,5.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pilot servo valve time constant (<i>Tp</i>) (&gt;= 0). Typical value =
            0,03.
            '''

        })
    '''
    Pilot servo valve time constant (<i>Tp</i>) (&gt;= 0). Typical value
    = 0,03.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 12.
            '''

        })
    '''
    Dashpot time constant (<i>Tr</i>) (&gt;= 0). Typical value = 12.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value = 2.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value =
    2.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroPID(TurbineGovernorDynamics):
    '''
    PID governor and turbine.
    '''

    inputSignal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal switch (<i>Flag</i>).
            true = <i>Pe</i> input is used
            false = feedback is received from <i>CV</i>.
            <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt </i>is zero, <i>Flag</i>
            is set to false. If <i>Tt</i> is not zero, <i>Flag</i> is set to true.
            Typical value = true.
            '''

        })
    '''
    Input signal switch (<i>Flag</i>).
    true = <i>Pe</i> input is used
    false = feedback is received from <i>CV</i>.
    <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt </i>is zero,
    <i>Flag</i> is set to false. If <i>Tt</i> is not zero, <i>Flag</i>
    is set to true.
    Typical value = true.
    '''

    velcl: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical value
            = -0,14.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical
    value = -0,14.
    '''

    velop: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical value
            = 0,09.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical
    value = 0,09.
    '''

    aturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine numerator multiplier (<i>Aturb</i>) (see parameter detail 3). Typical
            value -1.
            '''

        })
    '''
    Turbine numerator multiplier (<i>Aturb</i>) (see parameter detail 3).
    Typical value -1.
    '''

    bturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine denominator multiplier (<i>Bturb</i>) (see parameter detail 3).
            Typical value = 0,5.
            '''

        })
    '''
    Turbine denominator multiplier (<i>Bturb</i>) (see parameter detail
    3). Typical value = 0,5.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (<i>Kd</i>). Typical value = 1,11.
            '''

        })
    '''
    Derivative gain (<i>Kd</i>). Typical value = 1,11.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo gain (<i>Kg</i>). Typical value = 2,5.
            '''

        })
    '''
    Gate servo gain (<i>Kg</i>). Typical value = 2,5.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain (<i>Ki</i>). Typical value = 0,36.
            '''

        })
    '''
    Integral gain (<i>Ki</i>). Typical value = 0,36.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain (<i>Kp</i>). Typical value = 0,1.
            '''

        })
    '''
    Proportional gain (<i>Kp</i>). Typical value = 0,1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening, PU of MWbase (<i>Pmax</i>) (&gt; GovHydroPID.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum gate opening, PU of MWbase (<i>Pmax</i>) (&gt; GovHydroPID.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening, PU of MWbase (<i>Pmin</i>) (&lt; GovHydroPID.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum gate opening, PU of MWbase (<i>Pmin</i>) (&lt; GovHydroPID.pmax).
    Typical value = 0.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady state droop (<i>R</i>). Typical value = 0,05.
            '''

        })
    '''
    Steady state droop (<i>R</i>). Typical value = 0,05.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input filter time constant (<i>Td</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0.
            '''

        })
    '''
    Input filter time constant (<i>Td</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 0.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Washout time constant (<i>Tf</i>) (&gt;= 0). Typical value = 0,1.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tp</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,35.
            '''

        })
    '''
    Gate servo time constant (<i>Tp</i>) (&gt;= 0). If = 0, block is bypassed.
    Typical value = 0,35.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power feedback time constant (<i>Tt</i>) (&gt;= 0). If = 0, block is bypassed.
            Typical value = 0,02.
            '''

        })
    '''
    Power feedback time constant (<i>Tt</i>) (&gt;= 0). If = 0, block is
    bypassed. Typical value = 0,02.
    '''

    tturb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine time constant (<i>Tturb</i>) (&gt;= 0). See Parameter detail 3.
            Typical value = 0,8.
            '''

        })
    '''
    Turbine time constant (<i>Tturb</i>) (&gt;= 0). See Parameter detail
    3. Typical value = 0,8.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroPID2(TurbineGovernorDynamics):
    '''
    Hydro turbine and governor. Represents plants with straightforward penstock
    configurations and "three term" electro-hydraulic governors (i.e. Woodward<sup>TM</sup>
    electronic).
    [Footnote: Woodward electronic governors are an example of suitable products
    available commercially. This information is given for the convenience of
    users of this document and does not constitute an endorsement by IEC of
    these products.]
    '''

    feedbackSignal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback signal type flag (<i>Flag</i>).
            true = use gate position feedback signal
            false = use Pe.
            '''

        })
    '''
    Feedback signal type flag (<i>Flag</i>).
    true = use gate position feedback signal
    false = use Pe.
    '''

    ki: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reset gain (<i>Ki</i>). Unit = PU/s. Typical value = 0.
            '''

        })
    '''
    Reset gain (<i>Ki</i>). Unit = PU/s. Typical value = 0.
    '''

    velmax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velmax</i>) (&lt; GovHydroPID2.velmin).
            Unit = PU / s. Typical value = 0.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velmax</i>) (&lt; GovHydroPID2.velmin).
    Unit = PU / s. Typical value = 0.
    '''

    velmin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velmin</i>) (&gt; GovHydroPID2.velmax).
            Unit = PU / s. Typical value = 0.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velmin</i>) (&gt; GovHydroPID2.velmax).
    Unit = PU / s. Typical value = 0.
    '''

    atw: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Factor multiplying <i>Tw</i> (<i>Atw</i>). Typical value = 0.
            '''

        })
    '''
    Factor multiplying <i>Tw</i> (<i>Atw</i>). Typical value = 0.
    '''

    d: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>D</i>). Unit = delta P / delta speed. Typical
            value = 0.
            '''

        })
    '''
    Turbine damping factor (<i>D</i>). Unit = delta P / delta speed. Typical
    value = 0.
    '''

    g0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate opening at speed no load (<i>G0</i>). Typical value = 0.
            '''

        })
    '''
    Gate opening at speed no load (<i>G0</i>). Typical value = 0.
    '''

    g1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate gate opening (<i>G1</i>). Typical value = 0.
            '''

        })
    '''
    Intermediate gate opening (<i>G1</i>). Typical value = 0.
    '''

    g2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate gate opening (<i>G2</i>). Typical value = 0.
            '''

        })
    '''
    Intermediate gate opening (<i>G2</i>). Typical value = 0.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>Gmax</i>) (&gt; GovHydroPID2.gmin). Typical value
            = 0.
            '''

        })
    '''
    Maximum gate opening (<i>Gmax</i>) (&gt; GovHydroPID2.gmin). Typical
    value = 0.
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>Gmin</i>) (&gt; GovHydroPID2.gmax). Typical value
            = 0.
            '''

        })
    '''
    Minimum gate opening (<i>Gmin</i>) (&gt; GovHydroPID2.gmax). Typical
    value = 0.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (<i>Kd</i>). Typical value = 0.
            '''

        })
    '''
    Derivative gain (<i>Kd</i>). Typical value = 0.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain (<i>Kp</i>). Typical value = 0.
            '''

        })
    '''
    Proportional gain (<i>Kp</i>). Typical value = 0.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt;0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt;0). Unit = MW.
    '''

    p1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power at gate opening <i>G1</i> (<i>P1</i>). Typical value = 0.
            '''

        })
    '''
    Power at gate opening <i>G1</i> (<i>P1</i>). Typical value = 0.
    '''

    p2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power at gate opening G2 (<i>P2</i>). Typical value = 0.
            '''

        })
    '''
    Power at gate opening G2 (<i>P2</i>). Typical value = 0.
    '''

    p3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power at full opened gate (<i>P3</i>). Typical value = 0.
            '''

        })
    '''
    Power at full opened gate (<i>P3</i>). Typical value = 0.
    '''

    rperm: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent drop (<i>Rperm</i>). Typical value = 0.
            '''

        })
    '''
    Permanent drop (<i>Rperm</i>). Typical value = 0.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Controller time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tb</i>) (&gt; 0).
            '''

        })
    '''
    Gate servo time constant (<i>Tb</i>) (&gt; 0).
    '''

    treg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed detector time constant (<i>Treg</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Speed detector time constant (<i>Treg</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value =
    0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroPelton(TurbineGovernorDynamics):
    '''
    Detailed hydro unit - Pelton model. This model can be used to represent
    the dynamic related to water tunnel and surge chamber.
    The DetailedHydroModelHydraulicSystem diagram, located under the GovHydroFrancis
    class, provides a schematic of the hydraulic system of detailed hydro unit
    models, such as Francis and Pelton.
    '''

    simplifiedPelton: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Simplified Pelton model simulation (<i>Sflag</i>).
            true = enable of simplified Pelton model simulation
            false = enable of complete Pelton model simulation (non-linear gain).
            Typical value = true.
            '''

        })
    '''
    Simplified Pelton model simulation (<i>Sflag</i>).
    true = enable of simplified Pelton model simulation
    false = enable of complete Pelton model simulation (non-linear gain).
    Typical value = true.
    '''

    staticCompensating: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Static compensating characteristic (<i>Cflag</i>). It should be true if
            simplifiedPelton = false.
            true = enable of static compensating characteristic
            false = inhibit of static compensating characteristic.
            Typical value = false.
            '''

        })
    '''
    Static compensating characteristic (<i>Cflag</i>). It should be true
    if simplifiedPelton = false.
    true = enable of static compensating characteristic
    false = inhibit of static compensating characteristic.
    Typical value = false.
    '''

    va: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Va</i>). Unit = PU / s. Typical value
            = 0,06.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Va</i>). Unit = PU / s. Typical value
    = 0,06.
    '''

    vc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Vc</i>). Unit = PU / s. Typical value
            = -0,06.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Vc</i>). Unit = PU / s. Typical value
    = -0,06.
    '''

    waterTunnelSurgeChamberSimulation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber simulation (<i>Tflag</i>).
            true = enable of water tunnel and surge chamber simulation
            false = inhibit of water tunnel and surge chamber simulation.
            Typical value = false.
            '''

        })
    '''
    Water tunnel and surge chamber simulation (<i>Tflag</i>).
    true = enable of water tunnel and surge chamber simulation
    false = inhibit of water tunnel and surge chamber simulation.
    Typical value = false.
    '''

    av0: Optional[ float | Area ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Area of the surge tank (<i>A</i><i><sub>V0</sub></i>). Unit = m<sup>2</sup>.
            Typical value = 30.
            '''

        })
    '''
    Area of the surge tank (<i>A</i><i><sub>V0</sub></i>). Unit = m<sup>2</sup>.
    Typical value = 30.
    '''

    av1: Optional[ float | Area ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Area of the compensation tank (<i>A</i><i><sub>V1</sub></i>). Unit = m<sup>2</sup>.
            Typical value = 700.
            '''

        })
    '''
    Area of the compensation tank (<i>A</i><i><sub>V1</sub></i>). Unit
    = m<sup>2</sup>. Typical value = 700.
    '''

    bp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Droop (<i>bp</i>). Typical value = 0,05.
            '''

        })
    '''
    Droop (<i>bp</i>). Typical value = 0,05.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>DB1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>DB1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width of valve opening error (<i>DB2</i>). Unit =
            Hz. Typical value = 0,01.
            '''

        })
    '''
    Intentional dead-band width of valve opening error (<i>DB2</i>). Unit
    = Hz. Typical value = 0,01.
    '''

    h1: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of compensation chamber water level with respect to the level of penstock
            (<i>H</i><i><sub>1</sub></i>). Unit = km. Typical value = 0,004.
            '''

        })
    '''
    Head of compensation chamber water level with respect to the level
    of penstock (<i>H</i><i><sub>1</sub></i>). Unit = km. Typical value
    = 0,004.
    '''

    h2: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of surge tank water level with respect to the level of penstock (<i>H</i><i><sub>2</sub></i>).
            Unit = km. Typical value = 0,040.
            '''

        })
    '''
    Head of surge tank water level with respect to the level of penstock
    (<i>H</i><i><sub>2</sub></i>). Unit = km. Typical value = 0,040.
    '''

    hn: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated hydraulic head (<i>H</i><i><sub>n</sub></i>). Unit = km. Typical
            value = 0,250.
            '''

        })
    '''
    Rated hydraulic head (<i>H</i><i><sub>n</sub></i>). Unit = km. Typical
    value = 0,250.
    '''

    kc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Penstock loss coefficient (due to friction) (<i>Kc</i>). Typical value
            = 0,025.
            '''

        })
    '''
    Penstock loss coefficient (due to friction) (<i>Kc</i>). Typical value
    = 0,025.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber loss coefficient (due to friction) (<i>Kg</i>).
            Typical value = 0,025.
            '''

        })
    '''
    Water tunnel and surge chamber loss coefficient (due to friction) (<i>Kg</i>).
    Typical value = 0,025.
    '''

    qc0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load turbine flow at nominal head (<i>Qc0</i>). Typical value = 0,05.
            '''

        })
    '''
    No-load turbine flow at nominal head (<i>Qc0</i>). Typical value =
    0,05.
    '''

    qn: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated flow (<i>Q</i><i><sub>n</sub></i>). Unit = m<sup>3</sup>/s. Typical
            value = 250.
            '''

        })
    '''
    Rated flow (<i>Q</i><i><sub>n</sub></i>). Unit = m<sup>3</sup>/s. Typical
    value = 250.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (accelerometer time constant) (<i>Ta</i>) (&gt;= 0). Typical
            value = 3.
            '''

        })
    '''
    Derivative gain (accelerometer time constant) (<i>Ta</i>) (&gt;= 0).
    Typical value = 3.
    '''

    ts: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0,15.
            '''

        })
    '''
    Gate servo time constant (<i>Ts</i>) (&gt;= 0). Typical value = 0,15.
    '''

    tv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Servomotor integrator time constant (<i>Tv</i>) (&gt;= 0). Typical value
            = 0,3.
            '''

        })
    '''
    Servomotor integrator time constant (<i>Tv</i>) (&gt;= 0). Typical
    value = 0,3.
    '''

    twnc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Twnc</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Twnc</i>) (&gt;= 0). Typical value
    = 1.
    '''

    twng: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water tunnel and surge chamber inertia time constant (<i>Twng</i>) (&gt;=
            0). Typical value = 3.
            '''

        })
    '''
    Water tunnel and surge chamber inertia time constant (<i>Twng</i>)
    (&gt;= 0). Typical value = 3.
    '''

    tx: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electronic integrator time constant (<i>Tx</i>) (&gt;= 0). Typical value
            = 0,5.
            '''

        })
    '''
    Electronic integrator time constant (<i>Tx</i>) (&gt;= 0). Typical
    value = 0,5.
    '''

    valvmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening (<i>ValvMax</i>) (&gt; GovHydroPelton.valvmin). Typical
            value = 1,1.
            '''

        })
    '''
    Maximum gate opening (<i>ValvMax</i>) (&gt; GovHydroPelton.valvmin).
    Typical value = 1,1.
    '''

    valvmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening (<i>ValvMin</i>) (&lt; GovHydroPelton.valvmax). Typical
            value = 0.
            '''

        })
    '''
    Minimum gate opening (<i>ValvMin</i>) (&lt; GovHydroPelton.valvmax).
    Typical value = 0.
    '''

    vav: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum servomotor valve opening velocity (<i>Vav</i>). Typical value =
            0,1.
            '''

        })
    '''
    Maximum servomotor valve opening velocity (<i>Vav</i>). Typical value
    = 0,1.
    '''

    vcv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum servomotor valve closing velocity (<i>Vcv</i>). Typical value =
            -0,1.
            '''

        })
    '''
    Maximum servomotor valve closing velocity (<i>Vcv</i>). Typical value
    = -0,1.
    '''

    zsfc: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Head of upper water level with respect to the level of penstock (<i>Zsfc</i>).
            Unit = km. Typical value = 0,025.
            '''

        })
    '''
    Head of upper water level with respect to the level of penstock (<i>Zsfc</i>).
    Unit = km. Typical value = 0,025.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroR(TurbineGovernorDynamics):
    '''
    Fourth order lead-lag governor and hydro turbine.
    '''

    inputSignal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input signal switch (<i>Flag</i>).
            true = <i>Pe</i> input is used
            false = feedback is received from <i>CV</i>.
            <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt </i>is zero, <i>Flag</i>
            is set to false. If <i>Tt</i> is not zero, <i>Flag</i> is set to true.
            Typical value = true.
            '''

        })
    '''
    Input signal switch (<i>Flag</i>).
    true = <i>Pe</i> input is used
    false = feedback is received from <i>CV</i>.
    <i>Flag</i> is normally dependent on <i>Tt</i>. If <i>Tt </i>is zero,
    <i>Flag</i> is set to false. If <i>Tt</i> is not zero, <i>Flag</i>
    is set to true.
    Typical value = true.
    '''

    velcl: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical value
            = -0,2.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velcl</i>). Unit = PU / s. Typical
    value = -0,2.
    '''

    velop: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical value
            = 0,2.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velop</i>). Unit = PU / s. Typical
    value = 0,2.
    '''

    at: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine gain (<i>At</i>). Typical value = 1,2.
            '''

        })
    '''
    Turbine gain (<i>At</i>). Typical value = 1,2.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional dead-band width (<i>db1</i>). Unit = Hz. Typical value
    = 0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional dead-band (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>). Typical value = 0,2.
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>). Typical value = 0,2.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum governor output (<i>Gmax</i>) (&gt; GovHydroR.gmin). Typical value
            = 1,05.
            '''

        })
    '''
    Maximum governor output (<i>Gmax</i>) (&gt; GovHydroR.gmin). Typical
    value = 1,05.
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum governor output (<i>Gmin</i>) (&lt; GovHydroR.gmax). Typical value
            = -0,05.
            '''

        })
    '''
    Minimum governor output (<i>Gmin</i>) (&lt; GovHydroR.gmax). Typical
    value = -0,05.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU gv (<i>Gv1</i>). Typical value = 0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU gv (<i>Gv2</i>). Typical value = 0.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU gv (<i>Gv3</i>). Typical value = 0.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU gv (<i>Gv4</i>). Typical value = 0.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU gv (<i>Gv5</i>). Typical value = 0.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU gv (<i>Gv6</i>). Typical value = 0.
    '''

    h0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine nominal head (<i>H0</i>). Typical value = 1.
            '''

        })
    '''
    Turbine nominal head (<i>H0</i>). Typical value = 1.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo gain (<i>Kg</i>). Typical value = 2.
            '''

        })
    '''
    Gate servo gain (<i>Kg</i>). Typical value = 2.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain (<i>Ki</i>). Typical value = 0,5.
            '''

        })
    '''
    Integral gain (<i>Ki</i>). Typical value = 0,5.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 1, PU power (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 2, PU power (<i>Pgv2</i>). Typical value = 0.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 3, PU power (<i>Pgv3</i>). Typical value = 0.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 4, PU power (<i>Pgv4</i>). Typical value = 0.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 5, PU power (<i>Pgv5</i>). Typical value = 0.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain point 6, PU power (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovHydroR.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum gate opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovHydroR.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovHydroR.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum gate opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovHydroR.pmax).
    Typical value = 0.
    '''

    qnl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            No-load turbine flow at nominal head (<i>Qnl</i>). Typical value = 0,08.
            '''

        })
    '''
    No-load turbine flow at nominal head (<i>Qnl</i>). Typical value =
    0,08.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady-state droop (<i>R</i>). Typical value = 0,05.
            '''

        })
    '''
    Steady-state droop (<i>R</i>). Typical value = 0,05.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant 1 (<i>T1</i>) (&gt;= 0). Typical value = 1,5.
            '''

        })
    '''
    Lead time constant 1 (<i>T1</i>) (&gt;= 0). Typical value = 1,5.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant 1 (<i>T2</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Lag time constant 1 (<i>T2</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant 2 (<i>T3</i>) (&gt;= 0). Typical value = 1,5.
            '''

        })
    '''
    Lead time constant 2 (<i>T3</i>) (&gt;= 0). Typical value = 1,5.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant 2 (<i>T4</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Lag time constant 2 (<i>T4</i>) (&gt;= 0). Typical value = 0,1.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant 3 (<i>T5</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead time constant 3 (<i>T5</i>) (&gt;= 0). Typical value = 0.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant 3 (<i>T6</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Lag time constant 3 (<i>T6</i>) (&gt;= 0). Typical value = 0,05.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant 4 (<i>T7</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Lead time constant 4 (<i>T7</i>) (&gt;= 0). Typical value = 0.
    '''

    t8: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant 4 (<i>T8</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Lag time constant 4 (<i>T8</i>) (&gt;= 0). Typical value = 0,05.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input filter time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Input filter time constant (<i>Td</i>) (&gt;= 0). Typical value = 0,05.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,05.
            '''

        })
    '''
    Gate servo time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,05.
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power feedback time constant (<i>Tt</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Power feedback time constant (<i>Tt</i>) (&gt;= 0). Typical value =
    0.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt; 0). Typical value = 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroWEH(TurbineGovernorDynamics):
    '''
    Woodward<sup>TM </sup>electric hydro governor.
    [Footnote: Woodward electric hydro governors are an example of suitable
    products available commercially. This information is given for the convenience
    of users of this document and does not constitute an endorsement by IEC
    of these products.]
    '''

    feedbackSignal: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback signal selection (<i>Sw</i>).
            true = PID output (if <i>R-Perm-Gate </i>= droop and <i>R-Perm-Pe </i>=
            0)
            false = electrical power (if <i>R-Perm-Gate </i>= 0 and <i>R-Perm-Pe </i>=
            droop) or
            false = gate position (if R<i>-Perm-Gate </i>= droop and <i>R-Perm-Pe </i>=
            0).
            Typical value = false.
            '''

        })
    '''
    Feedback signal selection (<i>Sw</i>).
    true = PID output (if <i>R-Perm-Gate </i>= droop and <i>R-Perm-Pe </i>=
    0)
    false = electrical power (if <i>R-Perm-Gate </i>= 0 and <i>R-Perm-Pe
    </i>= droop) or
    false = gate position (if R<i>-Perm-Gate </i>= droop and <i>R-Perm-Pe
    </i>= 0).
    Typical value = false.
    '''

    rpg: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop for governor output feedback (<i>R-Perm-Gate</i>).
            '''

        })
    '''
    Permanent droop for governor output feedback (<i>R-Perm-Gate</i>).
    '''

    rpp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop for electrical power feedback (<i>R-Perm-Pe</i>).
            '''

        })
    '''
    Permanent droop for electrical power feedback (<i>R-Perm-Pe</i>).
    '''

    db: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed deadband (<i>db</i>).
            '''

        })
    '''
    Speed deadband (<i>db</i>).
    '''

    dicn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value to allow the integral controller to advance beyond the gate limits
            (<i>Dicn</i>).
            '''

        })
    '''
    Value to allow the integral controller to advance beyond the gate limits
    (<i>Dicn</i>).
    '''

    dpv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value to allow the pilot valve controller to advance beyond the gate limits
            (<i>Dpv</i>).
            '''

        })
    '''
    Value to allow the pilot valve controller to advance beyond the gate
    limits (<i>Dpv</i>).
    '''

    dturb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>Dturb</i>). Unit = delta P (PU of <i>MWbase</i>)
            / delta speed (PU).
            '''

        })
    '''
    Turbine damping factor (<i>Dturb</i>). Unit = delta P (PU of <i>MWbase</i>)
    / delta speed (PU).
    '''

    fl1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flowgate 1 (<i>Fl1</i>). Flow value for gate position point 1 for lookup
            table representing water flow through the turbine as a function of gate
            position to produce steady state flow.
            '''

        })
    '''
    Flowgate 1 (<i>Fl1</i>). Flow value for gate position point 1 for lookup
    table representing water flow through the turbine as a function of
    gate position to produce steady state flow.
    '''

    fl2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flowgate 2 (<i>Fl2</i>). Flow value for gate position point 2 for lookup
            table representing water flow through the turbine as a function of gate
            position to produce steady state flow.
            '''

        })
    '''
    Flowgate 2 (<i>Fl2</i>). Flow value for gate position point 2 for lookup
    table representing water flow through the turbine as a function of
    gate position to produce steady state flow.
    '''

    fl3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flowgate 3 (<i>Fl3</i>). Flow value for gate position point 3 for lookup
            table representing water flow through the turbine as a function of gate
            position to produce steady state flow.
            '''

        })
    '''
    Flowgate 3 (<i>Fl3</i>). Flow value for gate position point 3 for lookup
    table representing water flow through the turbine as a function of
    gate position to produce steady state flow.
    '''

    fl4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flowgate 4 (<i>Fl4</i>). Flow value for gate position point 4 for lookup
            table representing water flow through the turbine as a function of gate
            position to produce steady state flow.
            '''

        })
    '''
    Flowgate 4 (<i>Fl4</i>). Flow value for gate position point 4 for lookup
    table representing water flow through the turbine as a function of
    gate position to produce steady state flow.
    '''

    fl5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flowgate 5 (<i>Fl5</i>). Flow value for gate position point 5 for lookup
            table representing water flow through the turbine as a function of gate
            position to produce steady state flow.
            '''

        })
    '''
    Flowgate 5 (<i>Fl5</i>). Flow value for gate position point 5 for lookup
    table representing water flow through the turbine as a function of
    gate position to produce steady state flow.
    '''

    fp1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P1 (<i>Fp1</i>). Turbine flow value for point 1 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P1 (<i>Fp1</i>). Turbine flow value for point 1 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp10: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P10 (<i>Fp10</i>). Turbine flow value for point 10 for lookup table
            representing PU mechanical power on machine MVA rating as a function of
            turbine flow.
            '''

        })
    '''
    Flow P10 (<i>Fp10</i>). Turbine flow value for point 10 for lookup
    table representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P2 (<i>Fp2</i>). Turbine flow value for point 2 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P2 (<i>Fp2</i>). Turbine flow value for point 2 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P3 (<i>Fp3</i>). Turbine flow value for point 3 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P3 (<i>Fp3</i>). Turbine flow value for point 3 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P4 (<i>Fp4</i>). Turbine flow value for point 4 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P4 (<i>Fp4</i>). Turbine flow value for point 4 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P5 (<i>Fp5</i>). Turbine flow value for point 5 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P5 (<i>Fp5</i>). Turbine flow value for point 5 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P6 (<i>Fp6</i>). Turbine flow value for point 6 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P6 (<i>Fp6</i>). Turbine flow value for point 6 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P7 (<i>Fp7</i>). Turbine flow value for point 7 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P7 (<i>Fp7</i>). Turbine flow value for point 7 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P8 (<i>Fp8</i>). Turbine flow value for point 8 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P8 (<i>Fp8</i>). Turbine flow value for point 8 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    fp9: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow P9 (<i>Fp9</i>). Turbine flow value for point 9 for lookup table representing
            PU mechanical power on machine MVA rating as a function of turbine flow.
            '''

        })
    '''
    Flow P9 (<i>Fp9</i>). Turbine flow value for point 9 for lookup table
    representing PU mechanical power on machine MVA rating as a function
    of turbine flow.
    '''

    gmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate position (<i>Gmax</i>) (&gt; GovHydroWEH.gmin).
            '''

        })
    '''
    Maximum gate position (<i>Gmax</i>) (&gt; GovHydroWEH.gmin).
    '''

    gmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum gate position (<i>Gmin</i>) (&lt; GovHydroWEH.gmax).
            '''

        })
    '''
    Minimum gate position (<i>Gmin</i>) (&lt; GovHydroWEH.gmax).
    '''

    gtmxcl: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing rate (<i>Gtmxcl</i>).
            '''

        })
    '''
    Maximum gate closing rate (<i>Gtmxcl</i>).
    '''

    gtmxop: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening rate (<i>Gtmxop</i>).
            '''

        })
    '''
    Maximum gate opening rate (<i>Gtmxop</i>).
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate 1 (<i>Gv1</i>). Gate Position value for point 1 for lookup table representing
            water flow through the turbine as a function of gate position to produce
            steady state flow.
            '''

        })
    '''
    Gate 1 (<i>Gv1</i>). Gate Position value for point 1 for lookup table
    representing water flow through the turbine as a function of gate position
    to produce steady state flow.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate 2 (<i>Gv2</i>). Gate Position value for point 2 for lookup table representing
            water flow through the turbine as a function of gate position to produce
            steady state flow.
            '''

        })
    '''
    Gate 2 (<i>Gv2</i>). Gate Position value for point 2 for lookup table
    representing water flow through the turbine as a function of gate position
    to produce steady state flow.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate 3 (<i>Gv3</i>). Gate Position value for point 3 for lookup table representing
            water flow through the turbine as a function of gate position to produce
            steady state flow.
            '''

        })
    '''
    Gate 3 (<i>Gv3</i>). Gate Position value for point 3 for lookup table
    representing water flow through the turbine as a function of gate position
    to produce steady state flow.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate 4 (<i>Gv4</i>). Gate Position value for point 4 for lookup table representing
            water flow through the turbine as a function of gate position to produce
            steady state flow.
            '''

        })
    '''
    Gate 4 (<i>Gv4</i>). Gate Position value for point 4 for lookup table
    representing water flow through the turbine as a function of gate position
    to produce steady state flow.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate 5 (<i>Gv5</i>). Gate Position value for point 5 for lookup table representing
            water flow through the turbine as a function of gate position to produce
            steady state flow.
            '''

        })
    '''
    Gate 5 (<i>Gv5</i>). Gate Position value for point 5 for lookup table
    representing water flow through the turbine as a function of gate position
    to produce steady state flow.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative controller derivative gain (<i>Kd</i>).
            '''

        })
    '''
    Derivative controller derivative gain (<i>Kd</i>).
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative controller Integral gain (<i>Ki</i>).
            '''

        })
    '''
    Derivative controller Integral gain (<i>Ki</i>).
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative control gain (<i>Kp</i>).
            '''

        })
    '''
    Derivative control gain (<i>Kp</i>).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmss1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P1 (<i>Pmss1</i>). Mechanical power output for turbine flow point
            1 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P1 (<i>Pmss1</i>). Mechanical power output for turbine flow
    point 1 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss10: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P10 (<i>Pmss10</i>). Mechanical power output for turbine flow
            point 10 for lookup table representing PU mechanical power on machine MVA
            rating as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P10 (<i>Pmss10</i>). Mechanical power output for turbine
    flow point 10 for lookup table representing PU mechanical power on
    machine MVA rating as a function of turbine flow.
    '''

    pmss2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P2 (<i>Pmss2</i>). Mechanical power output for turbine flow point
            2 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P2 (<i>Pmss2</i>). Mechanical power output for turbine flow
    point 2 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P3 (<i>Pmss3</i>). Mechanical power output for turbine flow point
            3 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P3 (<i>Pmss3</i>). Mechanical power output for turbine flow
    point 3 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P4 (<i>Pmss4</i>). Mechanical power output for turbine flow point
            4 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P4 (<i>Pmss4</i>). Mechanical power output for turbine flow
    point 4 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P5 (<i>Pmss5</i>). Mechanical power output for turbine flow point
            5 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P5 (<i>Pmss5</i>). Mechanical power output for turbine flow
    point 5 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P6 (<i>Pmss6</i>). Mechanical power output for turbine flow point
            6 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P6 (<i>Pmss6</i>). Mechanical power output for turbine flow
    point 6 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P7 (<i>Pmss7</i>). Mechanical power output for turbine flow point
            7 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P7 (<i>Pmss7</i>). Mechanical power output for turbine flow
    point 7 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P8 (<i>Pmss8</i>). Mechanical power output for turbine flow point
            8 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P8 (<i>Pmss8</i>). Mechanical power output for turbine flow
    point 8 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    pmss9: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pmss flow P9 (<i>Pmss9</i>). Mechanical power output for turbine flow point
            9 for lookup table representing PU mechanical power on machine MVA rating
            as a function of turbine flow.
            '''

        })
    '''
    Pmss flow P9 (<i>Pmss9</i>). Mechanical power output for turbine flow
    point 9 for lookup table representing PU mechanical power on machine
    MVA rating as a function of turbine flow.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative controller time constant (<i>Td</i>) (&gt;= 0). Limits the derivative
            characteristic beyond a breakdown frequency to avoid amplification of high-frequency
            noise.
            '''

        })
    '''
    Derivative controller time constant (<i>Td</i>) (&gt;= 0). Limits the
    derivative characteristic beyond a breakdown frequency to avoid amplification
    of high-frequency noise.
    '''

    tdv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Distributive valve time lag time constant (<i>Tdv</i>) (&gt;= 0).
            '''

        })
    '''
    Distributive valve time lag time constant (<i>Tdv</i>) (&gt;= 0).
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value to allow the distribution valve controller to advance beyond the
            gate movement rate limit (<i>Tg</i>) (&gt;= 0).
            '''

        })
    '''
    Value to allow the distribution valve controller to advance beyond
    the gate movement rate limit (<i>Tg</i>) (&gt;= 0).
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pilot valve time lag time constant (<i>Tp</i>) (&gt;= 0).
            '''

        })
    '''
    Pilot valve time lag time constant (<i>Tp</i>) (&gt;= 0).
    '''

    tpe: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electrical power droop time constant (<i>Tpe</i>) (&gt;= 0).
            '''

        })
    '''
    Electrical power droop time constant (<i>Tpe</i>) (&gt;= 0).
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt; 0).
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt; 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovHydroWPID(TurbineGovernorDynamics):
    '''
    Woodward<sup>TM</sup> PID hydro governor.
    [Footnote: Woodward PID hydro governors are an example of suitable products
    available commercially. This information is given for the convenience of
    users of this document and does not constitute an endorsement by IEC of
    these products.]
    '''

    d: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping factor (<i>D</i>). Unit = delta P / delta speed.
            '''

        })
    '''
    Turbine damping factor (<i>D</i>). Unit = delta P / delta speed.
    '''

    gatmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate opening limit maximum (<i>Gatmax</i>) (&gt; GovHydroWPID.gatmin).
            '''

        })
    '''
    Gate opening limit maximum (<i>Gatmax</i>) (&gt; GovHydroWPID.gatmin).
    '''

    gatmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate opening limit minimum (<i>Gatmin</i>) (&lt; GovHydroWPID.gatmax).
            '''

        })
    '''
    Gate opening limit minimum (<i>Gatmin</i>) (&lt; GovHydroWPID.gatmax).
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate position 1 (<i>Gv1</i>).
            '''

        })
    '''
    Gate position 1 (<i>Gv1</i>).
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate position 2 (<i>Gv2</i>).
            '''

        })
    '''
    Gate position 2 (<i>Gv2</i>).
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate position 3 (<i>Gv3</i>) (= 1,0).
            '''

        })
    '''
    Gate position 3 (<i>Gv3</i>) (= 1,0).
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain (<i>Kd</i>). Typical value = 1,11.
            '''

        })
    '''
    Derivative gain (<i>Kd</i>). Typical value = 1,11.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reset gain (<i>Ki</i>). Typical value = 0,36.
            '''

        })
    '''
    Reset gain (<i>Ki</i>). Typical value = 0,36.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain (<i>Kp</i>). Typical value = 0,1.
            '''

        })
    '''
    Proportional gain (<i>Kp</i>). Typical value = 0,1.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output at <i>Gv1</i> PU of <i>MWbase</i> (<i>Pgv1</i>).
            '''

        })
    '''
    Output at <i>Gv1</i> PU of <i>MWbase</i> (<i>Pgv1</i>).
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output at <i>Gv2</i> PU of <i>MWbase</i> (<i>Pgv2</i>).
            '''

        })
    '''
    Output at <i>Gv2</i> PU of <i>MWbase</i> (<i>Pgv2</i>).
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output at <i>Gv3</i> PU of <i>MWbase</i> (<i>Pgv3</i>).
            '''

        })
    '''
    Output at <i>Gv3</i> PU of <i>MWbase</i> (<i>Pgv3</i>).
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum power output (<i>Pmax</i>) (&gt; GovHydroWPID.pmin).
            '''

        })
    '''
    Maximum power output (<i>Pmax</i>) (&gt; GovHydroWPID.pmin).
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum power output (<i>Pmin</i>) (&lt; GovHydroWPID.pmax).
            '''

        })
    '''
    Minimum power output (<i>Pmin</i>) (&lt; GovHydroWPID.pmax).
    '''

    reg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent drop (<i>Reg</i>).
            '''

        })
    '''
    Permanent drop (<i>Reg</i>).
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Controller time constant (<i>Ta</i>) (&gt;= 0). Typical value = 0.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate servo time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Gate servo time constant (<i>Tb</i>) (&gt;= 0). Typical value = 0.
    '''

    treg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed detector time constant (<i>Treg</i>) (&gt;= 0).
            '''

        })
    '''
    Speed detector time constant (<i>Treg</i>) (&gt;= 0).
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Water inertia time constant (<i>Tw</i>) (&gt;= 0). Typical value =
    0.
    '''

    velmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate opening velocity (<i>Velmax</i>) (&gt; GovHydroWPID.velmin).
            Unit = PU / s. Typical value = 0.
            '''

        })
    '''
    Maximum gate opening velocity (<i>Velmax</i>) (&gt; GovHydroWPID.velmin).
    Unit = PU / s. Typical value = 0.
    '''

    velmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum gate closing velocity (<i>Velmin</i>) (&lt; GovHydroWPID.velmax).
            Unit = PU / s. Typical value = 0.
            '''

        })
    '''
    Maximum gate closing velocity (<i>Velmin</i>) (&lt; GovHydroWPID.velmax).
    Unit = PU / s. Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteam0(TurbineGovernorDynamics):
    '''
    A simplified steam turbine governor.
    '''

    dt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine damping coefficient (<i>Dt</i>). Unit = delta P / delta speed.
            Typical value = 0.
            '''

        })
    '''
    Turbine damping coefficient (<i>Dt</i>). Unit = delta P / delta speed.
    Typical value = 0.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Permanent droop (<i>R</i>). Typical value = 0,05.
            '''

        })
    '''
    Permanent droop (<i>R</i>). Typical value = 0,05.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam bowl time constant (<i>T1</i>) (&gt; 0). Typical value = 0,5.
            '''

        })
    '''
    Steam bowl time constant (<i>T1</i>) (&gt; 0). Typical value = 0,5.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Numerator time constant of <i>T2</i>/<i>T3</i> block (<i>T2</i>) (&gt;=
            0). Typical value = 3.
            '''

        })
    '''
    Numerator time constant of <i>T2</i>/<i>T3</i> block (<i>T2</i>) (&gt;=
    0). Typical value = 3.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reheater time constant (<i>T3</i>) (&gt; 0). Typical value = 10.
            '''

        })
    '''
    Reheater time constant (<i>T3</i>) (&gt; 0). Typical value = 10.
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve position, PU of <i>mwcap</i> (<i>Vmax</i>) (&gt; GovSteam0.vmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum valve position, PU of <i>mwcap</i> (<i>Vmax</i>) (&gt; GovSteam0.vmin).
    Typical value = 1.
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve position, PU of <i>mwcap</i> (<i>Vmin</i>) (&lt; GovSteam0.vmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum valve position, PU of <i>mwcap</i> (<i>Vmin</i>) (&lt; GovSteam0.vmax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteam1(TurbineGovernorDynamics):
    '''
    Steam turbine governor, based on the GovSteamIEEE1 (with optional deadband
    and nonlinear valve gain added).
    '''

    k1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after first boiler pass (<i>K1</i>). Typical
            value = 0,2.
            '''

        })
    '''
    Fraction of HP shaft power after first boiler pass (<i>K1</i>). Typical
    value = 0,2.
    '''

    k2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after first boiler pass (<i>K2</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after first boiler pass (<i>K2</i>). Typical
    value = 0.
    '''

    k3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after second boiler pass (<i>K3</i>). Typical
            value = 0,3.
            '''

        })
    '''
    Fraction of HP shaft power after second boiler pass (<i>K3</i>). Typical
    value = 0,3.
    '''

    k4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after second boiler pass (<i>K4</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after second boiler pass (<i>K4</i>). Typical
    value = 0.
    '''

    k5: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after third boiler pass (<i>K5</i>). Typical
            value = 0,5.
            '''

        })
    '''
    Fraction of HP shaft power after third boiler pass (<i>K5</i>). Typical
    value = 0,5.
    '''

    k6: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after third boiler pass (<i>K6</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after third boiler pass (<i>K6</i>). Typical
    value = 0.
    '''

    k7: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after fourth boiler pass (<i>K7</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of HP shaft power after fourth boiler pass (<i>K7</i>). Typical
    value = 0.
    '''

    k8: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after fourth boiler pass (<i>K8</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after fourth boiler pass (<i>K8</i>). Typical
    value = 0.
    '''

    sdb1: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional deadband indicator.
            true = intentional deadband is applied
            false = intentional deadband is not applied.
            Typical value = true.
            '''

        })
    '''
    Intentional deadband indicator.
    true = intentional deadband is applied
    false = intentional deadband is not applied.
    Typical value = true.
    '''

    sdb2: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional deadband location.
            true = intentional deadband is applied before point "A"
            false = intentional deadband is applied after point "A".
            Typical value = true.
            '''

        })
    '''
    Unintentional deadband location.
    true = intentional deadband is applied before point "A"
    false = intentional deadband is applied after point "A".
    Typical value = true.
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s. Typical
            value = -10.
            '''

        })
    '''
    Maximum valve closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s.
    Typical value = -10.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening velocity (<i>Uo</i>) (&gt; 0). Unit = PU / s. Typical
            value = 1.
            '''

        })
    '''
    Maximum valve opening velocity (<i>Uo</i>) (&gt; 0). Unit = PU / s.
    Typical value = 1.
    '''

    valve: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear valve characteristic.
            true = nonlinear valve characteristic is used
            false = nonlinear valve characteristic is not used.
            Typical value = true.
            '''

        })
    '''
    Nonlinear valve characteristic.
    true = nonlinear valve characteristic is used
    false = nonlinear valve characteristic is not used.
    Typical value = true.
    '''

    db1: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional deadband width (<i>db1</i>). Unit = Hz. Typical value =
    0.
    '''

    db2: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unintentional deadband (<i>db2</i>). Unit = MW. Typical value = 0.
            '''

        })
    '''
    Unintentional deadband (<i>db2</i>). Unit = MW. Typical value = 0.
    '''

    eps: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value = 0.
            '''

        })
    '''
    Intentional db hysteresis (<i>eps</i>). Unit = Hz. Typical value =
    0.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 1 (<i>GV1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain valve position point 1 (<i>GV1</i>). Typical value =
    0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 2 (<i>GV2</i>). Typical value = 0,4.
            '''

        })
    '''
    Nonlinear gain valve position point 2 (<i>GV2</i>). Typical value =
    0,4.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 3 (<i>GV3</i>). Typical value = 0,5.
            '''

        })
    '''
    Nonlinear gain valve position point 3 (<i>GV3</i>). Typical value =
    0,5.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 4 (<i>GV4</i>). Typical value = 0,6.
            '''

        })
    '''
    Nonlinear gain valve position point 4 (<i>GV4</i>). Typical value =
    0,6.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 5 (<i>GV5</i>). Typical value = 1.
            '''

        })
    '''
    Nonlinear gain valve position point 5 (<i>GV5</i>). Typical value =
    1.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 6 (<i>GV6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain valve position point 6 (<i>GV6</i>). Typical value =
    0.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (reciprocal of droop) (<i>K</i>) (&gt; 0). Typical value
            = 25.
            '''

        })
    '''
    Governor gain (reciprocal of droop) (<i>K</i>) (&gt; 0). Typical value
    = 25.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 1 (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain power value point 1 (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 2 (<i>Pgv2</i>). Typical value = 0,75.
            '''

        })
    '''
    Nonlinear gain power value point 2 (<i>Pgv2</i>). Typical value = 0,75.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 3 (<i>Pgv3</i>). Typical value = 0,91.
            '''

        })
    '''
    Nonlinear gain power value point 3 (<i>Pgv3</i>). Typical value = 0,91.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 4 (<i>Pgv4</i>). Typical value = 0,98.
            '''

        })
    '''
    Nonlinear gain power value point 4 (<i>Pgv4</i>). Typical value = 0,98.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 5 (<i>Pgv5</i>). Typical value = 1.
            '''

        })
    '''
    Nonlinear gain power value point 5 (<i>Pgv5</i>). Typical value = 1.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 6 (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain power value point 6 (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening (<i>Pmax</i>) (&gt; GovSteam1.pmin). Typical value
            = 1.
            '''

        })
    '''
    Maximum valve opening (<i>Pmax</i>) (&gt; GovSteam1.pmin). Typical
    value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve opening (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteam1.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum valve opening (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteam1.pmax).
    Typical value = 0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T2</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T2</i>) (&gt;= 0). Typical value =
    0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner time constant (<i>T3) </i>(&gt; 0). Typical value = 0,1.
            '''

        })
    '''
    Valve positioner time constant (<i>T3) </i>(&gt; 0). Typical value
    = 0,1.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical value
            = 0,3.
            '''

        })
    '''
    Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical
    value = 0,3.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of second boiler pass (<i>T5</i>) (&gt;= 0). Typical value
            = 5.
            '''

        })
    '''
    Time constant of second boiler pass (<i>T5</i>) (&gt;= 0). Typical
    value = 5.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of third boiler pass (<i>T6</i>) (&gt;= 0). Typical value
            = 0,5.
            '''

        })
    '''
    Time constant of third boiler pass (<i>T6</i>) (&gt;= 0). Typical value
    = 0,5.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of fourth boiler pass (<i>T7</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Time constant of fourth boiler pass (<i>T7</i>) (&gt;= 0). Typical
    value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteam2(TurbineGovernorDynamics):
    '''
    Simplified governor.
    '''

    k: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (reciprocal of droop) (<i>K</i>). Typical value = 20.
            '''

        })
    '''
    Governor gain (reciprocal of droop) (<i>K</i>). Typical value = 20.
    '''

    dbf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency deadband (<i>DBF</i>). Typical value = 0.
            '''

        })
    '''
    Frequency deadband (<i>DBF</i>). Typical value = 0.
    '''

    mnef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum negative error value (<i>MN</i><i><sub>EF</sub></i>).
            Typical value = -1.
            '''

        })
    '''
    Fuel flow maximum negative error value (<i>MN</i><i><sub>EF</sub></i>).
    Typical value = -1.
    '''

    mxef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel flow maximum positive error value (<i>MX</i><i><sub>EF</sub></i>).
            Typical value = 1.
            '''

        })
    '''
    Fuel flow maximum positive error value (<i>MX</i><i><sub>EF</sub></i>).
    Typical value = 1.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum fuel flow (<i>P</i><i><sub>MAX</sub></i>) (&gt; GovSteam2.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum fuel flow (<i>P</i><i><sub>MAX</sub></i>) (&gt; GovSteam2.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum fuel flow (<i>P</i><i><sub>MIN</sub></i>) (&lt; GovSteam2.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum fuel flow (<i>P</i><i><sub>MIN</sub></i>) (&lt; GovSteam2.pmax).
    Typical value = 0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt; 0). Typical
            value = 0,45.
            '''

        })
    '''
    Governor lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt; 0).
    Typical value = 0,45.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T</i><i><sub>2</sub></i>) (&gt;= 0).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamBB(TurbineGovernorDynamics):
    '''
    European governor model.
    '''

    peflag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electric power input selection (Peflag).
            true = electric power input
            false = feedback signal.
            Typical value = false.
            '''

        })
    '''
    Electric power input selection (Peflag).
    true = electric power input
    false = feedback signal.
    Typical value = false.
    '''

    fcut: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency deadband (<i>f</i><i><sub>cut</sub></i>) (&gt;= 0). Typical value
            = 0,002.
            '''

        })
    '''
    Frequency deadband (<i>f</i><i><sub>cut</sub></i>) (&gt;= 0). Typical
    value = 0,002.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K2</i>). Typical value = 0,75.
            '''

        })
    '''
    Gain (<i>K2</i>). Typical value = 0,75.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>K3</i>). Typical value = 0,5.
            '''

        })
    '''
    Gain (<i>K3</i>). Typical value = 0,5.
    '''

    kd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Kd</i>). Typical value = 1,0.
            '''

        })
    '''
    Gain (<i>Kd</i>). Typical value = 1,0.
    '''

    kg: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Kg</i>). Typical value = 1,0.
            '''

        })
    '''
    Gain (<i>Kg</i>). Typical value = 1,0.
    '''

    kls: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Kls</i>) (&gt; 0). Typical value = 0,1.
            '''

        })
    '''
    Gain (<i>Kls</i>) (&gt; 0). Typical value = 0,1.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Kp</i>). Typical value = 1,0.
            '''

        })
    '''
    Gain (<i>Kp</i>). Typical value = 1,0.
    '''

    ks: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain (<i>Ks</i>). Typical value = 21,0.
            '''

        })
    '''
    Gain (<i>Ks</i>). Typical value = 21,0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High power limit (<i>Pmax</i>) (&gt; GovSteamBB.pmin). Typical value =
            1,0.
            '''

        })
    '''
    High power limit (<i>Pmax</i>) (&gt; GovSteamBB.pmin). Typical value
    = 1,0.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low power limit (<i>Pmin</i>) (&lt; GovSteamBB.pmax). Typical value = 0.
            '''

        })
    '''
    Low power limit (<i>Pmin</i>) (&lt; GovSteamBB.pmax). Typical value
    = 0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T1</i>). Typical value = 0,05.
            '''

        })
    '''
    Time constant (<i>T1</i>). Typical value = 0,05.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T4</i>). Typical value = 0,15.
            '''

        })
    '''
    Time constant (<i>T4</i>). Typical value = 0,15.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T5</i>). Typical value = 12,0.
            '''

        })
    '''
    Time constant (<i>T5</i>). Typical value = 12,0.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T6</i>). Typical value = 0,75.
            '''

        })
    '''
    Time constant (<i>T6</i>). Typical value = 0,75.
    '''

    td: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Td</i>) (&gt; 0). Typical value = 1,0.
            '''

        })
    '''
    Time constant (<i>Td</i>) (&gt; 0). Typical value = 1,0.
    '''

    tn: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>Tn</i>) (&gt; 0). Typical value = 1,0.
            '''

        })
    '''
    Time constant (<i>Tn</i>) (&gt; 0). Typical value = 1,0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamEU(TurbineGovernorDynamics):
    '''
    Simplified boiler and steam turbine with PID governor.
    '''

    chc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves rate closing limit (<i>Chc</i>). Unit = PU / s. Typical
            value = -3,3.
            '''

        })
    '''
    Control valves rate closing limit (<i>Chc</i>). Unit = PU / s. Typical
    value = -3,3.
    '''

    cho: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves rate opening limit (<i>Cho</i>). Unit = PU / s. Typical
            value = 0,17.
            '''

        })
    '''
    Control valves rate opening limit (<i>Cho</i>). Unit = PU / s. Typical
    value = 0,17.
    '''

    cic: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves rate closing limit (<i>Cic</i>). Typical value = -2,2.
            '''

        })
    '''
    Intercept valves rate closing limit (<i>Cic</i>). Typical value = -2,2.
    '''

    cio: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves rate opening limit (<i>Cio</i>). Typical value = 0,123.
            '''

        })
    '''
    Intercept valves rate opening limit (<i>Cio</i>). Typical value = 0,123.
    '''

    db1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Deadband of the frequency corrector (<i>db1</i>). Typical value = 0.
            '''

        })
    '''
    Deadband of the frequency corrector (<i>db1</i>). Typical value = 0.
    '''

    db2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Deadband of the speed governor (<i>db2</i>). Typical value = 0,0004.
            '''

        })
    '''
    Deadband of the speed governor (<i>db2</i>). Typical value = 0,0004.
    '''

    hhpmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum control valve position (<i>Hhpmax</i>). Typical value = 1.
            '''

        })
    '''
    Maximum control valve position (<i>Hhpmax</i>). Typical value = 1.
    '''

    ke: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of the power controller (<i>Ke</i>). Typical value = 0,65.
            '''

        })
    '''
    Gain of the power controller (<i>Ke</i>). Typical value = 0,65.
    '''

    kfcor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of the frequency corrector (<i>Kfcor</i>). Typical value = 20.
            '''

        })
    '''
    Gain of the frequency corrector (<i>Kfcor</i>). Typical value = 20.
    '''

    khp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of total turbine output generated by HP part (<i>Khp</i>). Typical
            value = 0,277.
            '''

        })
    '''
    Fraction of total turbine output generated by HP part (<i>Khp</i>).
    Typical value = 0,277.
    '''

    klp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of total turbine output generated by HP part (<i>Klp</i>). Typical
            value = 0,723.
            '''

        })
    '''
    Fraction of total turbine output generated by HP part (<i>Klp</i>).
    Typical value = 0,723.
    '''

    komegacor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain of the speed governor (<i>Kwcor</i>). Typical value = 20.
            '''

        })
    '''
    Gain of the speed governor (<i>Kwcor</i>). Typical value = 20.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximal active power of the turbine (<i>Pmax</i>). Typical value = 1.
            '''

        })
    '''
    Maximal active power of the turbine (<i>Pmax</i>). Typical value =
    1.
    '''

    prhmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum low pressure limit (<i>Prhmax</i>). Typical value = 1,4.
            '''

        })
    '''
    Maximum low pressure limit (<i>Prhmax</i>). Typical value = 1,4.
    '''

    simx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves transfer limit (<i>Simx</i>). Typical value = 0,425.
            '''

        })
    '''
    Intercept valves transfer limit (<i>Simx</i>). Typical value = 0,425.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Boiler time constant (<i>Tb</i>) (&gt;= 0). Typical value = 100.
            '''

        })
    '''
    Boiler time constant (<i>Tb</i>) (&gt;= 0). Typical value = 100.
    '''

    tdp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative time constant of the power controller (<i>Tdp</i>) (&gt;= 0).
            Typical value = 0.
            '''

        })
    '''
    Derivative time constant of the power controller (<i>Tdp</i>) (&gt;=
    0). Typical value = 0.
    '''

    ten: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electro hydraulic transducer (<i>Ten</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Electro hydraulic transducer (<i>Ten</i>) (&gt;= 0). Typical value
    = 0,1.
    '''

    tf: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency transducer time constant (<i>Tf</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Frequency transducer time constant (<i>Tf</i>) (&gt;= 0). Typical value
    = 0.
    '''

    tfp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of the power controller (<i>Tfp</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Time constant of the power controller (<i>Tfp</i>) (&gt;= 0). Typical
    value = 0.
    '''

    thp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High pressure (HP) time constant of the turbine (<i>Thp</i>) (&gt;= 0).
            Typical value = 0,31.
            '''

        })
    '''
    High pressure (HP) time constant of the turbine (<i>Thp</i>) (&gt;=
    0). Typical value = 0,31.
    '''

    tip: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral time constant of the power controller (<i>Tip</i>) (&gt;= 0).
            Typical value = 2.
            '''

        })
    '''
    Integral time constant of the power controller (<i>Tip</i>) (&gt;=
    0). Typical value = 2.
    '''

    tlp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low pressure (LP) time constant of the turbine (<i>Tlp</i>) (&gt;= 0).
            Typical value = 0,45.
            '''

        })
    '''
    Low pressure (LP) time constant of the turbine (<i>Tlp</i>) (&gt;=
    0). Typical value = 0,45.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power transducer time constant (<i>Tp</i>) (&gt;= 0). Typical value = 0,07.
            '''

        })
    '''
    Power transducer time constant (<i>Tp</i>) (&gt;= 0). Typical value
    = 0,07.
    '''

    trh: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reheater time constant of the turbine (<i>Trh</i>) (&gt;= 0). Typical value
            = 8.
            '''

        })
    '''
    Reheater time constant of the turbine (<i>Trh</i>) (&gt;= 0). Typical
    value = 8.
    '''

    tvhp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves servo time constant (<i>Tvhp</i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Control valves servo time constant (<i>Tvhp</i>) (&gt;= 0). Typical
    value = 0,1.
    '''

    tvip: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves servo time constant (<i>Tvip</i>) (&gt;= 0). Typical value
            = 0,15.
            '''

        })
    '''
    Intercept valves servo time constant (<i>Tvip</i>) (&gt;= 0). Typical
    value = 0,15.
    '''

    tw: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed transducer time constant (<i>Tw</i>) (&gt;= 0). Typical value = 0,02.
            '''

        })
    '''
    Speed transducer time constant (<i>Tw</i>) (&gt;= 0). Typical value
    = 0,02.
    '''

    wfmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Upper limit for frequency correction (<i>Wfmax</i>) (&gt; GovSteamEU.wfmin).
            Typical value = 0,05.
            '''

        })
    '''
    Upper limit for frequency correction (<i>Wfmax</i>) (&gt; GovSteamEU.wfmin).
    Typical value = 0,05.
    '''

    wfmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower limit for frequency correction (<i>Wfmin</i>) (&lt; GovSteamEU.wfmax).
            Typical value = -0,05.
            '''

        })
    '''
    Lower limit for frequency correction (<i>Wfmin</i>) (&lt; GovSteamEU.wfmax).
    Typical value = -0,05.
    '''

    wmax1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Emergency speed control lower limit (<i>wmax1</i>). Typical value = 1,025.
            '''

        })
    '''
    Emergency speed control lower limit (<i>wmax1</i>). Typical value =
    1,025.
    '''

    wmax2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Emergency speed control upper limit (<i>wmax2</i>). Typical value = 1,05.
            '''

        })
    '''
    Emergency speed control upper limit (<i>wmax2</i>). Typical value =
    1,05.
    '''

    wwmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Upper limit for the speed governor (<i>Wwmax</i>) (&gt; GovSteamEU.wwmin).
            Typical value = 0,1.
            '''

        })
    '''
    Upper limit for the speed governor (<i>Wwmax</i>) (&gt; GovSteamEU.wwmin).
    Typical value = 0,1.
    '''

    wwmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower limit for the speed governor frequency correction (<i>Wwmin</i>)
            (&lt; GovSteamEU.wwmax). Typical value = -1.
            '''

        })
    '''
    Lower limit for the speed governor frequency correction (<i>Wwmin</i>)
    (&lt; GovSteamEU.wwmax). Typical value = -1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamFV2(TurbineGovernorDynamics):
    '''
    Steam turbine governor with reheat time constants and modelling of the
    effects of fast valve closing to reduce mechanical power.
    '''

    dt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Dt</i>).
            '''

        })
    '''
    (<i>Dt</i>).
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of the turbine power developed by turbine sections not involved
            in fast valving (<i>K</i>).
            '''

        })
    '''
    Fraction of the turbine power developed by turbine sections not involved
    in fast valving (<i>K</i>).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Alternate base used instead of machine base in equipment model if necessary
            (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Alternate base used instead of machine base in equipment model if necessary
    (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>R</i>).
            '''

        })
    '''
    (<i>R</i>).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor time constant (<i>T1</i>) (&gt;= 0).
            '''

        })
    '''
    Governor time constant (<i>T1</i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reheater time constant (<i>T3</i>) (&gt;= 0).
            '''

        })
    '''
    Reheater time constant (<i>T3</i>) (&gt;= 0).
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time after initial time for valve to close (<i>Ta</i>) (&gt;= 0).
            '''

        })
    '''
    Time after initial time for valve to close (<i>Ta</i>) (&gt;= 0).
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time after initial time for valve to begin opening (<i>Tb</i>) (&gt;= 0).
            '''

        })
    '''
    Time after initial time for valve to begin opening (<i>Tb</i>) (&gt;=
    0).
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time after initial time for valve to become fully open (<i>Tc</i>) (&gt;=
            0).
            '''

        })
    '''
    Time after initial time for valve to become fully open (<i>Tc</i>)
    (&gt;= 0).
    '''

    tt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant with which power falls off after intercept valve closure
            (<i>Tt</i>) (&gt;= 0).
            '''

        })
    '''
    Time constant with which power falls off after intercept valve closure
    (<i>Tt</i>) (&gt;= 0).
    '''

    vmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Vmax</i>) (&gt; GovSteamFV2.vmin).
            '''

        })
    '''
    (<i>Vmax</i>) (&gt; GovSteamFV2.vmin).
    '''

    vmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (<i>Vmin</i>) (&lt; GovSteamFV2.vmax).
            '''

        })
    '''
    (<i>Vmin</i>) (&lt; GovSteamFV2.vmax).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamFV3(TurbineGovernorDynamics):
    '''
    Simplified GovSteamIEEE1 steam turbine governor with Prmax limit and fast
    valving.
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve closing velocity (<i>Uc</i>). Unit = PU / s. Typical value
            = -1.
            '''

        })
    '''
    Maximum valve closing velocity (<i>Uc</i>). Unit = PU / s. Typical
    value = -1.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening velocity (<i>Uo</i>). Unit = PU / s. Typical value
            = 0,1.
            '''

        })
    '''
    Maximum valve opening velocity (<i>Uo</i>). Unit = PU / s. Typical
    value = 0,1.
    '''

    gv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 1 (<i>GV1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain valve position point 1 (<i>GV1</i>). Typical value =
    0.
    '''

    gv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 2 (<i>GV2</i>). Typical value = 0,4.
            '''

        })
    '''
    Nonlinear gain valve position point 2 (<i>GV2</i>). Typical value =
    0,4.
    '''

    gv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 3 (<i>GV3</i>). Typical value = 0,5.
            '''

        })
    '''
    Nonlinear gain valve position point 3 (<i>GV3</i>). Typical value =
    0,5.
    '''

    gv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 4 (<i>GV4</i>). Typical value = 0,6.
            '''

        })
    '''
    Nonlinear gain valve position point 4 (<i>GV4</i>). Typical value =
    0,6.
    '''

    gv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 5 (<i>GV5</i>). Typical value = 1.
            '''

        })
    '''
    Nonlinear gain valve position point 5 (<i>GV5</i>). Typical value =
    1.
    '''

    gv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain valve position point 6 (<i>GV6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain valve position point 6 (<i>GV6</i>). Typical value =
    0.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain, (reciprocal of droop) (<i>K</i>). Typical value = 20.
            '''

        })
    '''
    Governor gain, (reciprocal of droop) (<i>K</i>). Typical value = 20.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of turbine power developed after first boiler pass (<i>K1</i>).
            Typical value = 0,2.
            '''

        })
    '''
    Fraction of turbine power developed after first boiler pass (<i>K1</i>).
    Typical value = 0,2.
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of turbine power developed after second boiler pass (<i>K2</i>).
            Typical value = 0,2.
            '''

        })
    '''
    Fraction of turbine power developed after second boiler pass (<i>K2</i>).
    Typical value = 0,2.
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of hp turbine power developed after crossover or third boiler
            pass (<i>K3</i>). Typical value = 0,6.
            '''

        })
    '''
    Fraction of hp turbine power developed after crossover or third boiler
    pass (<i>K3</i>). Typical value = 0,6.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pgv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 1 (<i>Pgv1</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain power value point 1 (<i>Pgv1</i>). Typical value = 0.
    '''

    pgv2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 2 (<i>Pgv2</i>). Typical value = 0,75.
            '''

        })
    '''
    Nonlinear gain power value point 2 (<i>Pgv2</i>). Typical value = 0,75.
    '''

    pgv3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 3 (<i>Pgv3</i>). Typical value = 0,91.
            '''

        })
    '''
    Nonlinear gain power value point 3 (<i>Pgv3</i>). Typical value = 0,91.
    '''

    pgv4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 4 (<i>Pgv4</i>). Typical value = 0,98.
            '''

        })
    '''
    Nonlinear gain power value point 4 (<i>Pgv4</i>). Typical value = 0,98.
    '''

    pgv5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 5 (<i>Pgv5</i>). Typical value = 1.
            '''

        })
    '''
    Nonlinear gain power value point 5 (<i>Pgv5</i>). Typical value = 1.
    '''

    pgv6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nonlinear gain power value point 6 (<i>Pgv6</i>). Typical value = 0.
            '''

        })
    '''
    Nonlinear gain power value point 6 (<i>Pgv6</i>). Typical value = 0.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovSteamFV3.pmin).
            Typical value = 1.
            '''

        })
    '''
    Maximum valve opening, PU of <i>MWbase</i> (<i>Pmax</i>) (&gt; GovSteamFV3.pmin).
    Typical value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovSteamFV3.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum valve opening, PU of <i>MWbase</i> (<i>Pmin</i>) (&lt; GovSteamFV3.pmax).
    Typical value = 0.
    '''

    prmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Max. pressure in reheater (<i>Prmax</i>). Typical value = 1.
            '''

        })
    '''
    Max. pressure in reheater (<i>Prmax</i>). Typical value = 1.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T1</i>) (&gt;= 0). Typical value =
    0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lag time constant (<i>T2</i>) (&gt;= 0). Typical value = 0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner time constant (<i>T3</i>) (&gt; 0). Typical value = 0.
            '''

        })
    '''
    Valve positioner time constant (<i>T3</i>) (&gt; 0). Typical value
    = 0.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical value
            = 0,2.
            '''

        })
    '''
    Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical
    value = 0,2.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of second boiler pass (i.e. reheater) (<i>T5</i>) (&gt; 0
            if fast valving is used, otherwise &gt;= 0). Typical value = 0,5.
            '''

        })
    '''
    Time constant of second boiler pass (i.e. reheater) (<i>T5</i>) (&gt;
    0 if fast valving is used, otherwise &gt;= 0). Typical value = 0,5.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of crossover or third boiler pass (<i>T6</i>) (&gt;= 0).
            Typical value = 10.
            '''

        })
    '''
    Time constant of crossover or third boiler pass (<i>T6</i>) (&gt;=
    0). Typical value = 10.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to close intercept valve (IV) (<i>Ta</i>) (&gt;= 0). Typical value
            = 0,97.
            '''

        })
    '''
    Time to close intercept valve (IV) (<i>Ta</i>) (&gt;= 0). Typical value
    = 0,97.
    '''

    tb: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time until IV starts to reopen (<i>Tb</i>) (&gt;= 0). Typical value = 0,98.
            '''

        })
    '''
    Time until IV starts to reopen (<i>Tb</i>) (&gt;= 0). Typical value
    = 0,98.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time until IV is fully open (<i>Tc</i>) (&gt;= 0). Typical value = 0,99.
            '''

        })
    '''
    Time until IV is fully open (<i>Tc</i>) (&gt;= 0). Typical value =
    0,99.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamFV4(TurbineGovernorDynamics):
    '''
    Detailed electro-hydraulic governor for steam unit.
    '''

    svmn: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum regulator gate closing velocity (<i>Svmn</i>). Typical value =
            -0,0333.
            '''

        })
    '''
    Maximum regulator gate closing velocity (<i>Svmn</i>). Typical value
    = -0,0333.
    '''

    svmx: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum regulator gate opening velocity (<i>Svmx</i>). Typical value =
            0,0333.
            '''

        })
    '''
    Maximum regulator gate opening velocity (<i>Svmx</i>). Typical value
    = 0,0333.
    '''

    cpsmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value of pressure regulator output (<i>Cpsmn</i>). Typical value
            = -1.
            '''

        })
    '''
    Minimum value of pressure regulator output (<i>Cpsmn</i>). Typical
    value = -1.
    '''

    cpsmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value of pressure regulator output (<i>Cpsmx</i>). Typical value
            = 1.
            '''

        })
    '''
    Maximum value of pressure regulator output (<i>Cpsmx</i>). Typical
    value = 1.
    '''

    crmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value of regulator set-point (<i>Crmn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum value of regulator set-point (<i>Crmn</i>). Typical value =
    0.
    '''

    crmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value of regulator set-point (<i>Crmx</i>). Typical value = 1,2.
            '''

        })
    '''
    Maximum value of regulator set-point (<i>Crmx</i>). Typical value =
    1,2.
    '''

    kdc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative gain of pressure regulator (<i>Kdc</i>). Typical value = 1.
            '''

        })
    '''
    Derivative gain of pressure regulator (<i>Kdc</i>). Typical value =
    1.
    '''

    kf1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency bias (reciprocal of droop) (<i>Kf1</i>). Typical value = 20.
            '''

        })
    '''
    Frequency bias (reciprocal of droop) (<i>Kf1</i>). Typical value =
    20.
    '''

    kf3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency control (reciprocal of droop) (<i>Kf3</i>). Typical value = 20.
            '''

        })
    '''
    Frequency control (reciprocal of droop) (<i>Kf3</i>). Typical value
    = 20.
    '''

    khp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of total turbine output generated by HP part (<i>Khp</i>). Typical
            value = 0,35.
            '''

        })
    '''
    Fraction of total turbine output generated by HP part (<i>Khp</i>).
    Typical value = 0,35.
    '''

    kic: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of pressure regulator (<i>Kic</i>). Typical value = 0,0033.
            '''

        })
    '''
    Integral gain of pressure regulator (<i>Kic</i>). Typical value = 0,0033.
    '''

    kip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of pressure feedback regulator (<i>Kip</i>). Typical value
            = 0,5.
            '''

        })
    '''
    Integral gain of pressure feedback regulator (<i>Kip</i>). Typical
    value = 0,5.
    '''

    kit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain of electro-hydraulic regulator (<i>Kit</i>). Typical value
            = 0,04.
            '''

        })
    '''
    Integral gain of electro-hydraulic regulator (<i>Kit</i>). Typical
    value = 0,04.
    '''

    kmp1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First gain coefficient of intercept valves characteristic (<i>Kmp1</i>).
            Typical value = 0,5.
            '''

        })
    '''
    First gain coefficient of intercept valves characteristic (<i>Kmp1</i>).
    Typical value = 0,5.
    '''

    kmp2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second gain coefficient of intercept valves characteristic (<i>Kmp2</i>).
            Typical value = 3,5.
            '''

        })
    '''
    Second gain coefficient of intercept valves characteristic (<i>Kmp2</i>).
    Typical value = 3,5.
    '''

    kpc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of pressure regulator (<i>Kpc</i>). Typical value = 0,5.
            '''

        })
    '''
    Proportional gain of pressure regulator (<i>Kpc</i>). Typical value
    = 0,5.
    '''

    kpp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of pressure feedback regulator (<i>Kpp</i>). Typical
            value = 1.
            '''

        })
    '''
    Proportional gain of pressure feedback regulator (<i>Kpp</i>). Typical
    value = 1.
    '''

    kpt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain of electro-hydraulic regulator (<i>Kpt</i>). Typical
            value = 0,3.
            '''

        })
    '''
    Proportional gain of electro-hydraulic regulator (<i>Kpt</i>). Typical
    value = 0,3.
    '''

    krc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum variation of fuel flow (<i>Krc</i>). Typical value = 0,05.
            '''

        })
    '''
    Maximum variation of fuel flow (<i>Krc</i>). Typical value = 0,05.
    '''

    ksh: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure loss due to flow friction in the boiler tubes (<i>Ksh</i>). Typical
            value = 0,08.
            '''

        })
    '''
    Pressure loss due to flow friction in the boiler tubes (<i>Ksh</i>).
    Typical value = 0,08.
    '''

    lpi: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum negative power error (<i>Lpi</i>). Typical value = -0,15.
            '''

        })
    '''
    Maximum negative power error (<i>Lpi</i>). Typical value = -0,15.
    '''

    lps: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum positive power error (<i>Lps</i>). Typical value = 0,03.
            '''

        })
    '''
    Maximum positive power error (<i>Lps</i>). Typical value = 0,03.
    '''

    mnef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower limit for frequency correction (<i>MN</i><i><sub>EF</sub></i>). Typical
            value = -0,05.
            '''

        })
    '''
    Lower limit for frequency correction (<i>MN</i><i><sub>EF</sub></i>).
    Typical value = -0,05.
    '''

    mxef: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Upper limit for frequency correction (<i>MX</i><i><sub>EF</sub></i>). Typical
            value = 0,05.
            '''

        })
    '''
    Upper limit for frequency correction (<i>MX</i><i><sub>EF</sub></i>).
    Typical value = 0,05.
    '''

    pr1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First value of pressure set point static characteristic (<i>Pr1</i>). Typical
            value = 0,2.
            '''

        })
    '''
    First value of pressure set point static characteristic (<i>Pr1</i>).
    Typical value = 0,2.
    '''

    pr2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second value of pressure set point static characteristic, corresponding
            to <i>Ps0</i> = 1,0 PU (<i>Pr2</i>). Typical value = 0,75.
            '''

        })
    '''
    Second value of pressure set point static characteristic, corresponding
    to <i>Ps0</i> = 1,0 PU (<i>Pr2</i>). Typical value = 0,75.
    '''

    psmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value of pressure set point static characteristic (<i>Psmn</i>).
            Typical value = 1.
            '''

        })
    '''
    Minimum value of pressure set point static characteristic (<i>Psmn</i>).
    Typical value = 1.
    '''

    rsmimn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value of integral regulator (<i>Rsmimn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum value of integral regulator (<i>Rsmimn</i>). Typical value
    = 0.
    '''

    rsmimx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value of integral regulator (<i>Rsmimx</i>). Typical value = 1,1.
            '''

        })
    '''
    Maximum value of integral regulator (<i>Rsmimx</i>). Typical value
    = 1,1.
    '''

    rvgmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum value of integral regulator (<i>Rvgmn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum value of integral regulator (<i>Rvgmn</i>). Typical value =
    0.
    '''

    rvgmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum value of integral regulator (<i>Rvgmx</i>). Typical value = 1,2.
            '''

        })
    '''
    Maximum value of integral regulator (<i>Rvgmx</i>). Typical value =
    1,2.
    '''

    srmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve opening (<i>Srmn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum valve opening (<i>Srmn</i>). Typical value = 0.
    '''

    srmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening (<i>Srmx</i>). Typical value = 1,1.
            '''

        })
    '''
    Maximum valve opening (<i>Srmx</i>). Typical value = 1,1.
    '''

    srsmp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves characteristic discontinuity point (<i>Srsmp</i>). Typical
            value = 0,43.
            '''

        })
    '''
    Intercept valves characteristic discontinuity point (<i>Srsmp</i>).
    Typical value = 0,43.
    '''

    ta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves rate opening time (<i>Ta</i>) (&gt;= 0). Typical value =
            0,8.
            '''

        })
    '''
    Control valves rate opening time (<i>Ta</i>) (&gt;= 0). Typical value
    = 0,8.
    '''

    tam: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves rate opening time (<i>Tam</i>) (&gt;= 0). Typical value
            = 0,8.
            '''

        })
    '''
    Intercept valves rate opening time (<i>Tam</i>) (&gt;= 0). Typical
    value = 0,8.
    '''

    tc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves rate closing time (<i>Tc</i>) (&gt;= 0). Typical value =
            0,5.
            '''

        })
    '''
    Control valves rate closing time (<i>Tc</i>) (&gt;= 0). Typical value
    = 0,5.
    '''

    tcm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intercept valves rate closing time (<i>Tcm</i>) (&gt;= 0). Typical value
            = 0,5.
            '''

        })
    '''
    Intercept valves rate closing time (<i>Tcm</i>) (&gt;= 0). Typical
    value = 0,5.
    '''

    tdc: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Derivative time constant of pressure regulator (<i>Tdc</i>) (&gt;= 0).
            Typical value = 90.
            '''

        })
    '''
    Derivative time constant of pressure regulator (<i>Tdc</i>) (&gt;=
    0). Typical value = 90.
    '''

    tf1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of fuel regulation (<i>Tf1</i>) (&gt;= 0). Typical value
            = 10.
            '''

        })
    '''
    Time constant of fuel regulation (<i>Tf1</i>) (&gt;= 0). Typical value
    = 10.
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of steam chest (<i>Tf2</i>) (&gt;= 0). Typical value = 10.
            '''

        })
    '''
    Time constant of steam chest (<i>Tf2</i>) (&gt;= 0). Typical value
    = 10.
    '''

    thp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High pressure (HP) time constant of the turbine (<i>Thp</i>) (&gt;= 0).
            Typical value = 0,15.
            '''

        })
    '''
    High pressure (HP) time constant of the turbine (<i>Thp</i>) (&gt;=
    0). Typical value = 0,15.
    '''

    tmp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low pressure (LP) time constant of the turbine (<i>Tmp</i>) (&gt;= 0).
            Typical value = 0,4.
            '''

        })
    '''
    Low pressure (LP) time constant of the turbine (<i>Tmp</i>) (&gt;=
    0). Typical value = 0,4.
    '''

    trh: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reheater time constant of the turbine (<i>Trh</i>) (&gt;= 0). Typical value
            = 10.
            '''

        })
    '''
    Reheater time constant of the turbine (<i>Trh</i>) (&gt;= 0). Typical
    value = 10.
    '''

    tv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Boiler time constant (<i>Tv</i>) (&gt;= 0). Typical value = 60.
            '''

        })
    '''
    Boiler time constant (<i>Tv</i>) (&gt;= 0). Typical value = 60.
    '''

    ty: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Control valves servo time constant (<i>Ty</i>) (&gt;= 0). Typical value
            = 0,1.
            '''

        })
    '''
    Control valves servo time constant (<i>Ty</i>) (&gt;= 0). Typical value
    = 0,1.
    '''

    y: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient of linearized equations of turbine (Stodola formulation) (<i>Y</i>).
            Typical value = 0,13.
            '''

        })
    '''
    Coefficient of linearized equations of turbine (Stodola formulation)
    (<i>Y</i>). Typical value = 0,13.
    '''

    yhpmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum control valve position (<i>Yhpmn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum control valve position (<i>Yhpmn</i>). Typical value = 0.
    '''

    yhpmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum control valve position (<i>Yhpmx</i>). Typical value = 1,1.
            '''

        })
    '''
    Maximum control valve position (<i>Yhpmx</i>). Typical value = 1,1.
    '''

    ympmn: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum intercept valve position (<i>Ympmn</i>). Typical value = 0.
            '''

        })
    '''
    Minimum intercept valve position (<i>Ympmn</i>). Typical value = 0.
    '''

    ympmx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum intercept valve position (<i>Ympmx</i>). Typical value = 1,1.
            '''

        })
    '''
    Maximum intercept valve position (<i>Ympmx</i>). Typical value = 1,1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamIEEE1(TurbineGovernorDynamics):
    '''
    IEEE steam turbine governor model.
    Ref<font color="#0f0f0f">erence: IEEE Transactions on Power Apparatus and
    Systems, November/December 1973, Volume PAS-92, Number 6, <i><u>Dynamic
    Models for Steam and Hydro Turbines in Power System Studies</u></i>, page
    1904.</font>
    '''

    k1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after first boiler pass (<i>K1</i>). Typical
            value = 0,2.
            '''

        })
    '''
    Fraction of HP shaft power after first boiler pass (<i>K1</i>). Typical
    value = 0,2.
    '''

    k2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after first boiler pass (<i>K2</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after first boiler pass (<i>K2</i>). Typical
    value = 0.
    '''

    k3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after second boiler pass (<i>K3</i>). Typical
            value = 0,3.
            '''

        })
    '''
    Fraction of HP shaft power after second boiler pass (<i>K3</i>). Typical
    value = 0,3.
    '''

    k4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after second boiler pass (<i>K4</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after second boiler pass (<i>K4</i>). Typical
    value = 0.
    '''

    k5: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after third boiler pass (<i>K5</i>). Typical
            value = 0,5.
            '''

        })
    '''
    Fraction of HP shaft power after third boiler pass (<i>K5</i>). Typical
    value = 0,5.
    '''

    k6: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after third boiler pass (<i>K6</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after third boiler pass (<i>K6</i>). Typical
    value = 0.
    '''

    k7: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of HP shaft power after fourth boiler pass (<i>K7</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of HP shaft power after fourth boiler pass (<i>K7</i>). Typical
    value = 0.
    '''

    k8: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of LP shaft power after fourth boiler pass (<i>K8</i>). Typical
            value = 0.
            '''

        })
    '''
    Fraction of LP shaft power after fourth boiler pass (<i>K8</i>). Typical
    value = 0.
    '''

    uc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s. Typical
            value = -10.
            '''

        })
    '''
    Maximum valve closing velocity (<i>Uc</i>) (&lt; 0). Unit = PU / s.
    Typical value = -10.
    '''

    uo: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening velocity (<i>Uo</i>) (&gt; 0). Unit = PU / s. Typical
            value = 1.
            '''

        })
    '''
    Maximum valve opening velocity (<i>Uo</i>) (&gt; 0). Unit = PU / s.
    Typical value = 1.
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor gain (reciprocal of droop) (<i>K</i>) (&gt; 0). Typical value
            = 25.
            '''

        })
    '''
    Governor gain (reciprocal of droop) (<i>K</i>) (&gt; 0). Typical value
    = 25.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0)<i>. </i>Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0)<i>. </i>Unit = MW.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum valve opening (<i>Pmax</i>) (&gt; GovSteamIEEE1.pmin). Typical
            value = 1.
            '''

        })
    '''
    Maximum valve opening (<i>Pmax</i>) (&gt; GovSteamIEEE1.pmin). Typical
    value = 1.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum valve opening (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteamIEEE1.pmax).
            Typical value = 0.
            '''

        })
    '''
    Minimum valve opening (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteamIEEE1.pmax).
    Typical value = 0.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lag time constant (<i>T1</i>) (&gt;= 0). Typical value = 0.
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lead time constant (<i>T2</i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Governor lead time constant (<i>T2</i>) (&gt;= 0). Typical value =
    0.
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Valve positioner time constant (<i>T3</i>) (&gt; 0). Typical value = 0,1.
            '''

        })
    '''
    Valve positioner time constant (<i>T3</i>) (&gt; 0). Typical value
    = 0,1.
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical value
            = 0,3.
            '''

        })
    '''
    Inlet piping/steam bowl time constant (<i>T4</i>) (&gt;= 0). Typical
    value = 0,3.
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of second boiler pass (<i>T5</i>) (&gt;= 0). Typical value
            = 5.
            '''

        })
    '''
    Time constant of second boiler pass (<i>T5</i>) (&gt;= 0). Typical
    value = 5.
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of third boiler pass (<i>T6</i>) (&gt;= 0). Typical value
            = 0,5.
            '''

        })
    '''
    Time constant of third boiler pass (<i>T6</i>) (&gt;= 0). Typical value
    = 0,5.
    '''

    t7: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of fourth boiler pass (<i>T7</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Time constant of fourth boiler pass (<i>T7</i>) (&gt;= 0). Typical
    value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GovSteamSGO(TurbineGovernorDynamics):
    '''
    Simplified steam turbine governor.
    '''

    k1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            One / PU regulation (<i>K1</i>).
            '''

        })
    '''
    One / PU regulation (<i>K1</i>).
    '''

    k2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction (<i>K2</i>).
            '''

        })
    '''
    Fraction (<i>K2</i>).
    '''

    k3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction (<i>K3</i>).
            '''

        })
    '''
    Fraction (<i>K3</i>).
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Upper power limit (<i>Pmax</i>) (&gt; GovSteamSGO.pmin).
            '''

        })
    '''
    Upper power limit (<i>Pmax</i>) (&gt; GovSteamSGO.pmin).
    '''

    pmin: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower power limit (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteamSGO.pmax).
            '''

        })
    '''
    Lower power limit (<i>Pmin</i>) (&gt;= 0 and &lt; GovSteamSGO.pmax).
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller lag (<i>T1</i>) (&gt;= 0).
            '''

        })
    '''
    Controller lag (<i>T1</i>) (&gt;= 0).
    '''

    t2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller lead compensation (<i>T2</i>) (&gt;= 0).
            '''

        })
    '''
    Controller lead compensation (<i>T2</i>) (&gt;= 0).
    '''

    t3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Governor lag (<i>T3</i>) (&gt; 0).
            '''

        })
    '''
    Governor lag (<i>T3</i>) (&gt; 0).
    '''

    t4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Delay due to steam inlet volumes associated with steam chest and inlet
            piping (<i>T4</i>) (&gt;= 0).
            '''

        })
    '''
    Delay due to steam inlet volumes associated with steam chest and inlet
    piping (<i>T4</i>) (&gt;= 0).
    '''

    t5: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reheater delay including hot and cold leads (<i>T5</i>) (&gt;= 0).
            '''

        })
    '''
    Reheater delay including hot and cold leads (<i>T5</i>) (&gt;= 0).
    '''

    t6: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Delay due to IP-LP turbine, crossover pipes and LP end hoods (<i>T6</i>)
            (&gt;= 0).
            '''

        })
    '''
    Delay due to IP-LP turbine, crossover pipes and LP end hoods (<i>T6</i>)
    (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TurbineGovernorUserDefined(TurbineGovernorDynamics):
    '''
    Turbine-governor function block whose dynamic behaviour is described by
    <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.TurbineGovernorUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TurbineLoadControllerDynamics(DynamicsFunctionBlock):
    '''
    Turbine load controller function block whose behaviour is described by
    reference to a standard model <font color="#0f0f0f">or by definition of
    a user-defined model.</font>
    '''

    TurbineGovernorDynamics: Optional[TurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TurbineGovernorDynamics.TurbineLoadControllerDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Turbine-governor controlled by this turbine load controller.
            '''

        })
    '''
    Turbine-governor controlled by this turbine load controller.
    '''

    TurbineGovernorDynamics: Optional[TurbineGovernorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineGovernorDynamics.TurbineLoadControllerDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Turbine-governor controlled by this turbine load controller.
            '''

        })
    '''
    Turbine-governor controlled by this turbine load controller.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineLoadControllerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TurbLCFB1(TurbineLoadControllerDynamics):
    '''
    Turbine load controller model developed by WECC. This model represents
    a supervisory turbine load controller that acts to maintain turbine power
    at a set value by continuous adjustment of the turbine governor speed-load
    reference. This model is intended to represent slow reset 'outer loop'
    controllers managing the action of the turbine governor.
    '''

    fbf: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency bias flag (<i>Fbf</i>).
            true = enable frequency bias
            false = disable frequency bias.
            Typical value = false.
            '''

        })
    '''
    Frequency bias flag (<i>Fbf</i>).
    true = enable frequency bias
    false = disable frequency bias.
    Typical value = false.
    '''

    pbf: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power controller flag (<i>Pbf</i>).
            true = enable load controller
            false = disable load controller.
            Typical value = false.
            '''

        })
    '''
    Power controller flag (<i>Pbf</i>).
    true = enable load controller
    false = disable load controller.
    Typical value = false.
    '''

    speedReferenceGovernor: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of turbine governor reference (<i>Type</i>).
            true = speed reference governor
            false = load reference governor.
            Typical value = true.
            '''

        })
    '''
    Type of turbine governor reference (<i>Type</i>).
    true = speed reference governor
    false = load reference governor.
    Typical value = true.
    '''

    db: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Controller deadband (<i>db</i>). Typical value = 0.
            '''

        })
    '''
    Controller deadband (<i>db</i>). Typical value = 0.
    '''

    emax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum control error (<i>Emax</i>) (see parameter detail 4). Typical value
            = 0,02.
            '''

        })
    '''
    Maximum control error (<i>Emax</i>) (see parameter detail 4). Typical
    value = 0,02.
    '''

    fb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency bias gain (<i>Fb</i>). Typical value = 0.
            '''

        })
    '''
    Frequency bias gain (<i>Fb</i>). Typical value = 0.
    '''

    irmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum turbine speed/load reference bias (<i>Irmax</i>) (see parameter
            detail 3). Typical value = 0.
            '''

        })
    '''
    Maximum turbine speed/load reference bias (<i>Irmax</i>) (see parameter
    detail 3). Typical value = 0.
    '''

    ki: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain (<i>Ki</i>). Typical value = 0.
            '''

        })
    '''
    Integral gain (<i>Ki</i>). Typical value = 0.
    '''

    kp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain (<i>Kp</i>). Typical value = 0.
            '''

        })
    '''
    Proportional gain (<i>Kp</i>). Typical value = 0.
    '''

    mwbase: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
            '''

        })
    '''
    Base for power values (<i>MWbase</i>) (&gt; 0). Unit = MW.
    '''

    pmwset: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power controller setpoint (<i>Pmwset</i>) (see parameter detail 1). Unit
            = MW. Typical value = 0.
            '''

        })
    '''
    Power controller setpoint (<i>Pmwset</i>) (see parameter detail 1).
    Unit = MW. Typical value = 0.
    '''

    tpelec: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power transducer time constant (<i>Tpelec</i>) (&gt;= 0). Typical value
            = 0.
            '''

        })
    '''
    Power transducer time constant (<i>Tpelec</i>) (&gt;= 0). Typical value
    = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineLoadControllerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TurbineLoadControllerUserDefined(TurbineLoadControllerDynamics):
    '''
    Turbine load controller function block whose dynamic behaviour is described
    by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.TurbineLoadControllerUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcitationLimiterDynamics(DynamicsFunctionBlock):
    '''
    Underexcitation limiter function block whose behaviour is described by
    reference to a standard model <font color="#0f0f0f">or by definition of
    a user-defined model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.UnderexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this underexcitation limiter model is
            associated.
            '''

        })
    '''
    Excitation system model with which this underexcitation limiter model
    is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.UnderexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by this underexcitation limiter model.
            '''

        })
    '''
    Remote input signal used by this underexcitation limiter model.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.UnderexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this underexcitation limiter model is
            associated.
            '''

        })
    '''
    Excitation system model with which this underexcitation limiter model
    is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.UnderexcitationLimiterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this underexcitation limiter model.
            '''

        })
    '''
    Remote input signal used by this underexcitation limiter model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcLim2Simplified(UnderexcitationLimiterDynamics):
    '''
    Simplified type UEL2 underexcitation limiter. This model can be derived
    from UnderexcLimIEEE2. The limit characteristic (look �up table) is a single
    straight-line, the same as UnderexcLimIEEE2 (see Figure 10.4 (p 32), IEEE
    421.5-2005 Section 10.2).
    '''

    kui: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain Under excitation limiter (<i>K</i><i><sub>UI</sub></i>). Typical value
            = 0,1.
            '''

        })
    '''
    Gain Under excitation limiter (<i>K</i><i><sub>UI</sub></i>). Typical
    value = 0,1.
    '''

    p0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment P initial point (<i>P</i><i><sub>0</sub></i>). Typical value =
            0.
            '''

        })
    '''
    Segment P initial point (<i>P</i><i><sub>0</sub></i>). Typical value
    = 0.
    '''

    p1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment P end point (<i>P</i><i><sub>1</sub></i>). Typical value = 1.
            '''

        })
    '''
    Segment P end point (<i>P</i><i><sub>1</sub></i>). Typical value =
    1.
    '''

    q0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment Q initial point (<i>Q</i><i><sub>0</sub></i>). Typical value =
            -0,31.
            '''

        })
    '''
    Segment Q initial point (<i>Q</i><i><sub>0</sub></i>). Typical value
    = -0,31.
    '''

    q1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment Q end point (<i>Q</i><i><sub>1</sub></i>). Typical value = -0,1.
            '''

        })
    '''
    Segment Q end point (<i>Q</i><i><sub>1</sub></i>). Typical value =
    -0,1.
    '''

    vuimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum error signal (<i>V</i><i><sub>UIMAX</sub></i>) (&gt; UnderexcLim2Simplified.vuimin).
            Typical value = 1.
            '''

        })
    '''
    Maximum error signal (<i>V</i><i><sub>UIMAX</sub></i>) (&gt; UnderexcLim2Simplified.vuimin).
    Typical value = 1.
    '''

    vuimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum error signal (<i>V</i><i><sub>UIMIN</sub></i>) (&lt; UnderexcLim2Simplified.vuimax).
            Typical value = 0.
            '''

        })
    '''
    Minimum error signal (<i>V</i><i><sub>UIMIN</sub></i>) (&lt; UnderexcLim2Simplified.vuimax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcLimIEEE1(UnderexcitationLimiterDynamics):
    '''
    Type UEL1 model which has a circular limit boundary when plotted in terms
    of machine reactive power vs. real power output.
    Reference: IEEE UEL1 421.5-2005, 10.1.
    '''

    kuc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL centre setting (<i>K</i><i><sub>UC</sub></i>). Typical value = 1,38.
            '''

        })
    '''
    UEL centre setting (<i>K</i><i><sub>UC</sub></i>). Typical value =
    1,38.
    '''

    kuf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL excitation system stabilizer gain (<i>K</i><i><sub>UF</sub></i>). Typical
            value = 3,3.
            '''

        })
    '''
    UEL excitation system stabilizer gain (<i>K</i><i><sub>UF</sub></i>).
    Typical value = 3,3.
    '''

    kui: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integral gain (<i>K</i><i><sub>UI</sub></i>). Typical value = 0.
            '''

        })
    '''
    UEL integral gain (<i>K</i><i><sub>UI</sub></i>). Typical value = 0.
    '''

    kul: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL proportional gain (<i>K</i><i><sub>UL</sub></i>). Typical value = 100.
            '''

        })
    '''
    UEL proportional gain (<i>K</i><i><sub>UL</sub></i>). Typical value
    = 100.
    '''

    kur: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL radius setting (<i>K</i><i><sub>UR</sub></i>). Typical value = 1,95.
            '''

        })
    '''
    UEL radius setting (<i>K</i><i><sub>UR</sub></i>). Typical value =
    1,95.
    '''

    tu1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>U1</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>U1</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tu2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>U2</sub></i>) (&gt;= 0). Typical
            value = 0,05.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>U2</sub></i>) (&gt;= 0). Typical
    value = 0,05.
    '''

    tu3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>U3</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>U3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tu4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>U4</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>U4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    vucmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL maximum limit for operating point phasor magnitude (<i>V</i><i><sub>UCMAX</sub></i>).
            Typical value = 5,8.
            '''

        })
    '''
    UEL maximum limit for operating point phasor magnitude (<i>V</i><i><sub>UCMAX</sub></i>).
    Typical value = 5,8.
    '''

    vuimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integrator output maximum limit (<i>V</i><i><sub>UIMAX</sub></i>) (&gt;
            UnderexcLimIEEE1.vuimin).
            '''

        })
    '''
    UEL integrator output maximum limit (<i>V</i><i><sub>UIMAX</sub></i>)
    (&gt; UnderexcLimIEEE1.vuimin).
    '''

    vuimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integrator output minimum limit (<i>V</i><i><sub>UIMIN</sub></i>) (&lt;
            UnderexcLimIEEE1.vuimax).
            '''

        })
    '''
    UEL integrator output minimum limit (<i>V</i><i><sub>UIMIN</sub></i>)
    (&lt; UnderexcLimIEEE1.vuimax).
    '''

    vulmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL output maximum limit (<i>V</i><i><sub>ULMAX</sub></i>) (&gt; UnderexcLimIEEE1.vulmin).
            Typical value = 18.
            '''

        })
    '''
    UEL output maximum limit (<i>V</i><i><sub>ULMAX</sub></i>) (&gt; UnderexcLimIEEE1.vulmin).
    Typical value = 18.
    '''

    vulmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL output minimum limit (<i>V</i><i><sub>ULMIN</sub></i>) (&lt; UnderexcLimIEEE1.vulmax).
            Typical value = -18.
            '''

        })
    '''
    UEL output minimum limit (<i>V</i><i><sub>ULMIN</sub></i>) (&lt; UnderexcLimIEEE1.vulmax).
    Typical value = -18.
    '''

    vurmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL maximum limit for radius phasor magnitude (<i>V</i><i><sub>URMAX</sub></i>).
            Typical value = 5,8.
            '''

        })
    '''
    UEL maximum limit for radius phasor magnitude (<i>V</i><i><sub>URMAX</sub></i>).
    Typical value = 5,8.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcLimIEEE2(UnderexcitationLimiterDynamics):
    '''
    Type UEL2 underexcitation limiter which has either a straight-line or multi-segment
    characteristic when plotted in terms of machine reactive power output vs.
    real power output.
    Reference: IEEE UEL2 421.5-2005, 10.2 (limit characteristic lookup table
    shown in Figure 10.4 (p 32)).
    '''

    k1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL terminal voltage exponent applied to real power input to UEL limit
            look-up table (<i>k1</i>). Typical value = 2.
            '''

        })
    '''
    UEL terminal voltage exponent applied to real power input to UEL limit
    look-up table (<i>k1</i>). Typical value = 2.
    '''

    k2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL terminal voltage exponent applied to reactive power output from UEL
            limit look-up table (<i>k2</i>). Typical value = 2.
            '''

        })
    '''
    UEL terminal voltage exponent applied to reactive power output from
    UEL limit look-up table (<i>k2</i>). Typical value = 2.
    '''

    kfb: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain associated with optional integrator feedback input signal to UEL (<i>K</i><i><sub>FB</sub></i>).
            Typical value = 0.
            '''

        })
    '''
    Gain associated with optional integrator feedback input signal to UEL
    (<i>K</i><i><sub>FB</sub></i>). Typical value = 0.
    '''

    kuf: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL excitation system stabilizer gain (<i>K</i><i><sub>UF</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    UEL excitation system stabilizer gain (<i>K</i><i><sub>UF</sub></i>).
    Typical value = 0.
    '''

    kui: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integral gain (<i>K</i><i><sub>UI</sub></i>). Typical value = 0,5.
            '''

        })
    '''
    UEL integral gain (<i>K</i><i><sub>UI</sub></i>). Typical value = 0,5.
    '''

    kul: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL proportional gain (<i>K</i><i><sub>UL</sub></i>). Typical value = 0,8.
            '''

        })
    '''
    UEL proportional gain (<i>K</i><i><sub>UL</sub></i>). Typical value
    = 0,8.
    '''

    p0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>0</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>0</sub></i>). Typical
    value = 0.
    '''

    p1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>1</sub></i>). Typical
            value = 0,3.
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>1</sub></i>). Typical
    value = 0,3.
    '''

    p10: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>10</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>10</sub></i>).
    '''

    p2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>2</sub></i>). Typical
            value = 0,6.
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>2</sub></i>). Typical
    value = 0,6.
    '''

    p3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>3</sub></i>). Typical
            value = 0,9.
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>3</sub></i>). Typical
    value = 0,9.
    '''

    p4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>4</sub></i>). Typical
            value = 1,02.
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>4</sub></i>). Typical
    value = 1,02.
    '''

    p5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>5</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>5</sub></i>).
    '''

    p6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>6</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>6</sub></i>).
    '''

    p7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>7</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>7</sub></i>).
    '''

    p8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>8</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>8</sub></i>).
    '''

    p9: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power values for endpoints (<i>P</i><i><sub>9</sub></i>).
            '''

        })
    '''
    Real power values for endpoints (<i>P</i><i><sub>9</sub></i>).
    '''

    q0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>0</sub></i>). Typical
            value = -0,31.
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>0</sub></i>).
    Typical value = -0,31.
    '''

    q1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>1</sub></i>). Typical
            value = -0,31.
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>1</sub></i>).
    Typical value = -0,31.
    '''

    q10: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>10</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>10</sub></i>).
    '''

    q2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>2</sub></i>). Typical
            value = -0,28.
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>2</sub></i>).
    Typical value = -0,28.
    '''

    q3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>3</sub></i>). Typical
            value = -0,21.
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>3</sub></i>).
    Typical value = -0,21.
    '''

    q4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>4</sub></i>). Typical
            value = 0.
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>4</sub></i>).
    Typical value = 0.
    '''

    q5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>5</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>5</sub></i>).
    '''

    q6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>6</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>6</sub></i>).
    '''

    q7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>7</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>7</sub></i>).
    '''

    q8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>8</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>8</sub></i>).
    '''

    q9: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power values for endpoints (<i>Q</i><i><sub>9</sub></i>).
            '''

        })
    '''
    Reactive power values for endpoints (<i>Q</i><i><sub>9</sub></i>).
    '''

    tu1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>U1</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>U1</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tu2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>U2</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>U2</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tu3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lead time constant (<i>T</i><i><sub>U3</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lead time constant (<i>T</i><i><sub>U3</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tu4: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL lag time constant (<i>T</i><i><sub>U4</sub></i>) (&gt;= 0). Typical
            value = 0.
            '''

        })
    '''
    UEL lag time constant (<i>T</i><i><sub>U4</sub></i>) (&gt;= 0). Typical
    value = 0.
    '''

    tul: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant associated with optional integrator feedback input signal
            to UEL (<i>T</i><i><sub>UL</sub></i>) (&gt;= 0). Typical value = 0.
            '''

        })
    '''
    Time constant associated with optional integrator feedback input signal
    to UEL (<i>T</i><i><sub>UL</sub></i>) (&gt;= 0). Typical value = 0.
    '''

    tup: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power filter time constant (<i>T</i><i><sub>UP</sub></i>) (&gt;= 0).
            Typical value = 5.
            '''

        })
    '''
    Real power filter time constant (<i>T</i><i><sub>UP</sub></i>) (&gt;=
    0). Typical value = 5.
    '''

    tuq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power filter time constant (<i>T</i><i><sub>UQ</sub></i>) (&gt;=
            0). Typical value = 0.
            '''

        })
    '''
    Reactive power filter time constant (<i>T</i><i><sub>UQ</sub></i>)
    (&gt;= 0). Typical value = 0.
    '''

    tuv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage filter time constant (<i>T</i><i><sub>UV</sub></i>) (&gt;= 0).
            Typical value = 5.
            '''

        })
    '''
    Voltage filter time constant (<i>T</i><i><sub>UV</sub></i>) (&gt;=
    0). Typical value = 5.
    '''

    vuimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integrator output maximum limit (<i>V</i><i><sub>UIMAX</sub></i>) (&gt;
            UnderexcLimIEEE2.vuimin). Typical value = 0,25.
            '''

        })
    '''
    UEL integrator output maximum limit (<i>V</i><i><sub>UIMAX</sub></i>)
    (&gt; UnderexcLimIEEE2.vuimin). Typical value = 0,25.
    '''

    vuimin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL integrator output minimum limit (<i>V</i><i><sub>UIMIN</sub></i>) (&lt;
            UnderexcLimIEEE2.vuimax). Typical value = 0.
            '''

        })
    '''
    UEL integrator output minimum limit (<i>V</i><i><sub>UIMIN</sub></i>)
    (&lt; UnderexcLimIEEE2.vuimax). Typical value = 0.
    '''

    vulmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL output maximum limit (<i>V</i><i><sub>ULMAX</sub></i>) (&gt; UnderexcLimIEEE2.vulmin).
            Typical value = 0,25.
            '''

        })
    '''
    UEL output maximum limit (<i>V</i><i><sub>ULMAX</sub></i>) (&gt; UnderexcLimIEEE2.vulmin).
    Typical value = 0,25.
    '''

    vulmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UEL output minimum limit (<i>V</i><i><sub>ULMIN</sub></i>) (&lt; UnderexcLimIEEE2.vulmax).
            Typical value = 0.
            '''

        })
    '''
    UEL output minimum limit (<i>V</i><i><sub>ULMIN</sub></i>) (&lt; UnderexcLimIEEE2.vulmax).
    Typical value = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcLimX1(UnderexcitationLimiterDynamics):
    '''
    <font color="#0f0f0f">Allis-Chalmers minimum excitation limiter.</font>
    '''

    k: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit slope (<i>K</i>) (&gt; 0).
            '''

        })
    '''
    Minimum excitation limit slope (<i>K</i>) (&gt; 0).
    '''

    kf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Differential gain (<i>K</i><i><sub>F2</sub></i>).
            '''

        })
    '''
    Differential gain (<i>K</i><i><sub>F2</sub></i>).
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit gain (<i>K</i><i><sub>M</sub></i>).
            '''

        })
    '''
    Minimum excitation limit gain (<i>K</i><i><sub>M</sub></i>).
    '''

    melmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit value (<i>MELMAX</i>).
            '''

        })
    '''
    Minimum excitation limit value (<i>MELMAX</i>).
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Differential time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Differential time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0).
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit time constant (<i>T</i><i><sub>M</sub></i>) (&gt;=
            0).
            '''

        })
    '''
    Minimum excitation limit time constant (<i>T</i><i><sub>M</sub></i>)
    (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcLimX2(UnderexcitationLimiterDynamics):
    '''
    <font color="#0f0f0f">Westinghouse minimum excitation limiter.</font>
    '''

    kf2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Differential gain (<i>K</i><i><sub>F2</sub></i>).
            '''

        })
    '''
    Differential gain (<i>K</i><i><sub>F2</sub></i>).
    '''

    km: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit gain (<i>K</i><i><sub>M</sub></i>).
            '''

        })
    '''
    Minimum excitation limit gain (<i>K</i><i><sub>M</sub></i>).
    '''

    melmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit value (<i>MELMAX</i>).
            '''

        })
    '''
    Minimum excitation limit value (<i>MELMAX</i>).
    '''

    qo: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation centre setting (<i>Q</i><i><sub>O</sub></i>).
            '''

        })
    '''
    Excitation centre setting (<i>Q</i><i><sub>O</sub></i>).
    '''

    r: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation radius (<i>R</i>).
            '''

        })
    '''
    Excitation radius (<i>R</i>).
    '''

    tf2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Differential time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0).
            '''

        })
    '''
    Differential time constant (<i>T</i><i><sub>F2</sub></i>) (&gt;= 0).
    '''

    tm: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum excitation limit time constant (<i>T</i><i><sub>M</sub></i>) (&gt;=
            0).
            '''

        })
    '''
    Minimum excitation limit time constant (<i>T</i><i><sub>M</sub></i>)
    (&gt;= 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UnderexcitationLimiterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnderexcitationLimiterUserDefined(UnderexcitationLimiterDynamics):
    '''
    Underexcitation limiter function block whose dynamic behaviour is described
    by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.UnderexcitationLimiterUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageAdjusterDynamics(DynamicsFunctionBlock):
    '''
    Voltage adjuster function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.VoltageAdjusterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power factor or VAr controller type 1 model with which this voltage adjuster
            is associated.
            '''

        })
    '''
    Power factor or VAr controller type 1 model with which this voltage
    adjuster is associated.
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.VoltageAdjusterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Power factor or VAr controller type 1 model with which this voltage adjuster
            is associated.
            '''

        })
    '''
    Power factor or VAr controller type 1 model with which this voltage
    adjuster is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageAdjusterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VAdjIEEE(VoltageAdjusterDynamics):
    '''
    IEEE voltage adjuster which is used to represent the voltage adjuster in
    either a power factor or VAr control system.
    Reference: IEEE 421.5-2005, 11.1.
    '''

    adjslew: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate at which output of adjuster changes (<i>ADJ_SLEW</i>). Unit = s /
            PU. Typical value = 300.
            '''

        })
    '''
    Rate at which output of adjuster changes (<i>ADJ_SLEW</i>). Unit =
    s / PU. Typical value = 300.
    '''

    vadjf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set high to provide a continuous raise or lower (<i>V</i><i><sub>ADJF</sub></i>).
            '''

        })
    '''
    Set high to provide a continuous raise or lower (<i>V</i><i><sub>ADJF</sub></i>).
    '''

    taoff: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time that adjuster pulses are off (<i>T</i><i><sub>AOFF</sub></i>) (&gt;=
            0). Typical value = 0,5.
            '''

        })
    '''
    Time that adjuster pulses are off (<i>T</i><i><sub>AOFF</sub></i>)
    (&gt;= 0). Typical value = 0,5.
    '''

    taon: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time that adjuster pulses are on (<i>T</i><i><sub>AON</sub></i>) (&gt;=
            0). Typical value = 0,1.
            '''

        })
    '''
    Time that adjuster pulses are on (<i>T</i><i><sub>AON</sub></i>) (&gt;=
    0). Typical value = 0,1.
    '''

    vadjmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum output of the adjuster (<i>V</i><i><sub>ADJMAX</sub></i>) (&gt;
            VAdjIEEE.vadjmin). Typical value = 1,1.
            '''

        })
    '''
    Maximum output of the adjuster (<i>V</i><i><sub>ADJMAX</sub></i>) (&gt;
    VAdjIEEE.vadjmin). Typical value = 1,1.
    '''

    vadjmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum output of the adjuster (<i>V</i><i><sub>ADJMIN</sub></i>) (&lt;
            VAdjIEEE.vadjmax). Typical value = 0,9.
            '''

        })
    '''
    Minimum output of the adjuster (<i>V</i><i><sub>ADJMIN</sub></i>) (&lt;
    VAdjIEEE.vadjmax). Typical value = 0,9.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageAdjusterDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageAdjusterUserDefined(VoltageAdjusterDynamics):
    '''
    <font color="#0f0f0f">Voltage adjuster</font> function block whose dynamic
    behaviour is described by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.VoltageAdjusterUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageCompensatorDynamics(DynamicsFunctionBlock):
    '''
    Voltage compensator function block whose behaviour is described by reference
    to a standard model <font color="#0f0f0f">or by definition of a user-defined
    model.</font>
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.VoltageCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Excitation system model with which this voltage compensator is associated.
            '''

        })
    '''
    Excitation system model with which this voltage compensator is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.VoltageCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by this voltage compensator model.
            '''

        })
    '''
    Remote input signal used by this voltage compensator model.
    '''

    ExcitationSystemDynamics: Optional[ExcitationSystemDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemDynamics.VoltageCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Excitation system model with which this voltage compensator is associated.
            '''

        })
    '''
    Excitation system model with which this voltage compensator is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.VoltageCompensatorDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this voltage compensator model.
            '''

        })
    '''
    Remote input signal used by this voltage compensator model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VCompIEEEType1(VoltageCompensatorDynamics):
    '''
    <font color="#0f0f0f">Terminal voltage transducer and load compensator
    as defined in IEEE 421.5-2005, 4. This model is common to all excitation
    system models described in the IEEE Standard. </font>
    <font color="#0f0f0f">Parameter details:</font>
    <ol>
    <li><font color="#0f0f0f">If <i>Rc</i> and <i>Xc</i> are set to zero, the
    l</font>oad compensation is not employed and the behaviour is as a simple
    sensing circuit.</li>
    </ol>
    <ol>
    <li>If all parameters (<i>Rc</i>, <i>Xc</i> and <i>Tr</i>) are set to zero,
    the standard model VCompIEEEType1 is bypassed.</li>
    </ol>
    Reference: IEEE 421.5-2005 4.
    '''

    rc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Resistive component of compensation of a generator
            (<i>Rc</i>) (&gt;= 0).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Resistive component of compensation of a generator
    (<i>Rc</i>) (&gt;= 0).</font>
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Time constant which is used for the combined voltage
            sensing and compensation signal (<i>Tr</i>) (&gt;= 0).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Time constant which is used for the combined
    voltage sensing and compensation signal (<i>Tr</i>) (&gt;= 0).</font>
    '''

    xc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Reactive component of compensation of a generator
            (<i>Xc</i>) (&gt;= 0).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Reactive component of compensation of a generator
    (<i>Xc</i>) (&gt;= 0).</font>
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VCompIEEEType2(VoltageCompensatorDynamics):
    '''
    <font color="#0f0f0f">Terminal voltage transducer and load compensator
    as defined in IEEE 421.5-2005, 4. This model is designed to cover the following
    types of compensation: </font>
    <ul>
    <li><font color="#0f0f0f">reactive droop;</font></li>
    <li><font color="#0f0f0f">transformer-drop or line-drop compensation;</font></li>
    <li><font color="#0f0f0f">reactive differential compensation known also
    as cross-current compensation.</font></li>
    </ul>
    <font color="#0f0f0f">Reference: IEEE 421.5-2005, 4.</font>
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Time constant which is used for the combined voltage
            sensing and compensation signal (<i>Tr</i>) (&gt;= 0).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Time constant which is used for the combined
    voltage sensing and compensation signal (<i>Tr</i>) (&gt;= 0).</font>
    '''

    GenICompensationForGenJ: list[GenICompensationForGenJ] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GenICompensationForGenJ.VcompIEEEType2',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Compensation of this voltage compensator's generator for current flow out
            of another generator.
            '''

        })
    '''
    Compensation of this voltage compensator's generator for current flow
    out of another generator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VoltageCompensatorUserDefined(VoltageCompensatorDynamics):
    '''
    Voltage compensator function block whose dynamic behaviour is described
    by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.VoltageCompensatorUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class WindPlantDynamics(DynamicsFunctionBlock):
    '''
    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.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindPlantDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The remote signal with which this power plant is associated.
            '''

        })
    '''
    The remote signal with which this power plant is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindPlantDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The remote signal with which this power plant is associated.
            '''

        })
    '''
    The remote signal with which this power plant is associated.
    '''

    WindTurbineType3or4Dynamics: list[WindTurbineType3or4Dynamics] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindTurbineType3or4Dynamics.WindPlantDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind turbine type 3 or type 4 associated with this wind plant.
            '''

        })
    '''
    The wind turbine type 3 or type 4 associated with this wind plant.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPlantIEC(WindPlantDynamics):
    '''
    Simplified IEC type plant level model.
    Reference: IEC 61400-27-1:2015, Annex D.
    '''

    WindPlantFreqPcontrolIEC: Optional[WindPlantFreqPcontrolIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPlantFreqPcontrolIEC.WindPlantIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind plant frequency and active power control model associated with this
            wind plant.
            '''

        })
    '''
    Wind plant frequency and active power control model associated with
    this wind plant.
    '''

    WindPlantReactiveControlIEC: Optional[WindPlantReactiveControlIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPlantReactiveControlIEC.WindPlantIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind plant model with which this wind reactive control is associated.
            '''

        })
    '''
    Wind plant model with which this wind reactive control is associated.
    '''

    WindPlantFreqPcontrolIEC: Optional[WindPlantFreqPcontrolIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantFreqPcontrolIEC.WindPlantIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind plant frequency and active power control model associated with this
            wind plant.
            '''

        })
    '''
    Wind plant frequency and active power control model associated with
    this wind plant.
    '''

    WindPlantReactiveControlIEC: Optional[WindPlantReactiveControlIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantReactiveControlIEC.WindPlantIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind plant model with which this wind reactive control is associated.
            '''

        })
    '''
    Wind plant model with which this wind reactive control is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPlantUserDefined(WindPlantDynamics):
    '''
    Wind plant function block whose dynamic behaviour is described by <font
    color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.WindPlantUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType1or2Dynamics(DynamicsFunctionBlock):
    '''
    Parent class supporting relationships to wind turbines type 1 and type
    2 and their control models. Generator model for wind turbine of type 1
    or type 2 is a standard asynchronous generator model.
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.WindTurbineType1or2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asynchronous machine model with which this wind generator type 1 or type
            2 model is associated.
            '''

        })
    '''
    Asynchronous machine model with which this wind generator type 1 or
    type 2 model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindTurbineType1or2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by this wind generator type 1 or type 2 model.
            '''

        })
    '''
    Remote input signal used by this wind generator type 1 or type 2 model.
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.WindTurbineType1or2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asynchronous machine model with which this wind generator type 1 or type
            2 model is associated.
            '''

        })
    '''
    Asynchronous machine model with which this wind generator type 1 or
    type 2 model is associated.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindTurbineType1or2Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by this wind generator type 1 or type 2 model.
            '''

        })
    '''
    Remote input signal used by this wind generator type 1 or type 2 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType1or2IEC(WindTurbineType1or2Dynamics):
    '''
    Parent class supporting relationships to IEC wind turbines type 1 and type
    2 including their control models.
    Generator model for wind turbine of IEC type 1 or type 2 is a standard
    asynchronous generator model.
    Reference: IEC 61400-27-1:2015, 5.5.2 and 5.5.3.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType1or2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind mechanical model associated with this wind generator type 1 or type
            2 model.
            '''

        })
    '''
    Wind mechanical model associated with this wind generator type 1 or
    type 2 model.
    '''

    WindProtectionIEC: Optional[WindProtectionIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindProtectionIEC.WindTurbineType1or2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbune protection model associated with this wind generator type
            1 or type 2 model.
            '''

        })
    '''
    Wind turbune protection model associated with this wind generator type
    1 or type 2 model.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType1or2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind mechanical model associated with this wind generator type 1 or type
            2 model.
            '''

        })
    '''
    Wind mechanical model associated with this wind generator type 1 or
    type 2 model.
    '''

    WindProtectionIEC: Optional[WindProtectionIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindProtectionIEC.WindTurbineType1or2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbune protection model associated with this wind generator type
            1 or type 2 model.
            '''

        })
    '''
    Wind turbune protection model associated with this wind generator type
    1 or type 2 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenTurbineType1aIEC(WindTurbineType1or2IEC):
    '''
    Wind turbine IEC type 1A.
    Reference: IEC 61400-27-1:2015, 5.5.2.2.
    '''

    WindAeroConstIEC: Optional[WindAeroConstIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindAeroConstIEC.WindGenTurbineType1aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind turbine type 1A model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind turbine type 1A model.
    '''

    WindAeroConstIEC: Optional[WindAeroConstIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindAeroConstIEC.WindGenTurbineType1aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind turbine type 1A model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind turbine type 1A model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenTurbineType1bIEC(WindTurbineType1or2IEC):
    '''
    Wind turbine IEC type 1B.
    Reference: IEC 61400-27-1:2015, 5.5.2.3.
    '''

    WindPitchContPowerIEC: Optional[WindPitchContPowerIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPitchContPowerIEC.WindGenTurbineType1bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pitch control power model associated with this wind turbine type 1B model.
            '''

        })
    '''
    Pitch control power model associated with this wind turbine type 1B
    model.
    '''

    WindPitchContPowerIEC: Optional[WindPitchContPowerIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPitchContPowerIEC.WindGenTurbineType1bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Pitch control power model associated with this wind turbine type 1B model.
            '''

        })
    '''
    Pitch control power model associated with this wind turbine type 1B
    model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenTurbineType2IEC(WindTurbineType1or2IEC):
    '''
    Wind turbine IEC type 2.
    Reference: IEC 61400-27-1:2015, 5.5.3.
    '''

    WindContRotorRIEC: Optional[WindContRotorRIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContRotorRIEC.WindGenTurbineType2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control rotor resistance model associated with wind turbine type 2
            model.
            '''

        })
    '''
    Wind control rotor resistance model associated with wind turbine type
    2 model.
    '''

    WindPitchContPowerIEC: Optional[WindPitchContPowerIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPitchContPowerIEC.WindGenTurbineType2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pitch control power model associated with this wind turbine type 2 model.
            '''

        })
    '''
    Pitch control power model associated with this wind turbine type 2
    model.
    '''

    WindContRotorRIEC: Optional[WindContRotorRIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContRotorRIEC.WindGenTurbineType2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control rotor resistance model associated with wind turbine type 2
            model.
            '''

        })
    '''
    Wind control rotor resistance model associated with wind turbine type
    2 model.
    '''

    WindPitchContPowerIEC: Optional[WindPitchContPowerIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPitchContPowerIEC.WindGenTurbineType2IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Pitch control power model associated with this wind turbine type 2 model.
            '''

        })
    '''
    Pitch control power model associated with this wind turbine type 2
    model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindType1or2UserDefined(WindTurbineType1or2Dynamics):
    '''
    Wind type 1 or type 2 function block whose dynamic behaviour is described
    by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.WindType1or2UserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType3or4Dynamics(DynamicsFunctionBlock):
    '''
    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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.WindTurbineType3or4Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        '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.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindTurbineType3or4Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote input signal used by these wind turbine type 3 or type 4 models.
            '''

        })
    '''
    Remote input signal used by these wind turbine type 3 or type 4 models.
    '''

    WindPlantDynamics: Optional[WindPlantDynamics] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantDynamics.WindTurbineType3or4Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The wind plant with which the wind turbines type 3 or type 4 are associated.
            '''

        })
    '''
    The wind plant with which the wind turbines type 3 or type 4 are associated.
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.WindTurbineType3or4Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    RemoteInputSignal: Optional[RemoteInputSignal] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteInputSignal.WindTurbineType3or4Dynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote input signal used by these wind turbine type 3 or type 4 models.
            '''

        })
    '''
    Remote input signal used by these wind turbine type 3 or type 4 models.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType3or4IEC(WindTurbineType3or4Dynamics):
    '''
    Parent class supporting relationships to IEC wind turbines type 3 and type
    4 including their control models.
    '''

    WindContCurrLimIEC: Optional[WindContCurrLimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContCurrLimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control current limitation model associated with this wind turbine
            type 3 or type 4 model.
            '''

        })
    '''
    Wind control current limitation model associated with this wind turbine
    type 3 or type 4 model.
    '''

    WIndContQIEC: Optional[WindContQIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContQIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control Q model associated with this wind turbine type 3 or type 4
            model.
            '''

        })
    '''
    Wind control Q model associated with this wind turbine type 3 or type
    4 model.
    '''

    WindContQLimIEC: Optional[WindContQLimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQLimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Constant Q limitation model associated with this wind generator type 3
            or type 4 model.
            '''

        })
    '''
    Constant Q limitation model associated with this wind generator type
    3 or type 4 model.
    '''

    WindContQPQULimIEC: Optional[WindContQPQULimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQPQULimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            QP and QU limitation model associated with this wind generator type 3 or
            type 4 model.
            '''

        })
    '''
    QP and QU limitation model associated with this wind generator type
    3 or type 4 model.
    '''

    WindProtectionIEC: Optional[WindProtectionIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindProtectionIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbune protection model associated with this wind generator type
            3 or type 4 model.
            '''

        })
    '''
    Wind turbune protection model associated with this wind generator type
    3 or type 4 model.
    '''

    WindRefFrameRotIEC: Optional[WindRefFrameRotIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindRefFrameRotIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference frame rotation model associated with this wind turbine type 3
            or type 4 model.
            '''

        })
    '''
    Reference frame rotation model associated with this wind turbine type
    3 or type 4 model.
    '''

    WindContCurrLimIEC: Optional[WindContCurrLimIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContCurrLimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control current limitation model associated with this wind turbine
            type 3 or type 4 model.
            '''

        })
    '''
    Wind control current limitation model associated with this wind turbine
    type 3 or type 4 model.
    '''

    WIndContQIEC: Optional[WindContQIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control Q model associated with this wind turbine type 3 or type 4
            model.
            '''

        })
    '''
    Wind control Q model associated with this wind turbine type 3 or type
    4 model.
    '''

    WindContQLimIEC: Optional[WindContQLimIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQLimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Constant Q limitation model associated with this wind generator type 3
            or type 4 model.
            '''

        })
    '''
    Constant Q limitation model associated with this wind generator type
    3 or type 4 model.
    '''

    WindContQPQULimIEC: Optional[WindContQPQULimIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQPQULimIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            QP and QU limitation model associated with this wind generator type 3 or
            type 4 model.
            '''

        })
    '''
    QP and QU limitation model associated with this wind generator type
    3 or type 4 model.
    '''

    WindProtectionIEC: Optional[WindProtectionIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindProtectionIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbune protection model associated with this wind generator type
            3 or type 4 model.
            '''

        })
    '''
    Wind turbune protection model associated with this wind generator type
    3 or type 4 model.
    '''

    WindRefFrameRotIEC: Optional[WindRefFrameRotIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindRefFrameRotIEC.WindTurbineType3or4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Reference frame rotation model associated with this wind turbine type 3
            or type 4 model.
            '''

        })
    '''
    Reference frame rotation model associated with this wind turbine type
    3 or type 4 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType3IEC(WindTurbineType3or4IEC):
    '''
    Parent class supporting relationships to IEC wind turbines type 3 including
    their control models.
    '''

    WindAeroOneDimIEC: Optional[WindAeroOneDimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindAeroOneDimIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind generator type 3 model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind generator type 3 model.
    '''

    WindAeroTwoDimIEC: Optional[WindAeroTwoDimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindAeroTwoDimIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind turbine type 3 model.
    '''

    WindContPitchAngleIEC: Optional[WindContPitchAngleIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContPitchAngleIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control pitch angle model associated with this wind turbine type 3.
            '''

        })
    '''
    Wind control pitch angle model associated with this wind turbine type
    3.
    '''

    WindContPType3IEC: Optional[WindContPType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContPType3IEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control P type 3 model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind control P type 3 model associated with this wind turbine type
    3 model.
    '''

    WindGenType3IEC: Optional[WindGenType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType3IEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 3 model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind generator type 3 model associated with this wind turbine type
    3 model.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind mechanical model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind mechanical model associated with this wind turbine type 3 model.
    '''

    WindAeroOneDimIEC: Optional[WindAeroOneDimIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindAeroOneDimIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind generator type 3 model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind generator type 3 model.
    '''

    WindAeroTwoDimIEC: Optional[WindAeroTwoDimIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindAeroTwoDimIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind aerodynamic model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind aerodynamic model associated with this wind turbine type 3 model.
    '''

    WindContPType3IEC: Optional[WindContPType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContPType3IEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control P type 3 model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind control P type 3 model associated with this wind turbine type
    3 model.
    '''

    WindContPitchAngleIEC: Optional[WindContPitchAngleIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContPitchAngleIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control pitch angle model associated with this wind turbine type 3.
            '''

        })
    '''
    Wind control pitch angle model associated with this wind turbine type
    3.
    '''

    WindGenType3IEC: Optional[WindGenType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType3IEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 3 model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind generator type 3 model associated with this wind turbine type
    3 model.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind mechanical model associated with this wind turbine type 3 model.
            '''

        })
    '''
    Wind mechanical model associated with this wind turbine type 3 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType4IEC(WindTurbineType3or4IEC):
    '''
    Parent class supporting relationships to IEC wind turbines type 4 including
    their control models.
    '''

    WindGenType3aIEC: Optional[WindGenType3aIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType3aIEC.WindTurbineType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 3A model associated with this wind turbine type 4 model.
            '''

        })
    '''
    Wind generator type 3A model associated with this wind turbine type
    4 model.
    '''

    WindGenType3aIEC: Optional[WindGenType3aIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType3aIEC.WindTurbineType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 3A model associated with this wind turbine type 4 model.
            '''

        })
    '''
    Wind generator type 3A model associated with this wind turbine type
    4 model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType4aIEC(WindTurbineType4IEC):
    '''
    Wind turbine IEC type 4A.
    Reference: IEC 61400-27-1:2015, 5.5.5.2.
    '''

    WindContPType4aIEC: Optional[WindContPType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContPType4aIEC.WindTurbineType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control P type 4A model associated with this wind turbine type 4A
            model.
            '''

        })
    '''
    Wind control P type 4A model associated with this wind turbine type
    4A model.
    '''

    WindGenType4IEC: Optional[WindGenType4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType4IEC.WindTurbineType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 4 model associated with this wind turbine type 4A model.
            '''

        })
    '''
    Wind generator type 4 model associated with this wind turbine type
    4A model.
    '''

    WindContPType4aIEC: Optional[WindContPType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContPType4aIEC.WindTurbineType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control P type 4A model associated with this wind turbine type 4A
            model.
            '''

        })
    '''
    Wind control P type 4A model associated with this wind turbine type
    4A model.
    '''

    WindGenType4IEC: Optional[WindGenType4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType4IEC.WindTurbineType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 4 model associated with this wind turbine type 4A model.
            '''

        })
    '''
    Wind generator type 4 model associated with this wind turbine type
    4A model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindTurbineType4bIEC(WindTurbineType4IEC):
    '''
    Wind turbine IEC type 4B.
    Reference: IEC 61400-27-1:2015, 5.5.5.3.
    '''

    WindContPType4bIEC: Optional[WindContPType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindContPType4bIEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind control P type 4B model associated with this wind turbine type 4B
            model.
            '''

        })
    '''
    Wind control P type 4B model associated with this wind turbine type
    4B model.
    '''

    WindGenType4IEC: Optional[WindGenType4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType4IEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 4 model associated with this wind turbine type 4B model.
            '''

        })
    '''
    Wind generator type 4 model associated with this wind turbine type
    4B model.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind mechanical model associated with this wind turbine type 4B model.
            '''

        })
    '''
    Wind mechanical model associated with this wind turbine type 4B model.
    '''

    WindContPType4bIEC: Optional[WindContPType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContPType4bIEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind control P type 4B model associated with this wind turbine type 4B
            model.
            '''

        })
    '''
    Wind control P type 4B model associated with this wind turbine type
    4B model.
    '''

    WindGenType4IEC: Optional[WindGenType4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType4IEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 4 model associated with this wind turbine type 4B model.
            '''

        })
    '''
    Wind generator type 4 model associated with this wind turbine type
    4B model.
    '''

    WindMechIEC: Optional[WindMechIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindMechIEC.WindTurbineType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind mechanical model associated with this wind turbine type 4B model.
            '''

        })
    '''
    Wind mechanical model associated with this wind turbine type 4B model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindType3or4UserDefined(WindTurbineType3or4Dynamics):
    '''
    Wind type 3 or type 4 function block whose dynamic behaviour is described
    by <font color="#0f0f0f">a user-defined model.</font>
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.WindType3or4UserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceControl(IdentifiedObject):
    '''
    Instructs an end device (or an end device group) to perform a specified
    action.
    '''

    drProgramLevel: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Level of a demand response program request, where 0=emergency. Note: Attribute
            is not defined on DemandResponseProgram as it is not its inherent property
            (it serves to control it).
            '''

        })
    '''
    Level of a demand response program request, where 0=emergency. Note:
    Attribute is not defined on DemandResponseProgram as it is not its
    inherent property (it serves to control it).
    '''

    drProgramMandatory: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Whether a demand response program request is mandatory. Note: Attribute
            is not defined on DemandResponseProgram as it is not its inherent property
            (it serves to control it).
            '''

        })
    '''
    Whether a demand response program request is mandatory. Note: Attribute
    is not defined on DemandResponseProgram as it is not its inherent property
    (it serves to control it).
    '''

    issuerID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identifier of the business entity originating an end device control.
            '''

        })
    '''
    Unique identifier of the business entity originating an end device
    control.
    '''

    issuerTrackingID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifier assigned by the initiator (e.g. retail electric provider) of
            an end device control action to uniquely identify the demand response event,
            text message, or other subject of the control action. Can be used when
            cancelling an event or text message request or to identify the originating
            event or text message in a consequential end device event.
            '''

        })
    '''
    Identifier assigned by the initiator (e.g. retail electric provider)
    of an end device control action to uniquely identify the demand response
    event, text message, or other subject of the control action. Can be
    used when cancelling an event or text message request or to identify
    the originating event or text message in a consequential end device
    event.
    '''

    priceSignal: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Price signal used as parameter for this end device control.
            '''

        })
    '''
    (if applicable) Price signal used as parameter for this end device
    control.
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for the control action that allows to determine how to continue
            processing. For example, disconnect meter command may require different
            processing by the receiving system if it has been issued for a network-related
            reason (protection) or for a payment-related reason.
            '''

        })
    '''
    Reason for the control action that allows to determine how to continue
    processing. For example, disconnect meter command may require different
    processing by the receiving system if it has been issued for a network-related
    reason (protection) or for a payment-related reason.
    '''

    EndDeviceAction: Optional[EndDeviceAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceAction.EndDeviceControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device action issued by this end device control.
            '''

        })
    '''
    End device action issued by this end device control.
    '''

    EndDeviceControlType: Optional[EndDeviceControlType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EndDeviceControlType.EndDeviceControls',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this end device control.
            '''

        })
    '''
    Type of this end device control.
    '''

    EndDeviceAction: Optional[EndDeviceAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceAction.EndDeviceControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            End device action issued by this end device control.
            '''

        })
    '''
    End device action issued by this end device control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceControlType(IdentifiedObject):
    '''
    Detailed description for a control produced by an end device. Values in
    attributes allow for creation of recommended codes to be used for identifying
    end device controls as follows: <type>.<domain>.<subDomain>.<eventOrAction>.
    '''

    domain: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-level nature of the control.
            '''

        })
    '''
    High-level nature of the control.
    '''

    eventOrAction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The most specific part of this control type. It is mainly in the form of
            a verb that gives action to the control that just occurred.
            '''

        })
    '''
    The most specific part of this control type. It is mainly in the form
    of a verb that gives action to the control that just occurred.
    '''

    subDomain: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            More specific nature of the control, as a further sub-categorisation of
            'domain'.
            '''

        })
    '''
    More specific nature of the control, as a further sub-categorisation
    of 'domain'.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of physical device from which the control was created. A value of
            zero (0) can be used when the source is unknown.
            '''

        })
    '''
    Type of physical device from which the control was created. A value
    of zero (0) can be used when the source is unknown.
    '''

    EndDeviceControls: list[EndDeviceControl] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceControl.EndDeviceControlType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device controls of this type.
            '''

        })
    '''
    All end device controls of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceEventType(IdentifiedObject):
    '''
    Detailed description for an event produced by an end device. Values in
    attributes allow for creation of recommended codes to be used for identifying
    end device events as follows: <type>.<domain>.<subDomain>.<eventOrAction>.
    '''

    domain: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-level nature of the event. By properly classifying events by a small
            set of domain codes, a system can more easily run reports based on the
            types of events that have occurred or been received.
            '''

        })
    '''
    High-level nature of the event. By properly classifying events by a
    small set of domain codes, a system can more easily run reports based
    on the types of events that have occurred or been received.
    '''

    eventOrAction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The most specific part of this event type. It is mainly in the form of
            a verb that gives action to the event that just occurred.
            '''

        })
    '''
    The most specific part of this event type. It is mainly in the form
    of a verb that gives action to the event that just occurred.
    '''

    subDomain: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            More specific nature of the event, as a further sub-categorisation of 'domain'.
            '''

        })
    '''
    More specific nature of the event, as a further sub-categorisation
    of 'domain'.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of physical device from which the event was created. A value of zero
            (0) can be used when the source is unknown.
            '''

        })
    '''
    Type of physical device from which the event was created. A value of
    zero (0) can be used when the source is unknown.
    '''

    EndDeviceEvents: list[EndDeviceEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceEvent.EndDeviceEventType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device events of this type.
            '''

        })
    '''
    All end device events of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EndDeviceGroup(IdentifiedObject):
    '''
    Abstraction for management of group communications within a two-way AMR
    system or the data for a group of related end devices. Commands can be
    issued to all of the end devices that belong to the group using a defined
    group address and the underlying AMR communication infrastructure. A DERGroup
    and a PANDeviceGroup is an EndDeviceGroup.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this group.
            '''

        })
    '''
    Type of this group.
    '''

    DERFunction: Optional[DERFunction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DERFunction.EndDeviceGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Functions supported by the DER Group
            '''

        })
    '''
    Functions supported by the DER Group
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.EndDeviceGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the end device group
            '''

        })
    '''
    Meter read schedule that applies to the end device group
    '''

    DERFunction: list[DERFunction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DERFunction.EndDeviceGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The DER functions that are applied to the DER Group.
            '''

        })
    '''
    The DER functions that are applied to the DER Group.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The SubLoadAreas in the LoadArea.
            '''

        })
    '''
    The SubLoadAreas in the LoadArea.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'LoadArea.SubLoadAreas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The Loadgroups in the SubLoadArea.
            '''

        })
    '''
    The Loadgroups in the SubLoadArea.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyComponent(IdentifiedObject):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BlockDispatchComponent(EnergyComponent):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProportionalDistributionComponent(EnergyComponent):
    '''
    '''

    distributionFactor: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyPriceIndex(IdentifiedObject):
    '''
    An Energy Price Index for each Resource is valid for a period (e.g. daily)
    that is identified by a Valid Period Start Time and a Valid Period End
    Time. An Energy Price Index is in $/MWh.
    '''

    energyPriceIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy price index
            '''

        })
    '''
    Energy price index
    '''

    lastModified: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time updated
            '''

        })
    '''
    Time updated
    '''

    energyPriceIndexType: Optional[ EnergyPriceIndexType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            EPI type such as wholesale or retail
            '''

        })
    '''
    EPI type such as wholesale or retail
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.EnergyPriceIndex',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.EnergyPriceIndex',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyTypeReference(IdentifiedObject):
    '''
    '''

    kind: Optional[ EnergyTypeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalInformation(IdentifiedObject):
    '''
    Abstract class (with concrete child classes of Observation and Forecast)
    that groups phenomenon and/or environmental value sets.
    '''

    created: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The timestamp of when the forecast was created
            '''

        })
    '''
    The timestamp of when the forecast was created
    '''

    EnvironmentalDataProvider: Optional[EnvironmentalDataProvider] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalDataProvider.EnvironmentalInformation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Environmental data provider supplying this environmental information.
            '''

        })
    '''
    Environmental data provider supplying this environmental information.
    '''

    EnvironmentalAnalog: list[EnvironmentalAnalog] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAnalog.EnvironmentalInformation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Environmental analog associated with this observation or forecast.
            '''

        })
    '''
    Environmental analog associated with this observation or forecast.
    '''

    EnvironmentalDiscrete: list[EnvironmentalDiscrete] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalDiscrete.EnvironmentalInformation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Environmental discrete (integer) associated with this observation or forecast.
            '''

        })
    '''
    Environmental discrete (integer) associated with this observation or
    forecast.
    '''

    EnvironmentalPhenomenon: list[EnvironmentalPhenomenon] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalPhenomenon.EnvironmentalInformation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnvironmentalStringMeasurement: list[EnvironmentalStringMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalStringMeasurement.EnvironmentalInformation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Environmental string measurement associated with this forecast or observation.
            '''

        })
    '''
    Environmental string measurement associated with this forecast or observation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Forecast(EnvironmentalInformation):
    '''
    A forecast group of value sets and/or phenomena characteristics.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Observation(EnvironmentalInformation):
    '''
    Observed (actual non-forecast) values sets and/or phenomena characteristics.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this monitoring station.
            '''

        })
    '''
    Location of this monitoring station.
    '''

    EnvironmentalAnalog: list[EnvironmentalAnalog] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAnalog.EnvironmentalMonitoringStation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Environmental analog measurement provided by this monitoring station.
            '''

        })
    '''
    Environmental analog measurement provided by this monitoring station.
    '''

    ReportingCapability: list[ReportingCapability] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReportingCapability.EnvironmentalMonitoringStation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            One of the reporting capabilities of this monitoring station.
            '''

        })
    '''
    One of the reporting capabilities of this monitoring station.
    '''

    UsagePoint: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.EnvironmentalMonitoringStation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquipmentLimitSeriesComponent(IdentifiedObject):
    '''
    This represents one instance of an equipment that contributes to the calculation
    of an operational limit.
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Equipment.EqiupmentLimitSeriesComponent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Equipment contributing toward the series limit. The reference here is to
            Equipment rather than a specific limit on the equipment so the grouiping
            can be reused for multiple limits of different types on the same instance
            of equipment.
            '''

        })
    '''
    Equipment contributing toward the series limit. The reference here
    is to Equipment rather than a specific limit on the equipment so the
    grouiping can be reused for multiple limits of different types on the
    same instance of equipment.
    '''

    SeriesEquipmentDependentLimit: Optional[SeriesEquipmentDependentLimit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SeriesEquipmentDependentLimit.EquipmentLimitSeriesComponent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Calculation in which the refernce to equipment applies.
            '''

        })
    '''
    Calculation in which the refernce to equipment applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquipmentUnavailabilitySchedule(IdentifiedObject):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAvailabilityPlans'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpIdentifiedObject(IdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpBomItemData(ErpIdentifiedObject):
    '''
    An individual item on a bill of materials.
    '''

    DesignLocation: Optional[DesignLocation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DesignLocation.ErpBomItemDatas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpBOM: Optional[ErpBOM] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpBOM.ErpBomItemDatas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TypeAsset: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.ErpBomItemDatas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpCompetency(ErpIdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpInventory(ErpIdentifiedObject):
    '''
    Utility inventory-related information about an item or part (and not for
    description of the item and its attributes). It is used by ERP applications
    to enable the synchronization of Inventory data that exists on separate
    Item Master databases. This data is not the master data that describes
    the attributes of the item such as dimensions, weight, or unit of measure
    - it describes the item as it exists at a specific location.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ErpInventory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ErpInventory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpInventoryCount(ErpIdentifiedObject):
    '''
    This is related to Inventory physical counts organized by AssetModel. Note
    that a count of a type of asset can be accomplished by the association
    inherited by AssetModel (from Document) to Asset.
    It enables ERP applications to transfer an inventory count between ERP
    and the actual physical inventory location. This count may be a cycle count
    or a physical count.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpIssueInventory(ErpIdentifiedObject):
    '''
    Can be used to request an application to process an issue or request information
    about an issue.
    '''

    TypeAsset: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.ErpInventoryIssues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TypeMaterial: Optional[TypeMaterial] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TypeMaterial.ErpIssueInventories',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpItemMaster(ErpIdentifiedObject):
    '''
    Any unique purchased part for manufactured product tracked by ERP systems
    for a utility.
    Item, as used by the OAG, refers to the basic information about an item,
    including its attributes, cost, and locations. It does not include item
    quantities. Compare to the Inventory, which includes all quantities and
    other location-specific information.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ErpItemMaster',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.ErpItemMaster',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpJournalEntry(ErpIdentifiedObject):
    '''
    Details of an individual entry in a journal, which is to be posted to a
    ledger on the posting date.
    '''

    accountID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Account identifier for this entry.
            '''

        })
    '''
    Account identifier for this entry.
    '''

    postingDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this entry is to be posted to the ledger.
            '''

        })
    '''
    Date and time this entry is to be posted to the ledger.
    '''

    sourceID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The identifer of the source for this entry.
            '''

        })
    '''
    The identifer of the source for this entry.
    '''

    transactionDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount of the debit or credit for this account.
            '''

        })
    '''
    The amount of the debit or credit for this account.
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpJournalEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpJournal: Optional[ErpJournal] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpJournal.ErpJournalEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedgerEntry: Optional[ErpLedgerEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedgerEntry.ErpJounalEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedgerEntry: Optional[ErpLedgerEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedgerEntry.ErpJounalEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpLedBudLineItem(ErpIdentifiedObject):
    '''
    Individual entry of a given Ledger Budget, typically containing information
    such as amount, accounting date, accounting period, and is associated with
    the applicable general ledger account.
    '''

    ErpLedBudLineItem: Optional[ErpLedgerEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedgerEntry.ErpLedgerEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedgerBudget: Optional[ErpLedgerBudget] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpLedgerBudget.ErpLedBudLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedBudLineItem: Optional[ErpLedgerEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedgerEntry.ErpLedgerEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpLedgerEntry(ErpIdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time journal entry was recorded.
            '''

        })
    '''
    Date and time journal entry was recorded.
    '''

    accountKind: Optional[ ErpAccountKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of account for this entry.
            '''

        })
    '''
    Kind of account for this entry.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount of the debit or credit for this account.
            '''

        })
    '''
    The amount of the debit or credit for this account.
    '''

    ErpJounalEntry: Optional[ErpJournalEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpJournalEntry.ErpLedgerEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedger: Optional[ErpLedger] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpLedger.ErpLedgerEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedgerEntry: Optional[ErpLedBudLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedBudLineItem.ErpLedBudLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpJounalEntry: Optional[ErpJournalEntry] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpJournalEntry.ErpLedgerEntry',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpLedgerEntry: Optional[ErpLedBudLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpLedBudLineItem.ErpLedBudLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpPayableLineItem(ErpIdentifiedObject):
    '''
    Of an ErpPayable, a line item references an ErpInvoiceLineitem or other
    source such as credit memos.
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpPayableLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPayable: Optional[ErpPayable] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpPayable.ErpPayableLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpPayableLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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(ErpIdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpQuoteLineItem(ErpIdentifiedObject):
    '''
    Of an ErpQuote, the item or product quoted along with quantity, price and
    other descriptive information.
    '''

    AssetModelCatalogueItem: Optional[AssetModelCatalogueItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetModelCatalogueItem.ErpQuoteLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Design: Optional[Design] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Design.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Some utilities provide quotes to customer for services, where the customer
            accepts the quote by making a payment. An invoice is required for this
            to occur.
            '''

        })
    '''
    Some utilities provide quotes to customer for services, where the customer
    accepts the quote by making a payment. An invoice is required for this
    to occur.
    '''

    ErpQuote: Optional[ErpQuote] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpQuote.ErpQuoteLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReqLineItem: Optional[ErpReqLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpReqLineItem.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Design: Optional[Design] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Design.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Some utilities provide quotes to customer for services, where the customer
            accepts the quote by making a payment. An invoice is required for this
            to occur.
            '''

        })
    '''
    Some utilities provide quotes to customer for services, where the customer
    accepts the quote by making a payment. An invoice is required for this
    to occur.
    '''

    ErpReqLineItem: Optional[ErpReqLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpReqLineItem.ErpQuoteLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpRecDelvLineItem(ErpIdentifiedObject):
    '''
    Of an ErpReceiveDelivery, this is an individually received good or service
    by the Organisation receiving goods or services. It may be used to indicate
    receipt of goods in conjunction with a purchase order line item.
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpRecDelvLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPOLineItem: Optional[ErpPOLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPOLineItem.ErpRecDelLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReceiveDelivery: Optional[ErpReceiveDelivery] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpReceiveDelivery.ErpRecDelvLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.ErpRecDeliveryItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpRecDelvLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPOLineItem: Optional[ErpPOLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPOLineItem.ErpRecDelLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpRecLineItem(ErpIdentifiedObject):
    '''
    Individual entry of an ErpReceivable, it is a particular transaction representing
    an invoice, credit memo or debit memo to a customer.
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpRecLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpReceivable: Optional[ErpReceivable] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpReceivable.ErpRecLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpInvoiceLineItem: Optional[ErpInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpInvoiceLineItem.ErpRecLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpReqLineItem(ErpIdentifiedObject):
    '''
    Information that describes a requested item and its attributes.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    deliveryDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    quantity: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quantity of item requisitioned.
            '''

        })
    '''
    Quantity of item requisitioned.
    '''

    cost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost of material.
            '''

        })
    '''
    Cost of material.
    '''

    ErpPOLineItem: Optional[ErpPOLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPOLineItem.ErpReqLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.ErpReqLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpRequisition: Optional[ErpRequisition] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpRequisition.ErpReqLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TypeAsset: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.ErpReqLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TypeMaterial: Optional[TypeMaterial] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TypeMaterial.ErpReqLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPOLineItem: Optional[ErpPOLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPOLineItem.ErpReqLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpQuoteLineItem: Optional[ErpQuoteLineItem] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpQuoteLineItem.ErpReqLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpSiteLevelData(ErpIdentifiedObject):
    '''
    For a utility, general information that describes physical locations of
    organizations or the location codes and their meanings. This enables ERP
    applications to ensure that the physical location identifiers are synchronized
    between the business applications.
    '''

    LandProperty: Optional[LandProperty] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LandProperty.ErpSiteLevelDatas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ErpTimeEntry(ErpIdentifiedObject):
    '''
    An individual entry on an ErpTimeSheet.
    '''

    ErpProjectAccounting: Optional[ErpProjectAccounting] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpProjectAccounting.ErpTimeEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpTimeSheet: Optional[ErpTimeSheet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ErpTimeSheet.ErpTimeEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Fault(IdentifiedObject):
    '''
    Abnormal condition causing current flow through conducting equipment, such
    as caused by equipment failure or short circuits from objects not typically
    modelled (for example, a tree falling on a line).
    '''

    occurredDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time at which the fault occurred.
            '''

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

    kind: Optional[ PhaseConnectedFaultKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of phase fault.
            '''

        })
    '''
    The kind of phase fault.
    '''

    phases: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The phases participating in the fault. The fault connections into these
            phases are further specified by the type of fault.
            '''

        })
    '''
    The phases participating in the fault. The fault connections into these
    phases are further specified by the type of fault.
    '''

    FaultyEquipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Equipment.Faults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Equipment carrying this fault.
            '''

        })
    '''
    Equipment carrying this fault.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.Fault',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this fault.
            '''

        })
    '''
    Location of this fault.
    '''

    Outage: Optional[Outage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Outage.Faults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outage associated with this fault.
            '''

        })
    '''
    Outage associated with this fault.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Faults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquipmentFault(Fault):
    '''
    A fault applied at the terminal, external to the equipment. This class
    is not used to specify faults internal to the equipment.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.EquipmentFaults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The terminal connecting to the bus to which the fault is applied.
            '''

        })
    '''
    The terminal connecting to the bus to which the fault is applied.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Faults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LineFault(Fault):
    '''
    A fault that occurs on an AC line segment at some point along the length.
    '''

    lengthFromTerminal1: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The length to the place where the fault is located starting from terminal
            with sequence number 1 of the faulted line segment.
            '''

        })
    '''
    The length to the place where the fault is located starting from terminal
    with sequence number 1 of the faulted line segment.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineFaults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The line segment of this line fault.
            '''

        })
    '''
    The line segment of this line fault.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Faults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FaultCauseType(IdentifiedObject):
    '''
    Type of cause of the fault.
    '''

    ConfigurationEvent: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.FaultCauseType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this fault cause type.
            '''

        })
    '''
    All configuration events created for this fault cause type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The crew that has this field dispatch history.
            '''

        })
    '''
    The crew that has this field dispatch history.
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.FieldDispatchHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The planned outage that has the field dispatch history.
            '''

        })
    '''
    The planned outage that has the field dispatch history.
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.FieldDispatchHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unplanned outage that has the field dispatch history.
            '''

        })
    '''
    The unplanned outage that has the field dispatch history.
    '''

    FieldDispatchStep: list[FieldDispatchStep] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FieldDispatchStep.FieldDispatchHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The field dispatch step that has the field dispatch history.
            '''

        })
    '''
    The field dispatch step that has the field dispatch history.
    '''

    PlannedOutage: Optional[PlannedOutage] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedOutage.FieldDispatchHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The planned outage that has the field dispatch history.
            '''

        })
    '''
    The planned outage that has the field dispatch history.
    '''

    UnplannedOutage: Optional[UnplannedOutage] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnplannedOutage.FieldDispatchHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The unplanned outage that has the field dispatch history.
            '''

        })
    '''
    The unplanned outage that has the field dispatch history.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FinancialInfo(IdentifiedObject):
    '''
    Various current financial properties associated with a particular asset.
    Historical properties may be determined by ActivityRecords associated with
    the asset.
    '''

    account: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The account to which this actual material item is charged.
            '''

        })
    '''
    The account to which this actual material item is charged.
    '''

    costDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the cost.
            '''

        })
    '''
    Description of the cost.
    '''

    costType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of cost to which this Material Item belongs.
            '''

        })
    '''
    Type of cost to which this Material Item belongs.
    '''

    plantTransferDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset's financial value was put in plant for regulatory accounting
            purposes (e.g., for rate base calculations). This is sometime referred
            to as the "in-service date".
            '''

        })
    '''
    Date and time asset's financial value was put in plant for regulatory
    accounting purposes (e.g., for rate base calculations). This is sometime
    referred to as the "in-service date".
    '''

    purchaseDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset was purchased.
            '''

        })
    '''
    Date and time asset was purchased.
    '''

    purchaseOrderNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Purchase order identifier.
            '''

        })
    '''
    Purchase order identifier.
    '''

    valueDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time at which the financial value was last established.
            '''

        })
    '''
    Date and time at which the financial value was last established.
    '''

    warrantyEndDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time warranty on asset expires.
            '''

        })
    '''
    Date and time warranty on asset expires.
    '''

    actualPurchaseCost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The actual purchase cost of this particular asset.
            '''

        })
    '''
    The actual purchase cost of this particular asset.
    '''

    financialValue: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of asset as of 'valueDateTime'.
            '''

        })
    '''
    Value of asset as of 'valueDateTime'.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.FinancialInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The asset to which this financial information relates.
            '''

        })
    '''
    The asset to which this financial information relates.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.FinancialInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The asset to which this financial information relates.
            '''

        })
    '''
    The asset to which this financial information relates.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FlowgatePartner(IdentifiedObject):
    '''
    Flowgate defined partner.
    '''

    FlowgateValue: Optional[FlowgateValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FlowgateValue.FlowgatePartner',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FlowgateValue: Optional[FlowgateValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FlowgateValue.FlowgatePartner',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ForbiddenRegion(IdentifiedObject):
    '''
    Forbbiden region is operating ranges where the units are unable to maintain
    steady operation without causing equipment damage. The four attributes
    that define a forbidden region are the low MW, the High MW, the crossing
    time, and the crossing cost.
    '''

    crossingCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost associated with crossing the forbidden region
            '''

        })
    '''
    Cost associated with crossing the forbidden region
    '''

    crossTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time to cross the forbidden region in minutes.
            '''

        })
    '''
    Time to cross the forbidden region in minutes.
    '''

    highMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High end of the region definition
            '''

        })
    '''
    High end of the region definition
    '''

    lowMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low end of the region definition.
            '''

        })
    '''
    Low end of the region definition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FormerReference(IdentifiedObject):
    '''
    Used to indicate former references to the same piece of equipment. The
    ID, name, and effectivity dates are utilized.
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.FormerReference',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    fossilFuelType: Optional[ FuelType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    fuelCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    ThermalGeneratingUnit: Optional[ThermalGeneratingUnit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.FossilFuels',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A fuel allocation schedule shall have a fossil fuel.
            '''

        })
    '''
    A fuel allocation schedule shall have a fossil fuel.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FuelRegion(IdentifiedObject):
    '''
    Indication of region for fuel inventory purposes.
    '''

    fuelRegionType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of fuel region
            '''

        })
    '''
    The type of fuel region
    '''

    lastModified: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time of last update
            '''

        })
    '''
    Time of last update
    '''

    GasPrice: Optional[GasPrice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'GasPrice.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OilPrice: Optional[OilPrice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'OilPrice.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GasPrice: Optional[GasPrice] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GasPrice.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OilPrice: Optional[OilPrice] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OilPrice.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: list[RegisteredGenerator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredGenerator.FuelRegion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Gate(IdentifiedObject):
    '''
    Logical gate than support logical operation based on the input.
    '''

    kind: Optional[ GateLogicKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The logical operation of the gate.
            '''

        })
    '''
    The logical operation of the gate.
    '''

    GateInputPin: list[GateInputPin] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GateInputPin.Gate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Input to the gate.
            '''

        })
    '''
    Input to the gate.
    '''

    PinGate: list[PinGate] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinGate.GateOutput',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProtectiveActionCom: list[ProtectiveAction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveAction.GateComCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            For the ProtectiveAction to be activated the condition for communication
            needs to be met (true).
            '''

        })
    '''
    For the ProtectiveAction to be activated the condition for communication
    needs to be met (true).
    '''

    ProtectiveActionEnabled: list[ProtectiveAction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveAction.GateEnabledCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RemedialActionScheme: list[RemedialActionScheme] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RemedialActionScheme.GateArmed',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StageTriggerArmed: list[StageTrigger] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StageTrigger.GateArmed',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StageTriggerCom: list[StageTrigger] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StageTrigger.GateComCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StageTrigger: list[StageTrigger] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StageTrigger.GateTrigger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TriggerCondition: list[TriggerCondition] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TriggerCondition.GateTrigger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GateInputPin(IdentifiedObject):
    '''
    Input pin for a logical gate. The condition described in the input pin
    will give a logical true or false. Result from measurement and calculation
    are converted to a true or false.
    '''

    absoluteValue: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, use the absolute value for compare..
            '''

        })
    '''
    If true, use the absolute value for compare..
    '''

    negate: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Invert/negate the result of the compare.
            '''

        })
    '''
    Invert/negate the result of the compare.
    '''

    thresholdValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The threshold value that should be used for compare with the input value.
            '''

        })
    '''
    The threshold value that should be used for compare with the input
    value.
    '''

    aDLogicKind: Optional[ AnalogToDigitalLogicKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The compare operation.
            '''

        })
    '''
    The compare operation.
    '''

    duration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The duration the compare condition need to be present before given a true.
            Default is 0 seconds.
            '''

        })
    '''
    The duration the compare condition need to be present before given
    a true. Default is 0 seconds.
    '''

    thresholdPercentage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The threshold percentage that should be used for compare with the percentage
            change between input value and threshold value.
            '''

        })
    '''
    The threshold percentage that should be used for compare with the percentage
    change between input value and threshold value.
    '''

    Gate: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Gate.GateInputPin',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PinBranchGroup(GateInputPin):
    '''
    Value associated with branch group is used as compare.
    '''

    kind: Optional[ PinBranchGroupKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The compare operation done on the branch group.
            '''

        })
    '''
    The compare operation done on the branch group.
    '''

    BranchGroup: Optional[BranchGroup] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BranchGroup.PinBranchGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The branch group that should be used in compare.
            '''

        })
    '''
    The branch group that should be used in compare.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PinEquipment(GateInputPin):
    '''
    Value associated with Equipment is used as compare.
    '''

    kind: Optional[ PinEquipmentKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The compare operation done on the equipment.
            '''

        })
    '''
    The compare operation done on the equipment.
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Equipment.PinEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Equipment that should be used in compare.
            '''

        })
    '''
    The Equipment that should be used in compare.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PinGate(GateInputPin):
    '''
    An output from one gate represent an input to another gate.
    '''

    GateOutput: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Gate.PinGate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PinMeasurement(GateInputPin):
    '''
    Gate input pin that is associated with a Measurement or a calculation of
    Measurement.
    '''

    Measurement: Optional[Measurement] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Measurement.PinMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Measurement that should be used in compare.
            '''

        })
    '''
    The Measurement that should be used in compare.
    '''

    MeasurementCalculator: Optional[MeasurementCalculator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementCalculator.PinMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Result of the calculation used as input to a gate.
            '''

        })
    '''
    Result of the calculation used as input to a gate.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PinTerminal(GateInputPin):
    '''
    Value associated with Terminal is used as compare.
    '''

    kind: Optional[ PinTerminalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The compare operation done on the terminal.
            '''

        })
    '''
    The compare operation done on the terminal.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.PinTerminal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Terminal that should be used in compare.
            '''

        })
    '''
    The Terminal that should be used in compare.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenICompensationForGenJ(IdentifiedObject):
    '''
    Resistive and reactive components of compensation for generator associated
    with IEEE type 2 voltage compensator for current flow out of another generator
    in the interconnection.
    '''

    rcij: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Resistive component of compensation of generator
            associated with this IEEE type 2 voltage compensator for current flow out
            of another generator (<i>Rcij</i>).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Resistive component of compensation of generator
    associated with this IEEE type 2 voltage compensator for current flow
    out of another generator (<i>Rcij</i>).</font>
    '''

    xcij: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            <font color="#0f0f0f">Reactive component of compensation of generator associated
            with this IEEE type 2 voltage compensator for current flow out of another
            generator (<i>Xcij</i>).</font>
            '''

        })
    '''
    <font color="#0f0f0f">Reactive component of compensation of generator
    associated with this IEEE type 2 voltage compensator for current flow
    out of another generator (<i>Xcij</i>).</font>
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.GenICompensationForGenJ',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Standard synchronous machine out of which current flow is being compensated
            for.
            '''

        })
    '''
    Standard synchronous machine out of which current flow is being compensated
    for.
    '''

    VcompIEEEType2: Optional[VCompIEEEType2] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'VCompIEEEType2.GenICompensationForGenJ',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The standard IEEE type 2 voltage compensator of this compensation.
            '''

        })
    '''
    The standard IEEE type 2 voltage compensator of this compensation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VoltageCompensatorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenericConstraints(IdentifiedObject):
    '''
    Generic constraints can represent secure areas, voltage profile, transient
    stability and voltage collapse limits.
    The generic constraints can be one of the following forms:
    a) Thermal MW limit constraints type
    b) Group line flow constraint type
    '''

    intervalEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval End Time
            '''

        })
    '''
    Interval End Time
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval Start Time
            '''

        })
    '''
    Interval Start Time
    '''

    maxLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Limit (MW)
            '''

        })
    '''
    Maximum Limit (MW)
    '''

    minLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum Limit (MW)
            '''

        })
    '''
    Minimum Limit (MW)
    '''

    Flowgate: list[Flowgate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Flowgate.GenericConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionCapacity: list[TransmissionCapacity] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionCapacity.GenericConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this hazard.
            '''

        })
    '''
    Type of this hazard.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.Hazard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.Hazard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetLocationHazard(Hazard):
    '''
    Potential hazard related to the location of an asset. Examples are trees
    growing under overhead power lines, a park being located by a substation
    (i.e., children climb fence to recover a ball), a lake near an overhead
    distribution line (fishing pole/line contacting power lines), dangerous
    neighbour, etc.
    '''

    kind: Optional[ AssetHazardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of hazard.
            '''

        })
    '''
    Kind of hazard.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IncidentHazard(Hazard):
    '''
    Hazardous situation associated with an incident. Examples are line down,
    gas leak, fire, etc.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.IncidentHazard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Incident associated with this hazard.
            '''

        })
    '''
    Incident associated with this hazard.
    '''

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.IncidentHazard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trouble ticket associated with this hazard.
            '''

        })
    '''
    Trouble ticket associated with this hazard.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ICCPInformationMessage(IdentifiedObject):
    '''
    This class represents the TASE.2 Information Message Object. The IdentifiedObject.name
    attribute must be non-null. The value of the attribute shall be used as
    the TASE.2 Information Reference, as specified by 60870-6-503.
    '''

    localReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Local Reference attribute specifies a value agreed upon between sender
            and receiver of the Information Message. It further identifies the Information
            Message.
            '''

        })
    '''
    The Local Reference attribute specifies a value agreed upon between
    sender and receiver of the Information Message. It further identifies
    the Information Message.
    '''

    scope: Optional[ ICCPScopeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if the Point is global scoped (e.g. VCC) or accessible only to
            the Bilateral table peer (e.g. ICC).
            '''

        })
    '''
    Indicates if the Point is global scoped (e.g. VCC) or accessible only
    to the Bilateral table peer (e.g. ICC).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Local merasurement value source for an ICCP point.
            '''

        })
    '''
    Local merasurement value source for an ICCP point.
    '''

    BilateralToIOPoint: list[ProvidedBilateralPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProvidedBilateralPoint.IOPoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Bilateral ICCP point for the measurement or control.
            '''

        })
    '''
    Bilateral ICCP point for the measurement or control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The control action that is performed on the control
            '''

        })
    '''
    The control action that is performed on the control
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.Controls',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The remote point controlling the physical actuator.
            '''

        })
    '''
    The remote point controlling the physical actuator.
    '''

    ControlAction: Optional[ControlAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlAction.Control',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The control action that is performed on the control
            '''

        })
    '''
    The control action that is performed on the control
    '''

    RemoteControl: Optional[RemoteControl] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteControl.Control',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The remote point controlling the physical actuator.
            '''

        })
    '''
    The remote point controlling the physical actuator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'AccumulatorValue.AccumulatorReset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'AnalogValue.AnalogControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value representing the actuator output.
            '''

        })
    '''
    The value representing the actuator output.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'DiscreteValue.Command',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValue that is controlled.
            '''

        })
    '''
    The MeasurementValue that is controlled.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.harmonization)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPerson: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldPerson.MeasurementValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeasurementValueQuality: Optional[MeasurementValueQuality] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueQuality.MeasurementValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueSource.MeasurementValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Link to the physical telemetered point associated with this measurement.
            '''

        })
    '''
    Link to the physical telemetered point associated with this measurement.
    '''

    CalculationMethodHierarchy: Optional[CalculationMethodHierarchy] = field(
        default=None,
        metadata={
        'type': 'harmonization',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CalculationMethodHierarchy.MeasurementValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeasurementValueQuality: Optional[MeasurementValueQuality] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValueQuality.MeasurementValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A MeasurementValue has a MeasurementValueQuality associated with it.
            '''

        })
    '''
    A MeasurementValue has a MeasurementValueQuality associated with it.
    '''

    RemoteSource: Optional[RemoteSource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RemoteSource.MeasurementValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Accumulator.AccumulatorValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The command that resets the accumulator value.
            '''

        })
    '''
    The command that resets the accumulator value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise.
            '''

        })
    '''
    The value to supervise.
    '''

    Analog: Optional[Analog] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Analog.AnalogValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BaseReading(MeasurementValue):
    '''
    Common representation for reading values. Note that a reading value may
    have multiple qualities, as produced by various systems ('ReadingQuality.source').
    '''

    reportedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (used only when there are detailed auditing requirements) Date and time
            at which the reading was first delivered to the metering system.
            '''

        })
    '''
    (used only when there are detailed auditing requirements) Date and
    time at which the reading was first delivered to the metering system.
    '''

    source: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            System that originally supplied the reading (e.g., customer, AMI system,
            handheld reading system, another enterprise system, etc.).
            '''

        })
    '''
    System that originally supplied the reading (e.g., customer, AMI system,
    handheld reading system, another enterprise system, etc.).
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of this reading.
            '''

        })
    '''
    Value of this reading.
    '''

    ReadingQualities: list[ReadingQuality] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReadingQuality.Reading',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All qualities of this reading.
            '''

        })
    '''
    All qualities of this reading.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntervalReading(BaseReading):
    '''
    Data captured at regular intervals of time. Interval data could be captured
    as incremental data, absolute data, or relative data. The source for the
    data is usually a tariff quantity or an engineering quantity. Data is typically
    captured in time-tagged, uniform, fixed-length intervals of 5 min, 10 min,
    15 min, 30 min, or 60 min.
    Note: Interval Data is sometimes also called "Interval Data Readings" (IDR).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Reading(BaseReading):
    '''
    Specific value measured by a meter or other asset, or calculated by a system.
    Each Reading is associated with a specific ReadingType.
    '''

    position: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A sequential value representing the relative position within a given time
            interval.
            '''

        })
    '''
    A sequential value representing the relative position within a given
    time interval.
    '''

    valueMissing: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The indication of whether or not the quantity of this reading is missing.
            '''

        })
    '''
    The indication of whether or not the quantity of this reading is missing.
    '''

    reason: Optional[ ReadingReasonKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for this reading being taken.
            '''

        })
    '''
    Reason for this reading being taken.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ReadingType.Readings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type information for this reading value.
            '''

        })
    '''
    Type information for this reading value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Discrete.DiscreteValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The Control variable associated with the MeasurementValue.
            '''

        })
    '''
    The Control variable associated with the MeasurementValue.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise.
            '''

        })
    '''
    The value to supervise.
    '''

    StringMeasurement: Optional[StringMeasurement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'StringMeasurement.StringMeasurementValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Measurement to which this value is connected.
            '''

        })
    '''
    Measurement to which this value is connected.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalCodedValue(StringMeasurementValue):
    '''
    An environmental value described using a coded value. A triplicate of enumerated
    values representing intensity, coverage, type of weather is used. These
    may be concatenated into the string value.
    '''

    coverageKind: Optional[ CoverageCodeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code representing the coverage of the weather condition.
            '''

        })
    '''
    Code representing the coverage of the weather condition.
    '''

    intensityKind: Optional[ IntensityCodeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code representing the intensity of the weather condition.
            '''

        })
    '''
    Code representing the intensity of the weather condition.
    '''

    probabilityPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Probability of weather condition occurring during the time interval expressed
            as a percentage. Applicable only when weather condition is related to a
            forecast (not an observation).
            '''

        })
    '''
    Probability of weather condition occurring during the time interval
    expressed as a percentage. Applicable only when weather condition is
    related to a forecast (not an observation).
    '''

    weatherKind: Optional[ WeatherCodeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code representing the type of weather condition.
            '''

        })
    '''
    Code representing the type of weather condition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class InternalControlArea(IdentifiedObject):
    '''
    There is one internal control area in the system, which is the single control
    area in the primary network company. Real time generation control affects
    only the internal control area.
    '''

    CurrentScheduledInterchange: Optional[CurrentScheduledInterchange] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CurrentScheduledInterchange.InternalControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CurrentEmergencySI: list[CurrentEmergencyScheduledInterchange] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CurrentEmergencyScheduledInterchange.InternalControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CurrentScheduledInterchange: Optional[CurrentScheduledInterchange] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CurrentScheduledInterchange.InternalControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class LandProperty(IdentifiedObject):
    '''
    Information about a particular piece of (land) property such as its use.
    Ownership of the property may be determined through associations to Organisations
    and/or ErpPersons.
    '''

    externalRecordReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference allocated by the governing organisation (such as municipality)
            to this piece of land that has a formal reference to Surveyor General's
            records. The governing organisation is specified in associated Organisation.
            '''

        })
    '''
    Reference allocated by the governing organisation (such as municipality)
    to this piece of land that has a formal reference to Surveyor General's
    records. The governing organisation is specified in associated Organisation.
    '''

    demographicKind: Optional[ DemographicKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Demographics around the site.
            '''

        })
    '''
    Demographics around the site.
    '''

    kind: Optional[ LandPropertyKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of (land) property, categorised according to its main functional use
            from the utility's perspective.
            '''

        })
    '''
    Kind of (land) property, categorised according to its main functional
    use from the utility's perspective.
    '''

    ErpSiteLevelDatas: list[ErpSiteLevelData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpSiteLevelData.LandProperty',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocationGrants: list[LocationGrant] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LocationGrant.LandProperty',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All location grants this land property has.
            '''

        })
    '''
    All location grants this land property has.
    '''

    ErpPersonRoles: list[PersonPropertyRole] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PersonPropertyRole.LandProperty',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpOrganisationRoles: list[PropertyOrganisationRole] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PropertyOrganisationRole.LandProperty',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'AccumulatorLimitSet.Limits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The set of limits.
            '''

        })
    '''
    The set of limits.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value to supervise against.
            '''

        })
    '''
    The value to supervise against.
    '''

    LimitSet: Optional[AnalogLimitSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AnalogLimitSet.Limits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The set of limits.
            '''

        })
    '''
    The set of limits.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktAnalogLimit(AnalogLimit):
    '''
    Subclass of IEC 61970:Meas:AnalogLimit.
    '''

    exceededLimit: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            true if limit exceeded
            '''

        })
    '''
    true if limit exceeded
    '''

    limitType: Optional[ AnalogLimitType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of limit the value represents
            Branch Limit Types:
            Short Term
            Medium Term
            Long Term
            Voltage Limits:
            High
            Low
            '''

        })
    '''
    The type of limit the value represents
    Branch Limit Types:
    Short Term
    Medium Term
    Long Term
    Voltage Limits:
    High
    Low
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ViolationLimit(Limit):
    '''
    A type of limit that indicates if it is enforced and, through association,
    the organisation responsible for setting the limit.
    '''

    enforced: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if limit is enforced.
            '''

        })
    '''
    True if limit is enforced.
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.ViolationLimits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktMeasurement: Optional[MktMeasurement] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktMeasurement.ViolationLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCongestionRevenueRights'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LimitDependency(IdentifiedObject):
    '''
    A limit calculation model used to compute an operational limit based on
    external input such as temperature. These are intended to be shared among
    operational limits with the same calculation form that apply to a piece
    of equipment..
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Equipment.LimitDependencyModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The equipment for which this limit dependency model is organized under.
            '''

        })
    '''
    The equipment for which this limit dependency model is organized under.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalDependentLimit(LimitDependency):
    '''
    This is a environmental based limit dependency model for calculating operational
    limits.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TemperatureDependentLimitTable(EnvironmentalDependentLimit):
    '''
    This is a table lookup that provides limit values corresponding to a temperature
    input.
    '''

    TemperatureLimitTablePoint: list[TemperatureDependentLimitPoint] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TemperatureDependentLimitPoint.TemperatureDependentLimitTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TemperaturePolynomialLimit(EnvironmentalDependentLimit):
    '''
    This describes the coefficients of a polynomial function that has temperature
    as input and calculates limit values as output.
    '''

    coefficient0: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polinomial coefficent of power 0.
            '''

        })
    '''
    The polinomial coefficent of power 0.
    '''

    coefficient1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polinomial coefficent of power 1.
            '''

        })
    '''
    The polinomial coefficent of power 1.
    '''

    coefficient2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polinomial coefficent of power 2.
            '''

        })
    '''
    The polinomial coefficent of power 2.
    '''

    coefficient3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polinomial coefficent of power 3.
            '''

        })
    '''
    The polinomial coefficent of power 3.
    '''

    coefficient4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The polinomial coefficent of power 4.
            '''

        })
    '''
    The polinomial coefficent of power 4.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LimitScalingLimit(LimitDependency):
    '''
    Specifies an operational limit is calculated by scaling another operational
    limit.
    '''

    limitScalingPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The associated source limit is scaled by this value to compute the limit
            of the dependency model.
            '''

        })
    '''
    The associated source limit is scaled by this value to compute the
    limit of the dependency model.
    '''

    SourceOperationalLimit: Optional[OperationalLimit] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'OperationalLimit.LimitScalingLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ScheduledLimitDependency(LimitDependency):
    '''
    '''

    ScheduledLimitValues: list[ScheduledLimitValue] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledLimitValue.ScheduledLimitDependency',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The scheduled limit values for this limit dependency.
            '''

        })
    '''
    The scheduled limit values for this limit dependency.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class SeriesEquipmentDependentLimit(LimitDependency):
    '''
    Limit based on most restrictive series equipment limit.
    A specification of of equipment that determines the calculated operational
    limit values based upon other equipment and their ratings. The most restrictive
    limit connected in series within the group is used. The physical connection
    based on switch status for example may also impact which elements in the
    group are considered. Any equipment in the group that are presently connected
    in series with the equipment of the directly associated operational limit
    are used. This provides a means to indicate which potentially series equipment
    limits are considered for a computed operational limit. The operational
    limit of the same operational limit type is assumed to be used from the
    grouped equipment. It is also possible to make assumptions or calculations
    regarding how flow might split if the equipment is not simply in series.
    '''

    EquipmentLimitSeriesComponent: list[EquipmentLimitSeriesComponent] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquipmentLimitSeriesComponent.SeriesEquipmentDependentLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Equipment linkages that participates in the limit calculation.
            '''

        })
    '''
    Equipment linkages that participates in the limit calculation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktAnalogLimitSet(AnalogLimitSet):
    '''
    Subclass of IEC 61970:Meas:AnalogLimitSet.
    '''

    ratingSet: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rating set numbers
            '''

        })
    '''
    Rating set numbers
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadAggregate(LoadDynamics):
    '''
    Aggregate loads are used to represent all or part of the real and reactive
    load from one or more loads in the static (power flow) data. This load
    is usually the aggregation of many individual load devices and the load
    model is an approximate representation of the aggregate response of the
    load devices to system disturbances.
    Standard aggregate load model comprised of static and/or dynamic components.
    A static load model represents the sensitivity of the real and reactive
    power consumed by the load to the amplitude and frequency of the bus voltage.
    A dynamic load model can be used to represent the aggregate response of
    the motor components of the load.
    '''

    LoadMotor: Optional[LoadMotor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadMotor.LoadAggregate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate motor (dynamic) load associated with this aggregate load.
            '''

        })
    '''
    Aggregate motor (dynamic) load associated with this aggregate load.
    '''

    LoadStatic: Optional[LoadStatic] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadStatic.LoadAggregate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate static load associated with this aggregate load.
            '''

        })
    '''
    Aggregate static load associated with this aggregate load.
    '''

    LoadMotor: Optional[LoadMotor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadMotor.LoadAggregate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Aggregate motor (dynamic) load associated with this aggregate load.
            '''

        })
    '''
    Aggregate motor (dynamic) load associated with this aggregate load.
    '''

    LoadStatic: Optional[LoadStatic] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadStatic.LoadAggregate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Aggregate static load associated with this aggregate load.
            '''

        })
    '''
    Aggregate static load associated with this aggregate load.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadComposite(LoadDynamics):
    '''
    Combined static load and induction motor load effects.
    The dynamics of the motor are simplified by linearizing the induction machine
    equations.
    '''

    epfd: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active load-frequency dependence index (dynamic) (<i>Epfd</i>). Typical
            value = 1,5.
            '''

        })
    '''
    Active load-frequency dependence index (dynamic) (<i>Epfd</i>). Typical
    value = 1,5.
    '''

    epfs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active load-frequency dependence index (static) (<i>Epfs</i>). Typical
            value = 1,5.
            '''

        })
    '''
    Active load-frequency dependence index (static) (<i>Epfs</i>). Typical
    value = 1,5.
    '''

    epvd: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active load-voltage dependence index (dynamic) (<i>Epvd</i>). Typical value
            = 0,7.
            '''

        })
    '''
    Active load-voltage dependence index (dynamic) (<i>Epvd</i>). Typical
    value = 0,7.
    '''

    epvs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active load-voltage dependence index (static) (<i>Epvs</i>). Typical value
            = 0,7.
            '''

        })
    '''
    Active load-voltage dependence index (static) (<i>Epvs</i>). Typical
    value = 0,7.
    '''

    eqfd: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive load-frequency dependence index (dynamic) (<i>Eqfd</i>). Typical
            value = 0.
            '''

        })
    '''
    Reactive load-frequency dependence index (dynamic) (<i>Eqfd</i>). Typical
    value = 0.
    '''

    eqfs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive load-frequency dependence index (static) (<i>Eqfs</i>). Typical
            value = 0.
            '''

        })
    '''
    Reactive load-frequency dependence index (static) (<i>Eqfs</i>). Typical
    value = 0.
    '''

    eqvd: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive load-voltage dependence index (dynamic) (<i>Eqvd</i>). Typical
            value = 2.
            '''

        })
    '''
    Reactive load-voltage dependence index (dynamic) (<i>Eqvd</i>). Typical
    value = 2.
    '''

    eqvs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive load-voltage dependence index (static) (<i>Eqvs</i>). Typical
            value = 2.
            '''

        })
    '''
    Reactive load-voltage dependence index (static) (<i>Eqvs</i>). Typical
    value = 2.
    '''

    lfac: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loading factor (<i>L</i><i><sub>fac</sub></i>). The ratio of initial <i>P</i>
            to motor MVA base. Typical value = 0,8.
            '''

        })
    '''
    Loading factor (<i>L</i><i><sub>fac</sub></i>). The ratio of initial
    <i>P</i> to motor MVA base. Typical value = 0,8.
    '''

    pfrac: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of constant-power load to be represented by this motor model (<i>P</i><i><sub>FRAC</sub></i>)
            (&gt;= 0,0 and &lt;= 1,0). Typical value = 0,5.
            '''

        })
    '''
    Fraction of constant-power load to be represented by this motor model
    (<i>P</i><i><sub>FRAC</sub></i>) (&gt;= 0,0 and &lt;= 1,0). Typical
    value = 0,5.
    '''

    h: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inertia constant (<i>H</i>) (&gt;= 0). Typical value = 2,5.
            '''

        })
    '''
    Inertia constant (<i>H</i>) (&gt;= 0). Typical value = 2,5.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadGenericNonLinear(LoadDynamics):
    '''
    Generic non-linear dynamic (GNLD) load. This model can be used in mid-term
    and long-term voltage stability simulations (i.e., to study voltage collapse),
    as it can replace a more detailed representation of aggregate load, including
    induction motors, thermostatically controlled and static loads.
    '''

    bs: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady state voltage index for reactive power (<i>BS</i>).
            '''

        })
    '''
    Steady state voltage index for reactive power (<i>BS</i>).
    '''

    bt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient voltage index for reactive power (<i>BT</i>).
            '''

        })
    '''
    Transient voltage index for reactive power (<i>BT</i>).
    '''

    ls: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steady state voltage index for active power (<i>LS</i>).
            '''

        })
    '''
    Steady state voltage index for active power (<i>LS</i>).
    '''

    lt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient voltage index for active power (<i>LT</i>).
            '''

        })
    '''
    Transient voltage index for active power (<i>LT</i>).
    '''

    genericNonLinearLoadModelType: Optional[ GenericNonLinearLoadModelKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of generic non-linear load model.
            '''

        })
    '''
    Type of generic non-linear load model.
    '''

    tp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of lag function of active power (<i>T</i><i><sub>P</sub></i>)
            (&gt; 0).
            '''

        })
    '''
    Time constant of lag function of active power (<i>T</i><i><sub>P</sub></i>)
    (&gt; 0).
    '''

    tq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant of lag function of reactive power (<i>T</i><i><sub>Q</sub></i>)
            (&gt; 0).
            '''

        })
    '''
    Time constant of lag function of reactive power (<i>T</i><i><sub>Q</sub></i>)
    (&gt; 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadUserDefined(LoadDynamics):
    '''
    Load whose dynamic behaviour is described by a user-defined model.
    '''

    proprietary: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Behaviour is based on a proprietary model as opposed to a detailed model.
            true = user-defined model is proprietary with behaviour mutually understood
            by sending and receiving applications and parameters passed as general
            attributes
            false = user-defined model is explicitly defined in terms of control blocks
            and their input and output signals.
            '''

        })
    '''
    Behaviour is based on a proprietary model as opposed to a detailed
    model.
    true = user-defined model is proprietary with behaviour mutually understood
    by sending and receiving applications and parameters passed as general
    attributes
    false = user-defined model is explicitly defined in terms of control
    blocks and their input and output signals.
    '''

    ProprietaryParameterDynamics: list[ProprietaryParameterDynamics] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProprietaryParameterDynamics.LoadUserDefined',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Parameter of this proprietary user-defined model.
            '''

        })
    '''
    Parameter of this proprietary user-defined model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'SubLoadArea.LoadGroups',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The SubLoadArea where the Loadgroup belongs.
            '''

        })
    '''
    The SubLoadArea where the Loadgroup belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The ConformLoadSchedules in the ConformLoadGroup.
            '''

        })
    '''
    The ConformLoadSchedules in the ConformLoadGroup.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The NonConformLoadSchedules in the NonConformLoadGroup.
            '''

        })
    '''
    The NonConformLoadSchedules in the NonConformLoadGroup.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadMotor(IdentifiedObject):
    '''
    Aggregate induction motor load. This model is used to represent a fraction
    of an ordinary load as "induction motor load". It allows a load that is
    treated as an ordinary constant power in power flow analysis to be represented
    by an induction motor in dynamic simulation. This model is intended for
    representation of aggregations of many motors dispersed through a load
    represented at a high voltage bus but where there is no information on
    the characteristics of individual motors.
    Either a "one-cage" or "two-cage" model of the induction machine can be
    modelled. Magnetic saturation is not modelled.
    This model treats a fraction of the constant power part of a load as a
    motor. During initialisation, the initial power drawn by the motor is set
    equal to <i>Pfrac</i> times the constant <i>P</i> part of the static load.
    The remainder of the load is left as a static load.
    The reactive power demand of the motor is calculated during initialisation
    as a function of voltage at the load bus. This reactive power demand can
    be less than or greater than the constant <i>Q</i> component of the load.
    If the motor's reactive demand is greater than the constant <i>Q</i> component
    of the load, the model inserts a shunt capacitor at the terminal of the
    motor to bring its reactive demand down to equal the constant <i>Q</i>
    reactive load.
    If an induction motor load model and a static load model are both present
    for a load, the motor <i>Pfrac</i> is assumed to be subtracted from the
    power flow constant <i>P</i> load before the static load model is applied.
    The remainder of the load, if any, is then represented by the static load
    model.
    '''

    d: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Damping factor (<i>D</i>). Unit = delta <i>P</i>/delta speed. Typical value
            = 2.
            '''

        })
    '''
    Damping factor (<i>D</i>). Unit = delta <i>P</i>/delta speed. Typical
    value = 2.
    '''

    lfac: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loading factor (<i>Lfac</i>). The ratio of initial <i>P</i> to motor MVA
            base. Typical value = 0,8.
            '''

        })
    '''
    Loading factor (<i>Lfac</i>). The ratio of initial <i>P</i> to motor
    MVA base. Typical value = 0,8.
    '''

    pfrac: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of constant-power load to be represented by this motor model (<i>Pfrac</i>)
            (&gt;= 0,0 and &lt;= 1,0). Typical value = 0,3.
            '''

        })
    '''
    Fraction of constant-power load to be represented by this motor model
    (<i>Pfrac</i>) (&gt;= 0,0 and &lt;= 1,0). Typical value = 0,3.
    '''

    h: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inertia constant (<i>H</i>) (&gt;= 0). Typical value = 0,4.
            '''

        })
    '''
    Inertia constant (<i>H</i>) (&gt;= 0). Typical value = 0,4.
    '''

    lp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient reactance (<i>Lp</i>). Typical value = 0,15.
            '''

        })
    '''
    Transient reactance (<i>Lp</i>). Typical value = 0,15.
    '''

    lpp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Subtransient reactance (<i>Lpp</i>). Typical value = 0,15.
            '''

        })
    '''
    Subtransient reactance (<i>Lpp</i>). Typical value = 0,15.
    '''

    ls: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous reactance (<i>Ls</i>). Typical value = 3,2.
            '''

        })
    '''
    Synchronous reactance (<i>Ls</i>). Typical value = 3,2.
    '''

    ra: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stator resistance (<i>Ra</i>). Typical value = 0.
            '''

        })
    '''
    Stator resistance (<i>Ra</i>). Typical value = 0.
    '''

    tbkr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Circuit breaker operating time (<i>Tbkr</i>) (&gt;= 0). Typical value =
            0,08.
            '''

        })
    '''
    Circuit breaker operating time (<i>Tbkr</i>) (&gt;= 0). Typical value
    = 0,08.
    '''

    tpo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient rotor time constant (<i>Tpo</i>) (&gt;= 0). Typical value = 1.
            '''

        })
    '''
    Transient rotor time constant (<i>Tpo</i>) (&gt;= 0). Typical value
    = 1.
    '''

    tppo: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Subtransient rotor time constant (<i>Tppo</i>) (&gt;= 0). Typical value
            = 0,02.
            '''

        })
    '''
    Subtransient rotor time constant (<i>Tppo</i>) (&gt;= 0). Typical value
    = 0,02.
    '''

    tv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage trip pickup time (<i>Tv</i>) (&gt;= 0). Typical value = 0,1.
            '''

        })
    '''
    Voltage trip pickup time (<i>Tv</i>) (&gt;= 0). Typical value = 0,1.
    '''

    vt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage threshold for tripping (<i>Vt</i>). Typical value = 0,7.
            '''

        })
    '''
    Voltage threshold for tripping (<i>Vt</i>). Typical value = 0,7.
    '''

    LoadAggregate: Optional[LoadAggregate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'LoadAggregate.LoadMotor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate load to which this aggregate motor (dynamic) load belongs.
            '''

        })
    '''
    Aggregate load to which this aggregate motor (dynamic) load belongs.
    '''

    LoadAggregate: Optional[LoadAggregate] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadAggregate.LoadMotor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Aggregate load to which this aggregate motor (dynamic) load belongs.
            '''

        })
    '''
    Aggregate load to which this aggregate motor (dynamic) load belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @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
    Where:
    1) * means "multiply" and ** is "raised to 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadStatic(IdentifiedObject):
    '''
    General static load. This model represents the sensitivity of the real
    and reactive power consumed by the load to the amplitude and frequency
    of the bus voltage.
    '''

    ep1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First term voltage exponent for active power (<i>Ep1</i>). Used only when
            .staticLoadModelType = exponential.
            '''

        })
    '''
    First term voltage exponent for active power (<i>Ep1</i>). Used only
    when .staticLoadModelType = exponential.
    '''

    ep2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second term voltage exponent for active power (<i>Ep2</i>). Used only when
            .staticLoadModelType = exponential.
            '''

        })
    '''
    Second term voltage exponent for active power (<i>Ep2</i>). Used only
    when .staticLoadModelType = exponential.
    '''

    ep3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Third term voltage exponent for active power (<i>Ep3</i>). Used only when
            .staticLoadModelType = exponential.
            '''

        })
    '''
    Third term voltage exponent for active power (<i>Ep3</i>). Used only
    when .staticLoadModelType = exponential.
    '''

    eq1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First term voltage exponent for reactive power (<i>Eq1</i>). Used only
            when .staticLoadModelType = exponential.
            '''

        })
    '''
    First term voltage exponent for reactive power (<i>Eq1</i>). Used only
    when .staticLoadModelType = exponential.
    '''

    eq2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second term voltage exponent for reactive power (<i>Eq2</i>). Used only
            when .staticLoadModelType = exponential.
            '''

        })
    '''
    Second term voltage exponent for reactive power (<i>Eq2</i>). Used
    only when .staticLoadModelType = exponential.
    '''

    eq3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Third term voltage exponent for reactive power (<i>Eq3</i>). Used only
            when .staticLoadModelType = exponential.
            '''

        })
    '''
    Third term voltage exponent for reactive power (<i>Eq3</i>). Used only
    when .staticLoadModelType = exponential.
    '''

    kp1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First term voltage coefficient for active power (<i>K</i><i><sub>p1</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    First term voltage coefficient for active power (<i>K</i><i><sub>p1</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kp2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second term voltage coefficient for active power (<i>K</i><i><sub>p2</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Second term voltage coefficient for active power (<i>K</i><i><sub>p2</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kp3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Third term voltage coefficient for active power (<i>K</i><i><sub>p3</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Third term voltage coefficient for active power (<i>K</i><i><sub>p3</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kp4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency coefficient for active power (<i>K</i><i><sub>p4</sub></i>) (not
            = 0 if .staticLoadModelType = zIP2). Used only when .staticLoadModelType
            = zIP2.
            '''

        })
    '''
    Frequency coefficient for active power (<i>K</i><i><sub>p4</sub></i>)
    (not = 0 if .staticLoadModelType = zIP2). Used only when .staticLoadModelType
    = zIP2.
    '''

    kpf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency deviation coefficient for active power (<i>K</i><i><sub>pf</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Frequency deviation coefficient for active power (<i>K</i><i><sub>pf</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kq1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First term voltage coefficient for reactive power (<i>K</i><i><sub>q1</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    First term voltage coefficient for reactive power (<i>K</i><i><sub>q1</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kq2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second term voltage coefficient for reactive power (<i>K</i><i><sub>q2</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Second term voltage coefficient for reactive power (<i>K</i><i><sub>q2</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kq3: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Third term voltage coefficient for reactive power (<i>K</i><i><sub>q3</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Third term voltage coefficient for reactive power (<i>K</i><i><sub>q3</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    kq4: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency coefficient for reactive power (<i>K</i><i><sub>q4</sub></i>)
            (not = 0 when .staticLoadModelType = zIP2). Used only when .staticLoadModelType
            - zIP2.
            '''

        })
    '''
    Frequency coefficient for reactive power (<i>K</i><i><sub>q4</sub></i>)
    (not = 0 when .staticLoadModelType = zIP2). Used only when .staticLoadModelType
    - zIP2.
    '''

    kqf: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency deviation coefficient for reactive power (<i>K</i><i><sub>qf</sub></i>).
            Not used when .staticLoadModelType = constantZ.
            '''

        })
    '''
    Frequency deviation coefficient for reactive power (<i>K</i><i><sub>qf</sub></i>).
    Not used when .staticLoadModelType = constantZ.
    '''

    staticLoadModelType: Optional[ StaticLoadModelKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of static load model. Typical value = constantZ.
            '''

        })
    '''
    Type of static load model. Typical value = constantZ.
    '''

    LoadAggregate: Optional[LoadAggregate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'LoadAggregate.LoadStatic',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate load to which this aggregate static load belongs.
            '''

        })
    '''
    Aggregate load to which this aggregate static load belongs.
    '''

    LoadAggregate: Optional[LoadAggregate] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadAggregate.LoadStatic',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Aggregate load to which this aggregate static load belongs.
            '''

        })
    '''
    Aggregate load to which this aggregate static load belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LocalReliabilityArea(IdentifiedObject):
    '''
    Allows definition of reliability areas (e.g.. load pockets) within the
    ISO/RTO.
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.LocalReliabilityArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: list[RegisteredGenerator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredGenerator.LocalReliabilityArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    CoordinateSystem: Optional[CoordinateSystem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CoordinateSystem.Locations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coordinate system used to describe position points of this location.
            '''

        })
    '''
    Coordinate system used to describe position points of this location.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Incident at this location.
            '''

        })
    '''
    Incident at this location.
    '''

    OutageOrder: Optional[OutageOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutageOrder.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage order at this location.
            '''

        })
    '''
    The outage order at this location.
    '''

    SwitchingOrder: Optional[SwitchingOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingOrder.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching order at this location.
            '''

        })
    '''
    The switching order at this location.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The trouble order at this location
            '''

        })
    '''
    The trouble order at this location
    '''

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets at this location.
            '''

        })
    '''
    All assets at this location.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The crew that is assigned to this locaton.
            '''

        })
    '''
    The crew that is assigned to this locaton.
    '''

    EnvironmentalLocationKind: list[EnvironmentalLocationType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalLocationType.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Kind of environmental location which this location is.
            '''

        })
    '''
    Kind of environmental location which this location is.
    '''

    EnvironmentalMonitoringStation: list[EnvironmentalMonitoringStation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalMonitoringStation.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Monitoring station located at this location.
            '''

        })
    '''
    Monitoring station located at this location.
    '''

    Fault: list[Fault] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Fault.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All faults at this location.
            '''

        })
    '''
    All faults at this location.
    '''

    Incident: Optional[Incident] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Incident.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Incident at this location.
            '''

        })
    '''
    Incident at this location.
    '''

    PositionPoints: list[PositionPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PositionPoint.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Sequence of position points describing this location, expressed in coordinate
            system 'Location.CoordinateSystem'.
            '''

        })
    '''
    Sequence of position points describing this location, expressed in
    coordinate system 'Location.CoordinateSystem'.
    '''

    PowerSystemResources: list[PowerSystemResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PowerSystemResource.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All power system resources at this location.
            '''

        })
    '''
    All power system resources at this location.
    '''

    TroubleOrder: Optional[TroubleOrder] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleOrder.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The trouble order at this location
            '''

        })
    '''
    The trouble order at this location
    '''

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.Location',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UsagePointLocation(Location):
    '''
    Location of an individual usage point.
    '''

    accessMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    remark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks about this location.
            '''

        })
    '''
    Remarks about this location.
    '''

    siteAccessProblem: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    UsagePoints: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.UsagePointLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage points at this location.
            '''

        })
    '''
    All usage points at this location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkLocation(Location):
    '''
    Information about a particular location for various forms of work.
    '''

    OneCallRequest: Optional[OneCallRequest] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OneCallRequest.WorkLocations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BaseWorks: list[BaseWork] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BaseWork.WorkLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All works/tasks at this location.
            '''

        })
    '''
    All works/tasks at this location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InternalLocation(WorkLocation):
    '''
    Description of location internal to a building.
    '''

    buildingName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Floor of location.
            '''

        })
    '''
    Floor of location.
    '''

    roomNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Room number of location.
            '''

        })
    '''
    Room number of location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaintenanceLocation(WorkLocation):
    '''
    Location where to perform maintenance work.
    '''

    block: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Name, identifier, or description of the block in which
            work is to occur.
            '''

        })
    '''
    (if applicable) Name, identifier, or description of the block in which
    work is to occur.
    '''

    lot: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Name, identifier, or description of the lot in which work
            is to occur.
            '''

        })
    '''
    (if applicable) Name, identifier, or description of the lot in which
    work is to occur.
    '''

    nearestIntersection: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    subdivision: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Name, identifier, or description of the subdivision in
            which work is to occur.
            '''

        })
    '''
    (if applicable) Name, identifier, or description of the subdivision
    in which work is to occur.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceLocation(WorkLocation):
    '''
    A real estate location, commonly referred to as premises.
    '''

    accessMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Method for the service person to access this service 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 service location. For
    example, a description of where to obtain a key if the facility is
    unmanned and secured.
    '''

    needsInspection: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if inspection is needed of facilities at this service location. This
            could be requested by a customer, due to suspected tampering, environmental
            concerns (e.g., a fire in the vicinity), or to correct incompatible data.
            '''

        })
    '''
    True if inspection is needed of facilities at this service location.
    This could be requested by a customer, due to suspected tampering,
    environmental concerns (e.g., a fire in the vicinity), or to correct
    incompatible data.
    '''

    siteAccessProblem: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Problems previously encountered when visiting or performing work on this
            location. Examples include: bad dog, violent customer, verbally abusive
            occupant, obstructions, safety hazards, etc.
            '''

        })
    '''
    Problems previously encountered when visiting or performing work on
    this location. Examples include: bad dog, violent customer, verbally
    abusive occupant, obstructions, safety hazards, etc.
    '''

    Asset: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.ServiceLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets that exist at the service location
            '''

        })
    '''
    All assets that exist at the service location
    '''

    EndDevices: list[EndDevice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDevice.ServiceLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end devices that measure the service delivered to this service location.
            '''

        })
    '''
    All end devices that measure the service delivered to this service
    location.
    '''

    ServiceRequest: list[ServiceRequest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ServiceRequest.ServiceLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All service requests for the service location
            '''

        })
    '''
    All service requests for the service location
    '''

    TroubleTicket: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.ServiceLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The ticket called in by the customer that describes the trouble
            '''

        })
    '''
    The ticket called in by the customer that describes the trouble
    '''

    UsagePoints: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.ServiceLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage points delivering service (of the same type) to this service
            location.
            '''

        })
    '''
    All usage points delivering service (of the same type) to this service
    location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Zone(Location):
    '''
    Area divided off from other areas. It may be part of the electrical network,
    a land area where special restrictions apply, weather areas, etc. For weather,
    it is an area where a set of relatively homogenous weather measurements
    apply.
    '''

    kind: Optional[ ZoneKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this zone.
            '''

        })
    '''
    Kind of this zone.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MPMTestCategory(IdentifiedObject):
    '''
    Provides a reference to the Market Power Mitigation test identifiers and
    methods for the results of the DA or RT markets. Specific data is the test
    identifier (Price, Conduct, or Impact) and the test method (System MPM,
    Local MPM, Alternate System MPM, or Alternate Local MPM).
    '''

    purposeFlag: Optional[ PurposeFlagType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nature of threshold data:
            'M' - Mitigation threshold
            'R' - Reporting threshold
            '''

        })
    '''
    Nature of threshold data:
    'M' - Mitigation threshold
    'R' - Reporting threshold
    '''

    testIdentifier: Optional[ MPMTestIdentifierType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            1 - Global Price Test
            2 - Global Conduct Test
            3 - Global Impact Test
            4 - Local Price Test
            5 - Local Conduct Test
            6 - Local Impact Test
            '''

        })
    '''
    1 - Global Price Test
    2 - Global Conduct Test
    3 - Global Impact Test
    4 - Local Price Test
    5 - Local Conduct Test
    6 - Local Impact Test
    '''

    testMethod: Optional[ MPMTestMethodType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The method of performing the market power monitoring. Examples are Normal
            (default) thresholds or Alternate thresholds.
            '''

        })
    '''
    The method of performing the market power monitoring. Examples are
    Normal (default) thresholds or Alternate thresholds.
    '''

    MPMResourceStatus: list[MPMResourceStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMResourceStatus.MPMTestCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMTestResults: list[MPMTestResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMTestResults.MPMTestCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMTestThreshold: list[MPMTestThreshold] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMTestThreshold.MPMTestCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MSSAggregation(IdentifiedObject):
    '''
    Metered Sub-System aggregation of MSS Zones.
    '''

    costRecovery: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Charge for Emission Costs, Start Up Costs, or Minimum Load Costs.
            '''

        })
    '''
    Charge for Emission Costs, Start Up Costs, or Minimum Load Costs.
    '''

    grossSettlement: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MSS Load Following may select Net vs. Gross settlement. Net Settlement
            requires the net Demand settled at the MSS LAP and Net Supply needs to
            settle at the equivalent to the weighted average price of the MSS generation.
            Gross load will be settled at the System LAP and the Gross supply will
            be settled at the LMP. MSS Aggregation that elects gross settlement shall
            have to identify if its resources are Load Following or not.
            '''

        })
    '''
    MSS Load Following may select Net vs. Gross settlement. Net Settlement
    requires the net Demand settled at the MSS LAP and Net Supply needs
    to settle at the equivalent to the weighted average price of the MSS
    generation. Gross load will be settled at the System LAP and the Gross
    supply will be settled at the LMP. MSS Aggregation that elects gross
    settlement shall have to identify if its resources are Load Following
    or not.
    '''

    ignoreLosses: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides an indication if losses are to be ignored for this zone. Also
            refered to as Exclude Marginal Losses.
            '''

        })
    '''
    Provides an indication if losses are to be ignored for this zone. Also
    refered to as Exclude Marginal Losses.
    '''

    ignoreMarginalLosses: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides an indication if marginal losses are to be ignored for this zone.
            '''

        })
    '''
    Provides an indication if marginal losses are to be ignored for this
    zone.
    '''

    loadFollowing: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that this particular MSSA participates in the Load Following
            function.
            '''

        })
    '''
    Indication that this particular MSSA participates in the Load Following
    function.
    '''

    rucProcurement: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates that RUC will be procured by the ISO or self provided.
            '''

        })
    '''
    Indicates that RUC will be procured by the ISO or self provided.
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.MSSAggregation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeteredSubSystem: list[MeteredSubSystem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeteredSubSystem.MSSAggregation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MajorChargeGroup(IdentifiedObject):
    '''
    A Major Charge Group is the same as Invoice Type which provides the highest
    level of grouping for charge types configuration. Examples: Market, FERC,
    RMR.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    frequencyType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    invoiceType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    requireAutorun: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    revisionNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Revision number for the major charge group
            '''

        })
    '''
    Revision number for the major charge group
    '''

    runType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    runVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    terminationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktScheduledEvent: list[MarketScheduledEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketScheduledEvent.MajorChargeGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Market(IdentifiedObject):
    '''
    Market (e.g. Day Ahead Market, Real Time Market) with a description of
    the Market operation control parameters.
    '''

    actualEnd: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market ending time - actual market end
            '''

        })
    '''
    Market ending time - actual market end
    '''

    actualStart: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market starting time - actual market start
            '''

        })
    '''
    Market starting time - actual market start
    '''

    dst: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if daylight savings time (DST) is in effect.
            '''

        })
    '''
    True if daylight savings time (DST) is in effect.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market end time.
            '''

        })
    '''
    Market end time.
    '''

    localTimeZone: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Local time zone.
            '''

        })
    '''
    Local time zone.
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market start time.
            '''

        })
    '''
    Market start time.
    '''

    status: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market Status
            'OPEN', 'CLOSED', 'CLEARED', 'BLOCKED'
            '''

        })
    '''
    Market Status
    'OPEN', 'CLOSED', 'CLEARED', 'BLOCKED'
    '''

    timeIntervalLength: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trading time interval length.
            '''

        })
    '''
    Trading time interval length.
    '''

    tradingDay: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market trading date
            '''

        })
    '''
    Market trading date
    '''

    tradingPeriod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Trading period that describes the market, possibilities could be for an
            Energy Market:
            Day
            Hour
            For a CRR Market:
            Year
            Month
            Season
            '''

        })
    '''
    Trading period that describes the market, possibilities could be for
    an Energy Market:
    Day
    Hour
    For a CRR Market:
    Year
    Month
    Season
    '''

    MarketFactors: list[MarketFactors] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketFactors.Market',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketProducts: list[MarketProduct] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketProduct.Market',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRun: list[MarketRun] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketRun.Market',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CRRMarket(Market):
    '''
    Model that describes the Congestion Revenue Rights Auction Market.
    '''

    labelID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            labelID - an ID for a set of apnodes/pnodes used in a CRR market
            '''

        })
    '''
    labelID - an ID for a set of apnodes/pnodes used in a CRR market
    '''

    CongestionRevenueRight: list[CongestionRevenueRight] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CongestionRevenueRight.CRRMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyMarket(Market):
    '''
    Energy and Ancillary Market (e.g. Energy, Spinning Reserve, Non-Spinning
    Reserve) with a description of the Market operation control parameters.
    '''

    MarketResults: Optional[MarketResults] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketResults.EnergyMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.EnergyMarkets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Bids: list[Bid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bid.EnergyMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketResults: Optional[MarketResults] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketResults.EnergyMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Settlements: list[Settlement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Settlement.EnergyMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketActualEvent(IdentifiedObject):
    '''
    This class represents the actual instance of an event.
    '''

    eventComments: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free format comments for the event, for any purpose needed.
            '''

        })
    '''
    Free format comments for the event, for any purpose needed.
    '''

    eventEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End time of the event.
            '''

        })
    '''
    End time of the event.
    '''

    eventStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time of the event.
            '''

        })
    '''
    Start time of the event.
    '''

    eventType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual event type.
            '''

        })
    '''
    Actual event type.
    '''

    eventStatus: Optional[ MarketEventStatusKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Event status, e.g. active, canceled, expired, etc.
            '''

        })
    '''
    Event status, e.g. active, canceled, expired, etc.
    '''

    MarketRun: Optional[MarketRun] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketRun.MarketActualEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market run triggered by this actual event. For example, the DA market run
            is triggered by the actual open bid submission event and terminated by
            the actual execution and completion of the DA market run captured by the
            runState of the MarketRun.
            '''

        })
    '''
    Market run triggered by this actual event. For example, the DA market
    run is triggered by the actual open bid submission event and terminated
    by the actual execution and completion of the DA market run captured
    by the runState of the MarketRun.
    '''

    PlannedMarketEvent: Optional[PlannedMarketEvent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PlannedMarketEvent.MarketActualEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned event executed by this actual event.
            '''

        })
    '''
    Planned event executed by this actual event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.IRCDR)
@dataclass(repr=False)
class DistributedResourceActualEvent(MarketActualEvent):
    '''
    A demand response event is created when there is a need to call upon resources
    to respond to demand adjustment requests. These events are created by ISO/RTO
    system operations and managed by a demand response management system (DRMS).
    These events may or may not be coordinated with the Market Events and a
    defined Energy Market. The event will call for the deployment of a number
    of registered resources, or for deployment of resources within a zone (an
    organizational area within the power system that contains a number of resources).
    '''

    totalPowerAdjustment: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total active power adjustment (e.g. load reduction) requested for this
            demand response event.
            '''

        })
    '''
    Total active power adjustment (e.g. load reduction) requested for this
    demand response event.
    '''

    InstructionClearing: list[InstructionClearing] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InstructionClearing.ActualDemandResponseEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            ActualDemandResponseEvents may exist that are not part of a coordinated
            MarketActualEvent associated to a Market. These ActualDemandResponseEvents
            can have many InstructionClearing Instructions for specified RegisteredResources
            or DemandResponse AggregateNodes.
            '''

        })
    '''
    ActualDemandResponseEvents may exist that are not part of a coordinated
    MarketActualEvent associated to a Market. These ActualDemandResponseEvents
    can have many InstructionClearing Instructions for specified RegisteredResources
    or DemandResponse AggregateNodes.
    '''

    InstructionClearingDOT: list[InstructionClearingDOT] = field(
        default_factory=list,
        metadata={
        'type': 'IRC-DR',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InstructionClearingDOT.DemandResponseActualEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourcePerformanceEvaluations: list[ResourcePerformanceEvaluation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourcePerformanceEvaluation.DemandResponseActualEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketPerson(IdentifiedObject):
    '''
    General purpose information for name and other information to contact people.
    '''

    category: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Category of this person relative to utility operations, classified according
            to the utility's corporate standards and practices. Examples include employee,
            contractor, agent, not affiliated, etc.
            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.
            '''

        })
    '''
    Category of this person relative to utility operations, classified
    according to the utility's corporate standards and practices. Examples
    include employee, contractor, agent, not affiliated, etc.
    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.
    '''

    firstName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Person's first name.
            '''

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

    governmentID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identifier for person relative to its governing authority, for example
            a federal tax identifier (such as a Social Security number in the United
            States).
            '''

        })
    '''
    Unique identifier for person relative to its governing authority, for
    example a federal tax identifier (such as a Social Security number
    in the United States).
    '''

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

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

    mName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Middle name(s) or initial(s).
            '''

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

    prefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    specialNeed: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Special service needs for the person (contact) are described; examples
            include life support, etc.
            '''

        })
    '''
    Special service needs for the person (contact) are described; examples
    include life support, etc.
    '''

    suffix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A suffix for the person's name, such as II, III, etc.
            '''

        })
    '''
    A suffix for the person's name, such as II, III, etc.
    '''

    userID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The user name for the person; required to log in.
            '''

        })
    '''
    The user name for the person; required to log in.
    '''

    MarketSkills: list[MarketSkill] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketSkill.MarketPerson',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketPlan(IdentifiedObject):
    '''
    This class identifies a set of planned markets.
    '''

    tradingDay: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned market trading day.
            '''

        })
    '''
    Planned market trading day.
    '''

    PlannedMarket: list[PlannedMarket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PlannedMarket.MarketPlan',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A market plan has a number of markets (DA, HA, RT).
            '''

        })
    '''
    A market plan has a number of markets (DA, HA, RT).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramping time interval for the specific market product type specified by
            marketProductType attribute. For example, if marketProductType = EN (from
            enumeration MarketProductType), then the rampInterval is the ramping time
            interval for Energy.
            '''

        })
    '''
    Ramping time interval for the specific market product type specified
    by marketProductType attribute. For example, if marketProductType =
    EN (from enumeration MarketProductType), then the rampInterval is the
    ramping time interval for Energy.
    '''

    marketProductType: Optional[ MarketProductType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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[Market] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Market.MarketProducts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegionResults: Optional[MarketRegionResults] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketRegionResults.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidError: list[BidError] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidError.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidPriceCap: list[BidPriceCap] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidPriceCap.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CommodityDefinition: list[CommodityDefinition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityDefinition.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegionResults: Optional[MarketRegionResults] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketRegionResults.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProductBids: list[ProductBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProductBid.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReserveReqs: list[ReserveReq] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReserveReq.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Market product associated with reserve requirement must be a reserve or
            regulation product.
            '''

        })
    '''
    Market product associated with reserve requirement must be a reserve
    or regulation product.
    '''

    ResourceAwardInstruction: list[ResourceAwardInstruction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceAwardInstruction.MarketProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketQualificationRequirement(IdentifiedObject):
    '''
    Certain skills are required and shall be certified in order for a person
    (typically a member of a crew) to be qualified to work on types of equipment.
    '''

    effectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effective date of the privilege, terminate date of the privilege, or effective
            date of the application for the organization
            '''

        })
    '''
    Effective date of the privilege, terminate date of the privilege, or
    effective date of the application for the organization
    '''

    expirationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the terminate date of the application for the organization
            The specific organization can no longer access the application as of the
            terminate date
            '''

        })
    '''
    This is the terminate date of the application for the organization
    The specific organization can no longer access the application as of
    the terminate date
    '''

    qualificationID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Qualification identifier.
            '''

        })
    '''
    Qualification identifier.
    '''

    status: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The status of the privilege. Shows the status of the user�s qualification.
            The current statuses are: 1=New, 2=Active, 3=Refused, 4=Terminated, 5=Withdrawn
            and it is subject to update.
            '''

        })
    '''
    The status of the privilege. Shows the status of the user�s qualification.
    The current statuses are: 1=New, 2=Active, 3=Refused, 4=Terminated,
    5=Withdrawn
    and it is subject to update.
    '''

    statusType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the name of the status of the qualification and is used to display
            the status of the user's or organization's status.
            '''

        })
    '''
    This is the name of the status of the qualification and is used to
    display the status of the user's or organization's status.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketRun(IdentifiedObject):
    '''
    This class represents an actual instance of a planned market. For example,
    a Day Ahead market opens with the Bid Submission, ends with the closing
    of the Bid Submission. The market run represent the whole process. MarketRuns
    can be defined for markets such as Day Ahead Market, Real Time Market,
    Hour Ahead Market, Week Ahead Market, etc.
    '''

    marketApprovalTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Approved time for case. Identifies the time that the dispatcher approved
            a specific real time unit dispatch case
            '''

        })
    '''
    Approved time for case. Identifies the time that the dispatcher approved
    a specific real time unit dispatch case
    '''

    marketApprovedStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set to true when the plan is approved by authority and becomes the official
            plan for the day ahead market. Identifies the approved case for the market
            for the specified time interval.
            '''

        })
    '''
    Set to true when the plan is approved by authority and becomes the
    official plan for the day ahead market. Identifies the approved case
    for the market for the specified time interval.
    '''

    marketEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The end time defined as the end of the market, market end time.
            '''

        })
    '''
    The end time defined as the end of the market, market end time.
    '''

    marketStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start time defined as the beginning of the market, market start time.
            '''

        })
    '''
    The start time defined as the beginning of the market, market start
    time.
    '''

    reportedState: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the state of market run activity as reported by market systems
            to the market definition services.
            '''

        })
    '''
    This is the state of market run activity as reported by market systems
    to the market definition services.
    '''

    runState: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the state controlled by market defintion service.
            Possible values could be but not limited by: Open, Close.
            '''

        })
    '''
    This is the state controlled by market defintion service.
    Possible values could be but not limited by: Open, Close.
    '''

    executionType: Optional[ ExecutionType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The execution type; Day Ahead, Intra Day, Real Time Pre-Dispatch, Real
            Time Dispatch
            '''

        })
    '''
    The execution type; Day Ahead, Intra Day, Real Time Pre-Dispatch, Real
    Time Dispatch
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The market type, Day Ahead Market or Real Time Market.
            '''

        })
    '''
    The market type, Day Ahead Market or Real Time Market.
    '''

    Market: Optional[Market] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Market.MarketRun',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PlannedMarket: Optional[PlannedMarket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PlannedMarket.MarketRun',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A planned market could have multiple market runs for the reason that a
            planned market could have a rerun.
            '''

        })
    '''
    A planned market could have multiple market runs for the reason that
    a planned market could have a rerun.
    '''

    MarketActualEvent: list[MarketActualEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketActualEvent.MarketRun',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All actual events that trigger this market run.
            '''

        })
    '''
    All actual events that trigger this market run.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketScheduledEvent(IdentifiedObject):
    '''
    Signifies an event to trigger one or more activities, such as reading a
    meter, recalculating a bill, requesting work, when generating units shall
    be scheduled for maintenance, when a transformer is scheduled to be refurbished,
    etc.
    '''

    category: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Category of scheduled event.
            '''

        })
    '''
    Category of scheduled event.
    '''

    duration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    MajorChargeGroup: Optional[MajorChargeGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MajorChargeGroup.MktScheduledEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketStatementLineItem(IdentifiedObject):
    '''
    An individual line item on an ISO settlement statement.
    '''

    currentAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current settlement amount.
            '''

        })
    '''
    Current settlement amount.
    '''

    currentISOAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current ISO settlement amount.
            '''

        })
    '''
    Current ISO settlement amount.
    '''

    currentISOQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current ISO settlement quantity.
            '''

        })
    '''
    Current ISO settlement quantity.
    '''

    currentPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current settlement price.
            '''

        })
    '''
    Current settlement price.
    '''

    currentQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current settlement quantity, subject to the UOM.
            '''

        })
    '''
    Current settlement quantity, subject to the UOM.
    '''

    intervalDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date of which the settlement is run.
            '''

        })
    '''
    The date of which the settlement is run.
    '''

    intervalNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The number of intervals.
            '''

        })
    '''
    The number of intervals.
    '''

    netAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net settlement amount.
            '''

        })
    '''
    Net settlement amount.
    '''

    netISOAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net ISO settlement amount.
            '''

        })
    '''
    Net ISO settlement amount.
    '''

    netISOQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net ISO settlement quantity.
            '''

        })
    '''
    Net ISO settlement quantity.
    '''

    netPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net settlement price.
            '''

        })
    '''
    Net settlement price.
    '''

    netQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net settlement quantity, subject to the UOM.
            '''

        })
    '''
    Net settlement quantity, subject to the UOM.
    '''

    previousAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous settlement amount.
            '''

        })
    '''
    Previous settlement amount.
    '''

    previousISOAmount: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous ISO settlement amount.
            '''

        })
    '''
    Previous ISO settlement amount.
    '''

    previousISOQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous ISO settlement quantity.
            '''

        })
    '''
    Previous ISO settlement quantity.
    '''

    previousPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous settlement price.
            '''

        })
    '''
    Previous settlement price.
    '''

    previousQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Previous settlement quantity, subject to the UOM.
            '''

        })
    '''
    Previous settlement quantity, subject to the UOM.
    '''

    quantityUOM: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure for the quantity element of the line item.
            '''

        })
    '''
    The unit of measure for the quantity element of the line item.
    '''

    ContainerMarketStatementLineItem: Optional[MarketStatementLineItem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketStatementLineItem.ComponentMarketStatementLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketStatement: Optional[MarketStatement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketStatement.MarketStatementLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PassThroughBill: Optional[PassThroughBill] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PassThroughBill.MarketStatementLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ComponentMarketStatementLineItem: list[MarketStatementLineItem] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketStatementLineItem.ContainerMarketStatementLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PassThroughBill: Optional[PassThroughBill] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PassThroughBill.MarketStatementLineItem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MaterialItem(IdentifiedObject):
    '''
    The physical consumable supply used for work and other purposes. It includes
    items such as nuts, bolts, brackets, glue, etc.
    '''

    TypeMaterial: Optional[TypeMaterial] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TypeMaterial.MaterialItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTask: Optional[WorkTask] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkTask.MaterialItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The work task that uses the material items
            '''

        })
    '''
    The work task that uses the material items
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset that has a measurement
            '''

        })
    '''
    Asset that has a measurement
    '''

    CalculationMethodHierarchy: Optional[CalculationMethodHierarchy] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CalculationMethodHierarchy.Measurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The measurement action that is performed on the measurement
            '''

        })
    '''
    The measurement action that is performed on the measurement
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.Measurements',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    MeasurementAction: Optional[MeasurementAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementAction.Measurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The measurement action that is performed on the measurement
            '''

        })
    '''
    The measurement action that is performed on the measurement
    '''

    MeasurementCalculatorInput: list[MeasurementCalculatorInput] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeasurementCalculatorInput.Measurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PinMeasurement: list[PinMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinMeasurement.Measurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProtectiveActionAdjustment: list[ProtectiveActionAdjustment] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveActionAdjustment.Measurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true then this measurement is an active power, reactive power or current
            with the convention that a positive value measured at the Terminal means
            power is flowing into the related PowerSystemResource.
            '''

        })
    '''
    If true then this measurement is an active power, reactive power or
    current with the convention that a positive value measured at the Terminal
    means power is flowing into the related PowerSystemResource.
    '''

    AnalogValues: list[AnalogValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnalogValue.Analog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetAnalog(Analog):
    '''
    Definition of type of analog useful in asset domain.
    '''

    detectionLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Detection limit of related analog value if different from detection limit
            of test standard or if there is no test standard. The detection limit (also
            known as lower limit of detection or limit of detection (LOD), is the lowest
            quantity of a substance that can be distinguished from the absence of that
            substance (a blank value) within a stated confidence limit (generally 1%).
            '''

        })
    '''
    Detection limit of related analog value if different from detection
    limit of test standard or if there is no test standard. The detection
    limit (also known as lower limit of detection or limit of detection
    (LOD), is the lowest quantity of a substance that can be distinguished
    from the absence of that substance (a blank value) within a stated
    confidence limit (generally 1%).
    '''

    precision: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Precision of related analog value if different from precision of test standard
            or if there is no test standard. Precision is a measure of how closely
            individual measurements agree with one another. Expressed as 'plus or minus'
            the value of this attribute.
            '''

        })
    '''
    Precision of related analog value if different from precision of test
    standard or if there is no test standard. Precision is a measure of
    how closely individual measurements agree with one another. Expressed
    as 'plus or minus' the value of this attribute.
    '''

    reportingTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reporting temperature of related analog value if different from reporting
            temperature of test standard or if there is no test standard. Reporting
            temperature is what gas volumes are normalized to. Different reporting
            temperatures are used by different sources. For example, ASTM specifies
            0�C, whereas IEC specifies 20�C. Online monitors often have their own unique
            reporting temperatures.
            '''

        })
    '''
    Reporting temperature of related analog value if different from reporting
    temperature of test standard or if there is no test standard. Reporting
    temperature is what gas volumes are normalized to. Different reporting
    temperatures are used by different sources. For example, ASTM specifies
    0�C, whereas IEC specifies 20�C. Online monitors often have their own
    unique reporting temperatures.
    '''

    TestStandard: Optional[TestStandard] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TestStandard.AssetAnalog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lab test standard to which this asset health analog is related.
            '''

        })
    '''
    The lab test standard to which this asset health analog is related.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetTemperaturePressureAnalog(AssetAnalog):
    '''
    Temperature or pressure type of asset analog.
    '''

    kind: Optional[ AssetTemperaturePressureAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing temperature or pressure related to an asset.
            '''

        })
    '''
    Kind of analog representing temperature or pressure related to an asset.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InspectionAnalog(AssetAnalog):
    '''
    Asset inspection type of analog.
    '''

    kind: Optional[ InspectionAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing inspection result.
            '''

        })
    '''
    Kind of analog representing inspection result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisFluidAnalog(AssetAnalog):
    '''
    Asset oil analysis fluid test type of analog.
    .
    '''

    kind: Optional[ OilAnalysisFluidAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil fluid test analysis result.
            '''

        })
    '''
    Kind of analog representing oil fluid test analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisGasAnalog(AssetAnalog):
    '''
    Asset oil analysis gas type of analog.
    '''

    kind: Optional[ OilAnalysisGasAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil dissolved gases analysis result.
            '''

        })
    '''
    Kind of analog representing oil dissolved gases analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisMetalsAnalog(AssetAnalog):
    '''
    Asset oil analysis metals type of analog.
    '''

    kind: Optional[ OilAnalysisMetalsAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil metals elements analysis result.
            '''

        })
    '''
    Kind of analog representing oil metals elements analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisMoistureAnalog(AssetAnalog):
    '''
    Asset oil analysis moisture type of analog.
    '''

    kind: Optional[ OilAnalysisMoistureAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil moisture analysis result.
            '''

        })
    '''
    Kind of analog representing oil moisture analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisPCBAnalog(AssetAnalog):
    '''
    Asset oil analysis PCB type of analog.
    '''

    kind: Optional[ OilAnalysisPCBAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil PCB analysis result.
            '''

        })
    '''
    Kind of analog representing oil PCB analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisPaperAnalog(AssetAnalog):
    '''
    Asset oil inspection paper type of analog.
    '''

    kind: Optional[ OilAnalysisPaperAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil paper degradation analysis result.
            '''

        })
    '''
    Kind of analog representing oil paper degradation analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisParticleAnalog(AssetAnalog):
    '''
    Asset oil analysis particle type of analog.
    '''

    kind: Optional[ OilAnalysisParticleAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of analog representing oil particulate analysis result.
            '''

        })
    '''
    Kind of analog representing oil particulate analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalAnalog(Analog):
    '''
    Analog (float) measurement of relevance in the environmental domain.
    '''

    ClassificationCondition: Optional[ClassificationCondition] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClassificationCondition.EnvironmentalAnalog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification condition which this analog helps define.
            '''

        })
    '''
    Classification condition which this analog helps define.
    '''

    EnvironmentalInformation: Optional[EnvironmentalInformation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalInformation.EnvironmentalAnalog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Observation or forecast with which this environmental analog measurement
            is associated.
            '''

        })
    '''
    Observation or forecast with which this environmental analog measurement
    is associated.
    '''

    EnvironmentalMonitoringStation: Optional[EnvironmentalMonitoringStation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalMonitoringStation.EnvironmentalAnalog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Monitoring station which provides this environmental analog measurement.
            '''

        })
    '''
    Monitoring station which provides this environmental analog measurement.
    '''

    ReportingCapability: Optional[ReportingCapability] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReportingCapability.EnvironmentalAnalog',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reporting capability this environmental value set helps define.
            '''

        })
    '''
    The reporting capability this environmental value set helps define.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AtmosphericAnalog(EnvironmentalAnalog):
    '''
    Analog (float) measuring an atmospheric condition.
    '''

    kind: Optional[ AtmosphericAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of atmospheric analog.
            '''

        })
    '''
    Kind of atmospheric analog.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GeosphericAnalog(EnvironmentalAnalog):
    '''
    Analog (float) measuring a geospheric condition.
    '''

    kind: Optional[ GeosphericAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of geospheric analog.
            '''

        })
    '''
    Kind of geospheric analog.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HydrosphericAnalog(EnvironmentalAnalog):
    '''
    Analog (float) measuring a hydrospheric condition.
    '''

    kind: Optional[ HydrosphericAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of hydrospheric analog.
            '''

        })
    '''
    Kind of hydrospheric analog.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SpaceAnalog(EnvironmentalAnalog):
    '''
    Analog (float) measuring a space (extra-terrestrial) condition.
    '''

    kind: Optional[ SpaceAnalogKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of space analog.
            '''

        })
    '''
    Kind of space analog.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetDiscrete(Discrete):
    '''
    Definition of type of discrete useful in asset domain.
    '''

    TestStandard: Optional[TestStandard] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TestStandard.AssetDiscrete',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lab test standard to which this asset health discrete is related.
            '''

        })
    '''
    The lab test standard to which this asset health discrete is related.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InspectionDiscrete(AssetDiscrete):
    '''
    Asset inspection type of discrete.
    '''

    kind: Optional[ InspectionDiscreteKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of discrete representing inspection result.
            '''

        })
    '''
    Kind of discrete representing inspection result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisFluidDiscrete(AssetDiscrete):
    '''
    Asset oil analysis fluid type of discrete.
    '''

    kind: Optional[ OilAnalysisFluidDiscreteKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of discrete representing oil fluid test analysis result.
            '''

        })
    '''
    Kind of discrete representing oil fluid test analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisPCBDiscrete(AssetDiscrete):
    '''
    Asset oil analysis PCB type of discrete.
    '''

    kind: Optional[ OilAnalysisPCBDiscreteKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of discrete representing oil PCB test analysis result.
            '''

        })
    '''
    Kind of discrete representing oil PCB test analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilAnalysisParticleDiscrete(AssetDiscrete):
    '''
    Asset oil analysis particle type of discrete.
    '''

    kind: Optional[ OilAnalysisParticleDiscreteKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of discrete representing oil particulate analysis result.
            '''

        })
    '''
    Kind of discrete representing oil particulate analysis result.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalDiscrete(Discrete):
    '''
    Discrete (integer) measurement of relevance in the environmental domain.
    '''

    kind: Optional[ EnvironmentalDiscreteKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of environmental discrete (integer).
            '''

        })
    '''
    Kind of environmental discrete (integer).
    '''

    EnvironmentalInformation: Optional[EnvironmentalInformation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalInformation.EnvironmentalDiscrete',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Observation or forecast with which this environmental discrete (integer)
            is associated.
            '''

        })
    '''
    Observation or forecast with which this environmental discrete (integer)
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class MktMeasurement(Measurement):
    '''
    Subclass of IEC61970:Meas:Measurement.
    '''

    ByTiePoint: Optional[TiePoint] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TiePoint.ByMktMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TiePoint.ForMktMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    DynamicSchedule: list[DynamicSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DynamicSchedule.MktMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ViolationLimit: list[ViolationLimit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ViolationLimit.MktMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The values connected to this measurement.
            '''

        })
    '''
    The values connected to this measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetStringMeasurement(StringMeasurement):
    '''
    Definition of type of string measurement useful in asset domain.
    '''

    kind: Optional[ AssetStringKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of string useful in asset domain.
            '''

        })
    '''
    Kind of string useful in asset domain.
    '''

    TestStandard: Optional[TestStandard] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TestStandard.AssetString',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Test standard which describes this asset string measurement.
            '''

        })
    '''
    Test standard which describes this asset string measurement.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalStringMeasurement(StringMeasurement):
    '''
    String measurement of relevance in the environmental domain.
    '''

    ClassificationCondition: Optional[ClassificationCondition] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClassificationCondition.EnvironmentalStringMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification condition which this string measurement helps define.
            '''

        })
    '''
    Classification condition which this string measurement helps define.
    '''

    EnvironmentalInformation: Optional[EnvironmentalInformation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalInformation.EnvironmentalStringMeasurement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Observation or forecast with which this environmental string is associated.
            '''

        })
    '''
    Observation or forecast with which this environmental string is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class MeasurementCalculator(IdentifiedObject):
    '''
    Result of a calculation of one or more measurement.
    '''

    kind: Optional[ CalculationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Calculation operation executed on the operants.
            '''

        })
    '''
    Calculation operation executed on the operants.
    '''

    MeasurementCalculatorInput: list[MeasurementCalculatorInput] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeasurementCalculatorInput.MeasurementCalculator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Used in the calculation.
            '''

        })
    '''
    Used in the calculation.
    '''

    PinMeasurement: list[PinMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinMeasurement.MeasurementCalculator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeasurementCalculatorInput(IdentifiedObject):
    '''
    Input to measurement calculation. Support Analog, Discrete and Accumulator.
    '''

    absoluteValue: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, use the absolute value for the calculation.
            '''

        })
    '''
    If true, use the absolute value for the calculation.
    '''

    order: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive number that defines the order of the operant in the calculation.
            0 = default. The order is not relevant (e.g. summation).
            '''

        })
    '''
    Positive number that defines the order of the operant in the calculation.
    0 = default. The order is not relevant (e.g. summation).
    '''

    Measurement: Optional[Measurement] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Measurement.MeasurementCalculatorInput',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Measurement used as input to a calculation.
            '''

        })
    '''
    Measurement used as input to a calculation.
    '''

    MeasurementCalculator: Optional[MeasurementCalculator] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MeasurementCalculator.MeasurementCalculatorInput',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The MeasurementValues updated by the source.
            '''

        })
    '''
    The MeasurementValues updated by the source.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Medium(IdentifiedObject):
    '''
    A substance that either (1) provides the means of transmission of a force
    or effect, such as hydraulic fluid, or (2) is used for a surrounding or
    enveloping substance, such as oil in a transformer or circuit breaker.
    '''

    kind: Optional[ MediumKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this medium.
            '''

        })
    '''
    Kind of this medium.
    '''

    volumeSpec: Optional[ float | Volume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The volume of the medium specified for this application. Note that the
            actual volume is a type of measurement associated witht the asset.
            '''

        })
    '''
    The volume of the medium specified for this application. Note that
    the actual volume is a type of measurement associated witht the asset.
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.Mediums',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeterMultiplier(IdentifiedObject):
    '''
    Multiplier applied at the meter.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiplier value.
            '''

        })
    '''
    Multiplier value.
    '''

    kind: Optional[ MeterMultiplierKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of multiplier.
            '''

        })
    '''
    Kind of multiplier.
    '''

    Meter: Optional[Meter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Meter.MeterMultipliers',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter applying this multiplier.
            '''

        })
    '''
    Meter applying this multiplier.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeterReading(IdentifiedObject):
    '''
    Set of values obtained from the meter.
    '''

    isCoincidentTrigger: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this meter reading is the meter reading for which other coincident
            meter readings are requested or provided.
            '''

        })
    '''
    If true, this meter reading is the meter reading for which other coincident
    meter readings are requested or provided.
    '''

    CustomerAgreement: Optional[CustomerAgreement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAgreement.MeterReadings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (could be deprecated in the future) Customer agreement for this meter reading.
            '''

        })
    '''
    (could be deprecated in the future) Customer agreement for this meter
    reading.
    '''

    Meter: Optional[Meter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Meter.MeterReadings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter providing this reading.
            '''

        })
    '''
    Meter providing this reading.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.MeterReadings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage point from which this meter reading (set of values) has been obtained.
            '''

        })
    '''
    Usage point from which this meter reading (set of values) has been
    obtained.
    '''

    EndDeviceEvents: list[EndDeviceEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceEvent.MeterReading',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device events associated with this set of measured values.
            '''

        })
    '''
    All end device events associated with this set of measured values.
    '''

    IntervalBlocks: list[IntervalBlock] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IntervalBlock.MeterReading',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All interval blocks contained in this meter reading.
            '''

        })
    '''
    All interval blocks contained in this meter reading.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MeteredSubSystem(IdentifiedObject):
    '''
    A metered subsystem.
    '''

    MSSAggregation: Optional[MSSAggregation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MSSAggregation.MeteredSubSystem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MSSZone: list[MSSZone] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MSSZone.MeteredSubSystem',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MetrologyRequirement(IdentifiedObject):
    '''
    A specification of the metering requirements for a particular point within
    a network.
    '''

    reason: Optional[ ReadingReasonKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for this metrology requirement being specified.
            '''

        })
    '''
    Reason for this metrology requirement being specified.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MitigatedBid(IdentifiedObject):
    '''
    Mitigated bid results posted for a given settlement period.
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bid.MitigatedBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelAuthority(IdentifiedObject):
    '''
    A Modeling Authority is an entity responsible for supplying and maintaining
    the data defining a specific set of objects in a network model.
    '''

    ModelingAuthoritySets: list[ModelAuthoritySet] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelAuthoritySet.ModelingAuthority',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Modeling Authority Sets supplied and maintained by this Modeling Authority.
            '''

        })
    '''
    Modeling Authority Sets supplied and maintained by this Modeling Authority.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelAuthoritySet(IdentifiedObject):
    '''
    A Modeling Authority Set is a group of objects in a network model where
    the data is supplied and maintained by the same Modeling Authority.
    This class is typically not included in instance data exchange as this
    information is tracked by other mechanisms in the exchange.
    '''

    ModelingAuthority: Optional[ModelAuthority] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelAuthority.ModelingAuthoritySets',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Modeling Authority suppliying and maintaining the data for the objects
            in this Modeling Authority Set.
            '''

        })
    '''
    Modeling Authority suppliying and maintaining the data for the objects
    in this Modeling Authority Set.
    '''

    ModelSpecification: list[ModelPartSpecification] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelPartSpecification.FrameworkPart',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Models of the model frame.
            '''

        })
    '''
    Models of the model frame.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FrameworkPart(ModelAuthoritySet):
    '''
    The type of alternate model frame. For example, it could be generator group
    used to represent generators in state estimator, planning, planning dynamics,
    short circuit, or real-time dynamics etc., but does not specifically represent
    any one alternative model. This need to know what objects to be removed
    in the realization of any one alternate model.
    '''

    Frame: Optional[NetworkFrame] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkFrame.FrameworkPart',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ModelFrameType: Optional[ModelFrameType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelFrameType.ModelFrame',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Model frame type of the model frame.
            '''

        })
    '''
    Model frame type of the model frame.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NetworkBoundary(FrameworkPart):
    '''
    A framework part that is a boundary between 2 frames.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkFrame(FrameworkPart):
    '''
    A region isolated by boundaries.
    '''

    FrameworkPart: list[FrameworkPart] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FrameworkPart.Frame',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelFrameType(IdentifiedObject):
    '''
    Examples would be "Boundary" or "Region" type of frame.
    '''

    ModelFrame: list[FrameworkPart] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FrameworkPart.ModelFrameType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Model frames of the model frame type.
            '''

        })
    '''
    Model frames of the model frame type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'unused'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelOperation(IdentifiedObject):
    '''
    An operation performed on models.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sequence number within a operation sequence, lower is first. Normally starts
            with 1.
            '''

        })
    '''
    Sequence number within a operation sequence, lower is first. Normally
    starts with 1.
    '''

    ModelOperationDescription: Optional[ModelOperationDescription] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelOperationDescription.ModelOperation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the model operation.
            '''

        })
    '''
    The type of the model operation.
    '''

    OperationSequence: Optional[ModelOperationSequence] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelOperationSequence.ModelOperation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ModelOperationArg: list[ModelOperationArg] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelOperationArg.ModelOperation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Arguments of the operation.
            '''

        })
    '''
    Arguments of the operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ModelOperationArg(IdentifiedObject):
    '''
    Describes the role a dataset plays in a model operation. The role is applicable
    only in the context of a single operation.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The sequence number of the argument in an operation. Argument entries are
            considered in numerical order where the operation requires an ordering.
            '''

        })
    '''
    The sequence number of the argument in an operation. Argument entries
    are considered in numerical order where the operation requires an ordering.
    '''

    ModelOperation: Optional[ModelOperation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelOperation.ModelOperationArg',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The opeation for the operation argument.
            '''

        })
    '''
    The opeation for the operation argument.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DatasetArg(ModelOperationArg):
    '''
    A model operation argument referencing a dataset instance.
    '''

    Dataset: Optional[InstanceSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'InstanceSet.DatasetArg',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dataset referenced by this argument of a model operation..
            '''

        })
    '''
    Dataset referenced by this argument of a model operation..
    '''

    OperationDatasetArgDescription: Optional[DatasetArgDescription] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DatasetArgDescription.OperationDatasetArg',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of role for this dataset role. Should only reference role types
            that belong to the operation type of the associated operation.
            '''

        })
    '''
    The type of role for this dataset role. Should only reference role
    types that belong to the operation type of the associated operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IncrementalDatasetArg(ModelOperationArg):
    '''
    A generic model operation argument referencing an incremental change description.
    '''

    IncrementalDataset: Optional[ChangeSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ChangeSet.IncrementalDatasetArg',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IncrementalDatasetArgDescription: Optional[IncrementalDatasetArgDescription] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'IncrementalDatasetArgDescription.IncrementalDatasetArg',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ModelOperationArgDescription(IdentifiedObject):
    '''
    The type of custom operation dataset role for an operation description.
    '''

    multiplicityMaximum: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum multiplicity of the instance arguments that should be supplied
            for a single operation. Use -1 to indicate unlimited.
            '''

        })
    '''
    The maximum multiplicity of the instance arguments that should be supplied
    for a single operation. Use -1 to indicate unlimited.
    '''

    multiplicityMinimum: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum multiplicity of the instance arguments that should be supplied
            for a single operation. Use zero to indicate optional.
            '''

        })
    '''
    The minimum multiplicity of the instance arguments that should be supplied
    for a single operation. Use zero to indicate optional.
    '''

    ModelOperationDefinition: Optional[ModelOperationDescription] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelOperationDescription.OperationDatasetArgDescription',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of operation for this type of dataset role. Operations referencing
            the dataset role type should only belong to operations that reference the
            operation type.
            '''

        })
    '''
    The type of operation for this type of dataset role. Operations referencing
    the dataset role type should only belong to operations that reference
    the operation type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class DatasetArgDescription(ModelOperationArgDescription):
    '''
    '''

    OperationDatasetArg: list[DatasetArg] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DatasetArg.OperationDatasetArgDescription',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operation dataset roles conforming to this role type.
            '''

        })
    '''
    The operation dataset roles conforming to this role type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class IncrementalDatasetArgDescription(ModelOperationArgDescription):
    '''
    '''

    IncrementalDatasetArg: list[IncrementalDatasetArg] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IncrementalDatasetArg.IncrementalDatasetArgDescription',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The incremental dataset used for this argument instance.
            '''

        })
    '''
    The incremental dataset used for this argument instance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelOperationDescription(IdentifiedObject):
    '''
    The type of model operation. This class is referenced by model operations
    and defines the kind of operation.
    '''

    ModelOperation: list[ModelOperation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelOperation.ModelOperationDescription',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The instances of operations that conform to this operation type.
            '''

        })
    '''
    The instances of operations that conform to this operation type.
    '''

    OperationDatasetArgDescription: list[ModelOperationArgDescription] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelOperationArgDescription.ModelOperationDefinition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The type of dataset roles that can be used for a type of general model
            operation.
            '''

        })
    '''
    The type of dataset roles that can be used for a type of general model
    operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelOperationSequence(IdentifiedObject):
    '''
    A concrete sequence of operations. For example, this may be used to describe
    a specific audit trail, a script or other specific set of actions on specific
    datasets.
    '''

    ModelOperation: list[ModelOperation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelOperation.OperationSequence',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ModelOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ModelPartSpecification(IdentifiedObject):
    '''
    The type of model. For example, state estimator, planning, planning dynamics,
    short circuit, or real-time dynamics etc. The model must conform to a profile.
    '''

    FrameworkPart: Optional[ModelAuthoritySet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ModelAuthoritySet.ModelSpecification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Model frame of the model part.
            '''

        })
    '''
    Model frame of the model part.
    '''

    Model: list[ModelPartVersion] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ModelPartVersion.ModelSpecification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Modle parts conforming to the model part specification.
            '''

        })
    '''
    Modle parts conforming to the model part specification.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ModelToBeDeleted(IdentifiedObject):
    '''
    A Model is a collection of Datasets.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CompleteModelToBeDeleted(ModelToBeDeleted):
    '''
    A complete model can be used in applications to perform meaningful calculations,
    e.g. a study case in offline tools or a real time model in a SCADA/EMS.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ModelPartVersion(ModelToBeDeleted):
    '''
    This is a version of a part of a model. New instances of this class with
    new identity are instantiated upon changes to the content of this class
    or changes to the associated data set. Instances of this class are considered
    immutable. The case audit trail can reference this immutable data to exactly
    reproduce a case.
    '''

    ModelSpecification: Optional[ModelPartSpecification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ModelPartSpecification.Model',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Model specification of the modelt.
            '''

        })
    '''
    Model specification of the modelt.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasFirstMutualCoupling',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.HasSecondMutualCoupling',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 NetworkModelProjectChangeVersion(IdentifiedObject):
    '''
    Describes the status and the planned implementation of the associated change
    set into the as-built model. New instances of this class with new identity
    are instantiated upon changes to the content of this class or changes to
    the associated change set. Instances of this class are considered immutable.
    The case audit trail can reference this immutable data to exactly reproduce
    a case.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A user provided comment describing the changes in this version from the
            previous version.
            '''

        })
    '''
    A user provided comment describing the changes in this version from
    the previous version.
    '''

    effectiveDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date/time the change set is included in the model.
            '''

        })
    '''
    The date/time the change set is included in the model.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date/time this version was finalized and thus made immutable.
            '''

        })
    '''
    The date/time this version was finalized and thus made immutable.
    '''

    ChangeSet: Optional[ChangeSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ChangeSet.NetworkModelProjectChangeVersion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The details of model changes for this project. The change set should have
            a new identifier if it changes.
            '''

        })
    '''
    The details of model changes for this project. The change set should
    have a new identifier if it changes.
    '''

    NetworkModelProjectChange: Optional[NetworkModelProjectChange] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectChange.NetworkModelProjectChangeVersion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The persistent network model project change to which this version applies.
            '''

        })
    '''
    The persistent network model project change to which this version applies.
    '''

    NetworkModelProjectState: Optional[NetworkModelProjectState] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectState.NetworkModelProjectChangeVersion',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The state of this network model project version.
            '''

        })
    '''
    The state of this network model project version.
    '''

    SupercededBy: Optional[NetworkModelProjectChangeVersion] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectChangeVersion.Supercedes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The project version that will supercede this project version.
            '''

        })
    '''
    The project version that will supercede this project version.
    '''

    Supercedes: Optional[NetworkModelProjectChangeVersion] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectChangeVersion.SupercededBy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Project version that is being superceded.
            '''

        })
    '''
    Project version that is being superceded.
    '''

    Supercedes: Optional[NetworkModelProjectChangeVersion] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectChangeVersion.SupercededBy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Project version that is being superceded.
            '''

        })
    '''
    Project version that is being superceded.
    '''

    SupercededBy: Optional[NetworkModelProjectChangeVersion] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectChangeVersion.Supercedes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The project version that will supercede this project version.
            '''

        })
    '''
    The project version that will supercede this project version.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProjectComponent(IdentifiedObject):
    '''
    Abstract class for both a network model project and network model change.
    '''

    ContainingProject: Optional[NetworkModelProject] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProject.ContainedProject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The parent project of this project.
            '''

        })
    '''
    The parent project of this project.
    '''

    ProjectARelationships: list[NetworkModelProjectRelationship] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectRelationship.ProjectA',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProjectBRelationships: list[NetworkModelProjectRelationship] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectRelationship.ProjectB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProject(NetworkModelProjectComponent):
    '''
    A grouping of network model change descriptions. Primarily used to organize
    the phases of an overall project.
    '''

    ContainedProject: list[NetworkModelProjectComponent] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectComponent.ContainingProject',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Projects that are included in this parent project.
            '''

        })
    '''
    Projects that are included in this parent project.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProjectChange(NetworkModelProjectComponent):
    '''
    Network model project change described by versions of an associated change
    set. Has persistent identity over multiple versions of the associated change
    set.
    '''

    NetworkModelProjectChangeVersion: list[NetworkModelProjectChangeVersion] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectChangeVersion.NetworkModelProjectChange',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A specific version of the network model project change.
            '''

        })
    '''
    A specific version of the network model project change.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NetworkModelProjectComponent2(IdentifiedObject):
    '''
    '''

    closed: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    created: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updated: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    version: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Parent: Optional[NetworkModelProject2] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProject2.Child',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProject2(NetworkModelProjectComponent2):
    '''
    '''

    Child: list[NetworkModelProjectComponent2] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectComponent2.Parent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProjectStage(NetworkModelProjectComponent2):
    '''
    '''

    changesetVersion: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    commissionedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    plannedCommissionedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependencyDependentOnStage: Optional[AnnotatedProjectDependency] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnnotatedProjectDependency.DependentOnStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependencyDependentOnStage: Optional[AnnotatedProjectDependency] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AnnotatedProjectDependency.DependentOnStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DenpendecyDependingStage: list[AnnotatedProjectDependency] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AnnotatedProjectDependency.DependingStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChangeSets: list[ChangeSet] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChangeSet.NMProjectStage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NetworkModelProjectRelationship(IdentifiedObject):
    '''
    A relationship that assists humans and software building cases by assembling
    project changes in the correct sequence. This class may be specialized
    to create specific types of relationships.
    '''

    ProjectA: Optional[NetworkModelProjectComponent] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectComponent.ProjectARelationships',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProjectB: Optional[NetworkModelProjectComponent] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NetworkModelProjectComponent.ProjectBRelationships',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProjectAlternative(NetworkModelProjectRelationship):
    '''
    Project B is an alternative to project A. Project A is the primary alternative.
    Multiple project alternatives should not be selected into a single network
    study case.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProjectDependency(NetworkModelProjectRelationship):
    '''
    Project A change sets should be applied before Project B during case creation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class NetworkModelProjectState(IdentifiedObject):
    '''
    A network model project version state. States are agreed upon by the exchange
    community. Examples are "approved", "proposed", "withdrawn", "committed"
    etc.
    '''

    NetworkModelProjectChangeVersion: list[NetworkModelProjectChangeVersion] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NetworkModelProjectChangeVersion.NetworkModelProjectState',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The change versions that are at this state.
            '''

        })
    '''
    The change versions that are at this state.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @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 multple 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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': '1',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitSet.OperationalLimitValue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The limit type associated with this limit.
            '''

        })
    '''
    The limit type associated with this limit.
    '''

    LimitScalingLimit: list[LimitScalingLimit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LimitScalingLimit.SourceOperationalLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Values of equipment limits.
            '''

        })
    '''
    Values of equipment limits.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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.
    '''

    acceptableDuration: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The direction of the limit.
            '''

        })
    '''
    The direction of the limit.
    '''

    TargetOperationalLimitmTypeScaling: Optional[OperatonalLimitTypeScaling] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperatonalLimitTypeScaling.TargetOperationalLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OperationalLimit: list[OperationalLimit] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimit.OperationalLimitType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operational limits associated with this type of limit.
            '''

        })
    '''
    The operational limits associated with this type of limit.
    '''

    SourceOperationalLimitTypeScaling: list[OperatonalLimitTypeScaling] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperatonalLimitTypeScaling.SourceOperationalLimitType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TargetOperationalLimitmTypeScaling: Optional[OperatonalLimitTypeScaling] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperatonalLimitTypeScaling.TargetOperationalLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OrgPnodeAllocation(IdentifiedObject):
    '''
    This class models the allocation between asset owners and pricing nodes.
    '''

    maxMWAllocation: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum MW for the Source/Sink for the Allocation
            '''

        })
    '''
    Maximum MW for the Source/Sink for the Allocation
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Pnode.OrgPnodeAllocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OrgResOwnership(IdentifiedObject):
    '''
    This class model the ownership percent and type of ownership between resource
    and organisation.
    '''

    asscType: Optional[ ResourceAssnType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            association type for the association between Organisation and Resource:
            '''

        })
    '''
    association type for the association between Organisation and Resource:
    '''

    masterSchedulingCoordinatorFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate that the SC representing the Resource is the Master SC.
            '''

        })
    '''
    Flag to indicate that the SC representing the Resource is the Master
    SC.
    '''

    ownershipPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ownership percentage for each resource
            '''

        })
    '''
    ownership percentage for each resource
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.OrgResOwnership',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Organisation(IdentifiedObject):
    '''
    Organisation that might have roles as utility, contractor, supplier, manufacturer,
    customer, etc.
    '''

    ParentOrganisation: Optional[ParentOrganization] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ParentOrganization.Organisation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Parent organisation of this organisation.
            '''

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

    Roles: list[OrganisationRole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OrganisationRole.Organisation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All roles of this organisation.
            '''

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

    SwitchingPlanRequest: list[SwitchingPlanRequest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingPlanRequest.RequestingOrganization',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching plan requested by the requesting organization
            '''

        })
    '''
    The switching plan requested by the requesting organization
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ControlAreaOperator(Organisation):
    '''
    Operates the Control Area. Approves and implements energy transactions.
    Verifies both Inter-Control Area and Intra-Control Area transactions for
    the power system before granting approval (and implementing) the transactions.
    '''

    ControlledBy: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.Controls',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A ControlAreaCompany controls a ControlArea.
            '''

        })
    '''
    A ControlAreaCompany controls a ControlArea.
    '''

    ControlledBy: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.Controls',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A ControlAreaCompany controls a ControlArea.
            '''

        })
    '''
    A ControlAreaCompany controls a ControlArea.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CustomerConsumer(Organisation):
    '''
    The energy buyer in the energy marketplace.
    '''

    CustChildOf: list[TieLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieLine.ParentOfB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A ControlAreaOperator or CustomerConsumer may ring their perimeter with
            metering, which can create a unique SubControlArea at the collection of
            metering points, called a TieLine.
            '''

        })
    '''
    A ControlAreaOperator or CustomerConsumer may ring their perimeter
    with metering, which can create a unique SubControlArea at the collection
    of metering points, called a TieLine.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class GenerationProvider(Organisation):
    '''
    The energy seller in the energy marketplace.
    '''

    ProvidedBy: list[EnergyProduct] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyProduct.GenerationProvider',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @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 organizations that can participate in market
    management and/or market operations.
    '''

    Bid: list[Bid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bid.MarketParticipant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.MarketParticipant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SchedulingCoordinator: list[SchedulingCoordinator] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SchedulingCoordinator.MarketParticipant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    AdjacentCASet: list[AdjacentCASet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AdjacentCASet.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AggregateNode: list[AggregateNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AggregateNode.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CommodityDefinition: list[CommodityDefinition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityDefinition.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionContractRight: list[ContractRight] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractRight.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnergyMarkets: list[EnergyMarket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyMarket.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FuelRegion: list[FuelRegion] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FuelRegion.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: list[HostControlArea] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HostControlArea.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocalReliabilityArea: list[LocalReliabilityArea] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LocalReliabilityArea.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MSSAggregation: list[MSSAggregation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MSSAggregation.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: list[MktConnectivityNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktConnectivityNode.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnodes: list[Pnode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Pnode.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraintsLinear: list[SecurityConstraintSum] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SecurityConstraintSum.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraints: list[SecurityConstraints] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SecurityConstraints.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: list[SubControlArea] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubControlArea.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionRightChain: list[TransmissionRightChain] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionRightChain.RTO',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SchedulingCoordinator(MarketParticipant):
    '''
    Market participants could be represented by Scheduling Coordinators (SCs)
    that are registered with the RTO/ISO. One participant could register multiple
    SCs with the RTO/ISO. Many market participants can do business with the
    RTO/ISO using a single SC. One SC could schedule multiple generators. A
    load scheduling point could be used by multiple SCs. Each SC could schedule
    load at multiple scheduling points. An inter-tie scheduling point can be
    used by multiple SCs. Each SC can schedule interchange at multiple inter-tie
    scheduling points.
    '''

    creditStartEffectiveDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date that the scheduling coordinator becomes creditworthy.
            '''

        })
    '''
    Date that the scheduling coordinator becomes creditworthy.
    '''

    lastModified: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication of the last time this scheduling coordinator information was
            modified.
            '''

        })
    '''
    Indication of the last time this scheduling coordinator information
    was modified.
    '''

    qualificationStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Scheduling coordinator qualification status, Qualified, Not Qualified,
            or Disqualified.
            '''

        })
    '''
    Scheduling coordinator qualification status, Qualified, Not Qualified,
    or Disqualified.
    '''

    scid: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the short name or Scheduling Coordinator ID field.
            '''

        })
    '''
    This is the short name or Scheduling Coordinator ID field.
    '''

    creditFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate creditworthiness (Y, N)
            '''

        })
    '''
    Flag to indicate creditworthiness (Y, N)
    '''

    LoadRatio: Optional[LoadRatio] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'LoadRatio.SchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketParticipant: Optional[MarketParticipant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketParticipant.SchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionContractRight: list[ContractRight] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractRight.SchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadRatio: Optional[LoadRatio] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadRatio.SchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FromSCTrade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.From_SC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubmitFromSCTrade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.submitFromSchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubmitToSCTrade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.submitToSchedulingCoordinator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ToSCTrade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.To_SC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Marketer(Organisation):
    '''
    Matches buyers and sellers, and secures transmission (and other ancillary
    services) needed to complete the energy transaction.
    '''

    HoldsTitleTo_EnergyProducts: list[EnergyProduct] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyProduct.TitleHeldBy_Marketer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A Marketer holds title to an EnergyProduct.
            '''

        })
    '''
    A Marketer holds title to an EnergyProduct.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    Organisation: list[Organisation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Organisation.ParentOrganisation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Organisation that is part of this parent organisation.
            '''

        })
    '''
    Organisation that is part of this parent organisation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransmissionProvider(Organisation):
    '''
    Provider of the transmission capacity (interconnecting wires between Generation
    and Consumption) required to fulfill and Energy Transaction's energy exchange.
    Posts information for transmission paths and AvailableTransmissionCapacities
    on a reservation node. Buys and sells its products and services on the
    same reservation node.
    '''

    For: list[LossProfile] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossProfile.HasLoss_',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Part of the LossProfile for an EnergyTransaction may be a loss for a TransmissionProvider.
            If so, the TransmissionProvider must be one of the participating entities
            in the EnergyTransaction.
            '''

        })
    '''
    Part of the LossProfile for an EnergyTransaction may be a loss for
    a TransmissionProvider. If so, the TransmissionProvider must be one
    of the participating entities in the EnergyTransaction.
    '''

    TransmissionProducts: list[TransmissionProduct] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionProduct.TransmissionProvider',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A TransmissionProvider offers a TransmissionProduct.
            '''

        })
    '''
    A TransmissionProvider offers a TransmissionProduct.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    Organisation: Optional[Organisation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Organisation.Roles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Organisation having this role.
            '''

        })
    '''
    Organisation having this role.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedOrganisationRole',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this organisation role.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetOrganisationRole(OrganisationRole):
    '''
    Role an organisation plays with respect to asset.
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.OrganisationRoles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets for this organisation role.
            '''

        })
    '''
    All assets for this organisation role.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    Ownerships: list[Ownership] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Ownership.AssetOwner',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All ownerships of this owner.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetTestLab(AssetOrganisationRole):
    '''
    Test lab that performs various types of testing related to assets.
    '''

    LabTestDataSet: list[LabTestDataSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LabTestDataSet.AssetTestLab',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A set of lab test results produced by this test lab.
            '''

        })
    '''
    A set of lab test results produced by this test lab.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetTestSampleTaker(AssetOrganisationRole):
    '''
    Identity of person/organization that took sample.
    '''

    Specimen: list[Specimen] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Specimen.AssetTestSampleTaker',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Specimen taken by this sample taker.
            '''

        })
    '''
    Specimen taken by this sample taker.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AssetUser(AssetOrganisationRole):
    '''
    Organisation that is a user of the asset.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Maintainer(AssetOrganisationRole):
    '''
    Organisation that maintains assets.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 Bank(OrganisationRole):
    '''
    Organisation that is a commercial bank, agency, or other institution that
    offers a similar service.
    '''

    bic: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bank identifier code as defined in ISO 9362; for use in countries wher
            IBAN is not yet in operation.
            '''

        })
    '''
    Bank identifier code as defined in ISO 9362; for use in countries wher
    IBAN is not yet in operation.
    '''

    iban: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            International bank account number defined in ISO 13616; for countries where
            IBAN is not in operation, the existing BIC or SWIFT codes may be used instead
            (see ISO 9362).
            '''

        })
    '''
    International bank account number defined in ISO 13616; for countries
    where IBAN is not in operation, the existing BIC or SWIFT codes may
    be used instead (see ISO 9362).
    '''

    BankAccounts: list[BankAccount] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BankAccount.Bank',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All BankAccounts this Bank provides.
            '''

        })
    '''
    All BankAccounts this Bank provides.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BusinessRole(OrganisationRole):
    '''
    A business role that this organisation plays. A single organisation typically
    performs many functions, each one described as a role.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's corporate standards and practices.
            '''

        })
    '''
    Classification by utility's corporate standards and practices.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CRROrgRole(OrganisationRole):
    '''
    Identifies a way in which an organisation may participate with a defined
    Congestion Revenue Right (CRR).
    '''

    kind: Optional[ CRRRoleType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of role the organisation is with regards to the congestion revenue
            rights.
            '''

        })
    '''
    Kind of role the organisation is with regards to the congestion revenue
    rights.
    '''

    CongestionRevenueRight: Optional[CongestionRevenueRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'CongestionRevenueRight.CRROrgRole',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CongestionRevenueRights'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

    locale: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Locale designating language to use in communications with this customer.
            '''

        })
    '''
    Locale designating language to use in communications with this customer.
    '''

    pucNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Public utilities commission (PUC) identification number.
            '''

        })
    '''
    (if applicable) Public utilities commission (PUC) identification number.
    '''

    specialNeed: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if customer organisation has special service needs such as life support,
            hospitals, etc.
            '''

        })
    '''
    True if customer organisation has special service needs such as life
    support, hospitals, etc.
    '''

    vip: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (deprecated) (use 'priority' instead) True if this is an important customer.
            Importance is for matters different than those in 'specialNeed' attribute.
            '''

        })
    '''
    (deprecated) (use 'priority' instead) True if this is an important
    customer. Importance is for matters different than those in 'specialNeed'
    attribute.
    '''

    kind: Optional[ CustomerKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of customer.
            '''

        })
    '''
    Kind of customer.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All customers related to the primary customer. This may support customer
            hierarchies. (this can be used to support some form of customer containment)
            '''

        })
    '''
    All customers related to the primary customer. This may support customer
    hierarchies. (this can be used to support some form of customer containment)
    '''

    OutagePlan: Optional[OutagePlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OutagePlan.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage plan that identifies the customers that are affected.
            '''

        })
    '''
    The outage plan that identifies the customers that are affected.
    '''

    Customer: Optional[Customer] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Customer.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All customers related to the primary customer. This may support customer
            hierarchies. (this can be used to support some form of customer containment)
            '''

        })
    '''
    All customers related to the primary customer. This may support customer
    hierarchies. (this can be used to support some form of customer containment)
    '''

    CustomerAccounts: list[CustomerAccount] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAccount.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All accounts of this customer.
            '''

        })
    '''
    All accounts of this customer.
    '''

    CustomerAgreements: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All agreements of this customer.
            '''

        })
    '''
    All agreements of this customer.
    '''

    CustomerNotifications: list[CustomerNotification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerNotification.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All notifications required by this customer.
            '''

        })
    '''
    All notifications required by this customer.
    '''

    EndDevices: list[EndDevice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDevice.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end devices of this customer.
            '''

        })
    '''
    All end devices of this customer.
    '''

    ErpPersons: list[OldPerson] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldPerson.CustomerData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ServiceRequest: list[ServiceRequest] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ServiceRequest.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All service requests for the customer
            '''

        })
    '''
    All service requests for the customer
    '''

    TroubleTickets: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.Customer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All trouble tickets for this customer.
            '''

        })
    '''
    All trouble tickets for this customer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DocumentOrganisationRole(OrganisationRole):
    '''
    Role an organisation plays with respect to documents.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalDataAuthority(OrganisationRole):
    '''
    An entity defining classifications or categories of environmental information,
    like phenomena or alerts.
    '''

    AlertTypeList: list[AlertTypeList] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AlertTypeList.EnvironmentalDataAuthority',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A specific version of a list of alerts published by this environmental
            data authority.
            '''

        })
    '''
    A specific version of a list of alerts published by this environmental
    data authority.
    '''

    PhenomenonClassification: list[PhenomenonClassification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhenomenonClassification.EnvironmentalDataAuthority',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Phenomenon classification defined by this environmental data authority.
            '''

        })
    '''
    Phenomenon classification defined by this environmental data authority.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnvironmentalDataProvider(OrganisationRole):
    '''
    Entity providing environmental data. Could be an observed weather data
    provider, an entity providing forecasts, an authority providing alerts,
    etc.
    '''

    EnvironmentalAlert: list[EnvironmentalAlert] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAlert.EnvironmentalDataProvider',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Alert issued by this environmental data provider.
            '''

        })
    '''
    Alert issued by this environmental data provider.
    '''

    EnvironmentalInformation: list[EnvironmentalInformation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalInformation.EnvironmentalDataProvider',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Environmental information provided by this environmental data provider.
            '''

        })
    '''
    Environmental information provided by this environmental data provider.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Manufacturer(OrganisationRole):
    '''
    Organisation that manufactures asset products.
    '''

    ProductAssetModels: list[ProductAssetModel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProductAssetModel.Manufacturer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All asset models by this manufacturer.
            '''

        })
    '''
    All asset models by this manufacturer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OrgOrgRole(OrganisationRole):
    '''
    Roles played between Organisations and other Organisations. This includes
    role ups for ogranisations, cost centers, profit centers, regulatory reporting,
    etc.
    Note that the parent and child relationship is indicated by the name on
    each end of the association.
    '''

    clientID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifiers of the organisation held by another organisation, such as a
            government agency (federal, state, province, city, county), financial institution
            (Dun and Bradstreet), etc.
            '''

        })
    '''
    Identifiers of the organisation held by another organisation, such
    as a government agency (federal, state, province, city, county), financial
    institution (Dun and Bradstreet), etc.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PersonOrganisationRole(OrganisationRole):
    '''
    Role an organisation plays with respect to persons.
    '''

    clientID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifiers of the person held by an organisation, such as a government
            agency (federal, state, province, city, county), financial institutions,
            etc.
            '''

        })
    '''
    Identifiers of the person held by an organisation, such as a government
    agency (federal, state, province, city, county), financial institutions,
    etc.
    '''

    ErpPerson: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'OldPerson.OrganisationRoles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PropertyOrganisationRole(OrganisationRole):
    '''
    Role an organisation plays with respect to property (for example, the organisation
    may be the owner, renter, occupier, taxiing authority, etc.).
    '''

    LandProperty: Optional[LandProperty] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LandProperty.ErpOrganisationRoles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ServiceSupplier(OrganisationRole):
    '''
    Organisation that provides services to customers.
    '''

    issuerIdentificationNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique transaction reference prefix number issued to an entity by the International
            Organization for Standardization for the purpose of tagging onto electronic
            financial transactions, as defined in ISO/IEC 7812-1 and ISO/IEC 7812-2.
            '''

        })
    '''
    Unique transaction reference prefix number issued to an entity by the
    International Organization for Standardization for the purpose of tagging
    onto electronic financial transactions, as defined in ISO/IEC 7812-1
    and ISO/IEC 7812-2.
    '''

    kind: Optional[ SupplierKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of supplier.
            '''

        })
    '''
    Kind of supplier.
    '''

    BankAccounts: list[BankAccount] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BankAccount.ServiceSupplier',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All BackAccounts this ServiceSupplier owns.
            '''

        })
    '''
    All BackAccounts this ServiceSupplier owns.
    '''

    CustomerAgreements: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.ServiceSupplier',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All customer agreements of this service supplier.
            '''

        })
    '''
    All customer agreements of this service supplier.
    '''

    UsagePoints: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.ServiceSupplier',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage points this service supplier utilises to deliver a service.
            '''

        })
    '''
    All usage points this service supplier utilises to deliver a service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktPSRType(PSRType):
    '''
    The type of a power system resource.
    '''

    psrType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded type of a power system resource.
            '''

        })
    '''
    The coded type of a power system resource.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Participation(IdentifiedObject):
    '''
    Participation level of a given Pnode in a given AggregatePnode.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to calculate "participation" of Pnode in an AggregatePnode. For example,
            for regulation region this factor is 1 and total sum of all factors for
            a specific regulation region does not have to be 1. For pricing zone the
            total sum of all factors has to be 1.
            '''

        })
    '''
    Used to calculate "participation" of Pnode in an AggregatePnode. For
    example, for regulation region this factor is 1 and total sum of all
    factors for a specific regulation region does not have to be 1. For
    pricing zone the total sum of all factors has to be 1.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketOperations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthLineParameter(IdentifiedObject):
    '''
    Common type for per-length electrical catalogues describing line parameters.
    '''

    WireAssemblyInfo: Optional[WireAssemblyInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireAssemblyInfo.PerLengthLineParameter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 impedance electrical catalogues.
    '''

    ACLineSegments: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.PerLengthImpedance',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PerLengthPhaseImpedance(PerLengthImpedance):
    '''
    Impedance and admittance parameters per unit length for n-wire unbalanced
    lines, in matrix form.
    '''

    conductorCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of phase, neutral, and other wires retained. Constrains the number
            of matrix elements and the phase codes that can be used with this matrix.
            '''

        })
    '''
    Number of phase, neutral, and other wires retained. Constrains the
    number of matrix elements and the phase codes that can be used with
    this matrix.
    '''

    PhaseImpedanceData: list[PhaseImpedanceData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PhaseImpedanceData.PhaseImpedance',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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
    lines of 1, 2, or 3 phases. For 1-phase lines, define x=x0=xself. For 2-phase
    lines, define x=xs-xm and x0=xs+xm.
    '''

    b0ch: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Person(IdentifiedObject):
    '''
    General purpose information for name and other information to contact people.
    '''

    firstName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Person's last (family, sir) name.
            '''

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

    mName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Middle name(s) or initial(s).
            '''

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

    prefix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    specialNeed: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Special service needs for the person (contact) are described; examples
            include life support, etc.
            '''

        })
    '''
    Special service needs for the person (contact) are described; examples
    include life support, etc.
    '''

    suffix: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A suffix for the person's name, such as II, III, etc.
            '''

        })
    '''
    A suffix for the person's name, such as II, III, etc.
    '''

    Roles: list[PersonRole] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PersonRole.Person',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All roles of this person.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpCompetency: Optional[ErpCompetency] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpCompetency.ErpPersons',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpPersonnel: Optional[ErpPersonnel] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ErpPersonnel.ErpPersons',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeasurementValues: list[MeasurementValue] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeasurementValue.ErpPerson',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OrganisationRoles: list[PersonOrganisationRole] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PersonOrganisationRole.ErpPerson',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LandPropertyRoles: list[PersonPropertyRole] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PersonPropertyRole.Person',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Skills: list[Skill] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Skill.ErpPerson',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PersonRole(IdentifiedObject):
    '''
    '''

    Person: Optional[Person] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Person.Roles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Person having this role.
            '''

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

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedPersonRole',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this person role.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DocumentPersonRole(PersonRole):
    '''
    Person role with respect to documents.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Approver(DocumentPersonRole):
    '''
    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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All documents for this approver.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Author(DocumentPersonRole):
    '''
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All documents of this this author.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Editor(DocumentPersonRole):
    '''
    Person who modified the document.
    '''

    Documents: list[Document] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Document.Editor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All documents for this editor.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Issuer(DocumentPersonRole):
    '''
    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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All documents for this issuer.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationPersonRole(PersonRole):
    '''
    Person role in the context of utility operations.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

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

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

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FieldSafetySupervisor(CrewMember):
    '''
    Crew member on work site responsible for all local safety measures for
    the work crew doing maintenance, construction and repair in a substation
    or on a power line/cable.
    '''

    IssuedSafetyDocuments: list[SafetyDocument] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SafetyDocument.IssuedToSupervisor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All safety documents issued to this supervisor.
            '''

        })
    '''
    All safety documents issued to this supervisor.
    '''

    ReleasedSafetyDocuments: list[SafetyDocument] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SafetyDocument.ReleasedBySupervisor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All safety documents released by this supervisor.
            '''

        })
    '''
    All safety documents released by this supervisor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Operator(OperationPersonRole):
    '''
    Control room operator.
    '''

    Incidents: list[Incident] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Incident.Owner',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All incidents owned by this operator.
            '''

        })
    '''
    All incidents owned by this operator.
    '''

    SwitchingSteps: list[SwitchingAction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingAction.Operator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All switching steps this operator is responsible for.
            '''

        })
    '''
    All switching steps this operator is responsible for.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OperationsSafetySupervisor(Operator):
    '''
    Operator with responsibility that the work in high voltage installation
    is executed in a safe manner and according to safety regulation.
    '''

    IssuedSafetyDocuments: list[SafetyDocument] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SafetyDocument.IssuedBySupervisor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All safety documents issued by this supervisor.
            '''

        })
    '''
    All safety documents issued by this supervisor.
    '''

    ReleasedSafetyDocuments: list[SafetyDocument] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SafetyDocument.ReleasedToSupervisor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All safety documents released to this supervisor.
            '''

        })
    '''
    All safety documents released to this supervisor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TroubleReporter(OperationPersonRole):
    '''
    Type of Person reporting the Trouble - Customer, First Responder, Passer-by,
    etc.
    '''

    troubleReporterType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of person reporting the trouble
            '''

        })
    '''
    The type of person reporting the trouble
    '''

    TroubleTicket: list[TroubleTicket] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TroubleTicket.TroubleReporter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhenomenonClassification(IdentifiedObject):
    '''
    A pre-defined phenomenon classification as defined by a particular authority.
    '''

    EnvironmentalDataAuthority: Optional[EnvironmentalDataAuthority] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalDataAuthority.PhenomenonClassification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Authority defining this environmental phenomenon.
            '''

        })
    '''
    Authority defining this environmental phenomenon.
    '''

    ClassificationCondition: list[ClassificationCondition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ClassificationCondition.PhenomenonClassification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Condition contributing to the classification of this phenomenon.
            '''

        })
    '''
    Condition contributing to the classification of this phenomenon.
    '''

    EnvironmentalPhenomenon: list[EnvironmentalPhenomenon] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalPhenomenon.PhenomenonClassification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PlannedMarketEvent(IdentifiedObject):
    '''
    This class represents planned events. Used to model the various planned
    events in a market (closing time, clearing time, etc.)
    '''

    eventType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned event type.
            '''

        })
    '''
    Planned event type.
    '''

    plannedTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is relative time so that this attribute can be used by more than one
            planned market. For example the bid submission is 10am everyday.
            '''

        })
    '''
    This is relative time so that this attribute can be used by more than
    one planned market. For example the bid submission is 10am everyday.
    '''

    MarketActualEvent: list[MarketActualEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketActualEvent.PlannedMarketEvent',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All actual events that execute this planned event.
            '''

        })
    '''
    All actual events that execute this planned event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @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.
    '''

    isPublic: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this Pnode is public (prices are published for DA/RT and FTR markets),
            otherwise it is private (location is not usable by market for bidding/FTRs/transactions).
            '''

        })
    '''
    If true, this Pnode is public (prices are published for DA/RT and FTR
    markets), otherwise it is private (location is not usable by market
    for bidding/FTRs/transactions).
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.Pnodes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CommodityDefinition: list[CommodityDefinition] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityDefinition.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExPostResults: list[ExPostPricingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostPricingResults.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktMeasurement: list[MktMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktMeasurement.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Allows Measurements to be associated to Pnodes.
            '''

        })
    '''
    Allows Measurements to be associated to Pnodes.
    '''

    OrgPnodeAllocation: list[OrgPnodeAllocation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OrgPnodeAllocation.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeResults: list[PnodeResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PnodeResults.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResources: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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
    '''

    Trade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DeliveryTransactionBids: list[TransactionBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransactionBid.Delivery_Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReceiptTransactionBids: list[TransactionBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransactionBid.Receipt_Pnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    apnodeType: Optional[ ApnodeType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aggregate Price Node Types
            '''

        })
    '''
    Aggregate Price Node Types
    '''

    participationCategory: Optional[ ParticipationCategoryMPM ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Designated Control Area participation in LMP price measurement
            'Y' - Participates in both Local Market Power Mitigation (LMPM) and System
            Market Power Mitigation (SMPM)
            'N' - Not included in LMP price measures
            'S' - Participatesin SMPM price measures
            'L' - Participatesin LMPM price measures
            '''

        })
    '''
    Designated Control Area participation in LMP price measurement
    'Y' - Participates in both Local Market Power Mitigation (LMPM) and
    System Market Power Mitigation (SMPM)
    'N' - Not included in LMP price measures
    'S' - Participatesin SMPM price measures
    'L' - Participatesin LMPM price measures
    '''

    GenDistributionFactor: list[GenDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GenDistributionFactor.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadDistributionFactor: list[LoadDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadDistributionFactor.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMTestResults: list[MPMTestResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMTestResults.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktCombinedCyclePlant: list[MktCombinedCyclePlant] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktCombinedCyclePlant.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeDistributionFactor: list[PnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PnodeDistributionFactor.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TradingHubValues: list[TradingHubValues] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TradingHubValues.AggregatedPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CongestionArea(AggregatedPnode):
    '''
    Designated Congestion Area Definition (DCA).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    GenDistributionFactor: Optional[GenDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenDistributionFactor.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadDistributionFactor: Optional[LoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadDistributionFactor.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GenDistributionFactor: Optional[GenDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenDistributionFactor.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadDistributionFactor: Optional[LoadDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadDistributionFactor.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeDistributionFactor: list[PnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PnodeDistributionFactor.IndividualPnode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PointOfSale(IdentifiedObject):
    '''
    Logical point where transactions take place with operational interaction
    between cashier and the payment system; in certain cases the point of sale
    interacts directly with the end customer, in which case the cashier might
    not be a real person: for example a self-service kiosk or over the internet.
    '''

    location: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Local description for where this point of sale is physically located.
            '''

        })
    '''
    Local description for where this point of sale is physically located.
    '''

    CashierShifts: list[CashierShift] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CashierShift.PointOfSale',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All shifts this point of sale operated in.
            '''

        })
    '''
    All shifts this point of sale operated in.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Datasheet information for this power system resource.
            '''

        })
    '''
    Datasheet information for this power system resource.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Location.PowerSystemResources',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Custom classification for this power system resource.
            '''

        })
    '''
    Custom classification for this power system resource.
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.PowerSystemResources',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All assets represented by this power system resource. For example, multiple
            conductor assets are electrically modelled as a single AC line segment.
            '''

        })
    '''
    All assets represented by this power system resource. For example,
    multiple conductor assets are electrically modelled as a single AC
    line segment.
    '''

    ConfigurationEvent: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this Power System resource.
            '''

        })
    '''
    All configuration events created for this Power System resource.
    '''

    Controls: list[Control] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Control.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    GenericAction: list[GenericAction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GenericAction.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The generic action that is performed on the power system resource
            '''

        })
    '''
    The generic action that is performed on the power system resource
    '''

    Measurements: list[Measurement] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Measurement.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operating shares of this power system resource.
            '''

        })
    '''
    The operating shares of this power system resource.
    '''

    OperationalTags: list[OperationalTag] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalTag.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All operational tags placed on this power system resource.
            '''

        })
    '''
    All operational tags placed on this power system resource.
    '''

    PSREvents: list[PSREvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PSREvent.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All events associated with this power system resource.
            '''

        })
    '''
    All events associated with this power system resource.
    '''

    VerificationAction: list[VerificationAction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VerificationAction.PowerSystemResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The verification action that is performed on the power system resource
            '''

        })
    '''
    The verification action that is performed on the power system resource
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACLineSegmentPhase(PowerSystemResource):
    '''
    Represents a single wire of an alternating current line segment.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number designation for this line segment phase. Each line segment phase
            within a line segment should have a unique sequence number. This is useful
            for unbalanced modelling to bind the mathematical model (PhaseImpedanceData
            of PerLengthPhaseImpedance) with the connectivity model (this class) and
            the physical model (WirePosition) without tight coupling.
            '''

        })
    '''
    Number designation for this line segment phase. Each line segment phase
    within a line segment should have a unique sequence number. This is
    useful for unbalanced modelling to bind the mathematical model (PhaseImpedanceData
    of PerLengthPhaseImpedance) with the connectivity model (this class)
    and the physical model (WirePosition) without tight coupling.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The phase connection of the wire at both ends.
            '''

        })
    '''
    The phase connection of the wire at both ends.
    '''

    ACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.ACLineSegmentPhases',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The line segment to which the phase belongs.
            '''

        })
    '''
    The line segment to which the phase belongs.
    '''

    WireInfo: Optional[WireInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireInfo.ACLineSegmentPhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wire information contributing to this AC line segment phase information.
            '''

        })
    '''
    Wire information contributing to this AC line segment phase information.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'CAESPlant.AirCompressor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'CombustionTurbine.AirCompressor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    CombustionTurbine: Optional[CombustionTurbine] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CombustionTurbine.AirCompressor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 CAESPlant(PowerSystemResource):
    '''
    Compressed air energy storage plant.
    '''

    energyStorageCapacity: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CAESPlant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'SteamSendoutSchedule.CogenerationPlant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktCombinedCyclePlant(CombinedCyclePlant):
    '''
    Subclass of Production: CombinedCyclePlant from IEC 61970 package.
    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.
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.MktCombinedCyclePlant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CombinedCycleLogicalConfiguration: list[CombinedCycleLogicalConfiguration] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleLogicalConfiguration.MktCombinedCyclePlant',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CommunicationLink(PowerSystemResource):
    '''
    The connection to remote units is through one or more communication links.
    Reduntant links may exist. The CommunicationLink class inherits PowerSystemResource.
    The intention is to allow CommunicationLinks to have Measurements. These
    Measurements can be used to model link status as operational, out of service,
    unit failure etc.
    '''

    BilateralExchangeActor: Optional[BilateralExchangeActor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BilateralExchangeActor.CommunicationLink',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ICCP data provider or consumer using communication addressing for a Bilateral
            table.
            '''

        })
    '''
    ICCP data provider or consumer using communication addressing for a
    Bilateral table.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IPAccessPoint(CommunicationLink):
    '''
    Internet Protocol Access Point � used to represent an addressing structure
    is based upon an Internet Protocol (IP) address.
    '''

    address: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the dotted decimal IP Address resolve the IP address. The format is
            controlled by the value of the addressType.
            '''

        })
    '''
    Is the dotted decimal IP Address resolve the IP address. The format
    is controlled by the value of the addressType.
    '''

    gateway: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the dotted decimal IPAddress of the first hop router. Format is controlled
            by the addressType.
            '''

        })
    '''
    Is the dotted decimal IPAddress of the first hop router. Format is
    controlled by the addressType.
    '''

    subnet: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the IP subnet mask which controls the local vs non-local routing.
            '''

        })
    '''
    This is the IP subnet mask which controls the local vs non-local routing.
    '''

    addressType: Optional[ IPAddressKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            IP address type.
            '''

        })
    '''
    IP address type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TCPAccessPoint(IPAccessPoint):
    '''
    Allows addressing and behavioural information regarding the use of TCP
    by ICCP links.
    '''

    keepAliveTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the default interval at which TCP will check if the TCP connection
            is still valid.
            '''

        })
    '''
    Indicates the default interval at which TCP will check if the TCP connection
    is still valid.
    '''

    port: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This value is only needed to be specified for called nodes (e.g. those
            that respond to a TCP.Open request).
            This value specifies the TCP port to be used. Well known and "registered"
            ports are preferred and can be found at:
            http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
            For IEC 60870-6 TASE.2 (e.g. ICCP) and IEC 61850, the value used shall
            be 102 for non-TLS protected exchanges. The value shall be 3782 for TLS
            transported ICCP and 61850 exchanges.
            '''

        })
    '''
    This value is only needed to be specified for called nodes (e.g. those
    that respond to a TCP.Open request).
    This value specifies the TCP port to be used. Well known and "registered"
    ports are preferred and can be found at:
    http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
    For IEC 60870-6 TASE.2 (e.g. ICCP) and IEC 61850, the value used shall
    be 102 for non-TLS protected exchanges. The value shall be 3782 for
    TLS transported ICCP and 61850 exchanges.
    '''

    PublicX509Certificate: list[PublicX509Certificate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PublicX509Certificate.TCPAccessPoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Is the Public Certificate used for mutual authentication between peers.
            '''

        })
    '''
    Is the Public Certificate used for mutual authentication between peers.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ISOUpperLayer(TCPAccessPoint):
    '''
    Is a set of configure addressing information that is required since ICCP
    utilizes addressing other than a TCP port.
    '''

    aeInvoke: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is part of the Application Entity addressing as specified by ISO Addressing.
            '''

        })
    '''
    Is part of the Application Entity addressing as specified by ISO Addressing.
    '''

    aeQual: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the AE qualifier and represents further application level addressing
            information.
            '''

        })
    '''
    Is the AE qualifier and represents further application level addressing
    information.
    '''

    apInvoke: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is a further application level OSI addressing parameter.
            '''

        })
    '''
    Is a further application level OSI addressing parameter.
    '''

    apTitle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is a sequence of integer strings separated by ".". The value, in conjunction
            with other application addressing attributes (e.g. other APs) are used
            to select a specific application (e.g. the ICCP application entity) per
            the OSI reference model. The sequence, and its values, represent a namespace
            whose values are governed by ISO/IEC 7498-3.
            '''

        })
    '''
    Is a sequence of integer strings separated by ".". The value, in conjunction
    with other application addressing attributes (e.g. other APs) are used
    to select a specific application (e.g. the ICCP application entity)
    per the OSI reference model. The sequence, and its values, represent
    a namespace whose values are governed by ISO/IEC 7498-3.
    '''

    osiPsel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the addressing selector for OSI presentation addressing.
            '''

        })
    '''
    Is the addressing selector for OSI presentation addressing.
    '''

    osiSsel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the OSI session layer addressing information.
            '''

        })
    '''
    Is the OSI session layer addressing information.
    '''

    osiTsel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the OSI Transport Layer addressing information.
            '''

        })
    '''
    Is the OSI Transport Layer addressing information.
    '''

    UpperLayerPublicX509Certificate: list[PublicX509Certificate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PublicX509Certificate.ISOUpperLayer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Certificate to be bound for use for Application layer mutual authentication.
            '''

        })
    '''
    Certificate to be bound for use for Application layer mutual authentication.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#',
        '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': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Equipment.EquipmentContainer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Contained equipment.
            '''

        })
    '''
    Contained equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Breaker configuration.
            '''

        })
    '''
    Breaker configuration.
    '''

    busBarConfiguration: Optional[ BusbarConfiguration ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Busbar configuration.
            '''

        })
    '''
    Busbar configuration.
    '''

    Circuit: Optional[Circuit] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Circuit.EndBay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.Bays',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The voltage level containing this bay.
            '''

        })
    '''
    The voltage level containing this bay.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EquipmentContaner for AC
    in that it may also contain DCNode-s. Hence it can contain both AC and
    DC equipment.
    '''

    DCNodes: list[DCNode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DCNode.DCEquipmentContainer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The operating mode of an HVDC bipole (bipolar, monopolar metallic return,
            etc).
            '''

        })
    '''
    The operating mode of an HVDC bipole (bipolar, monopolar metallic return,
    etc).
    '''

    Substation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.DCConverterUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The containing substation of the DC converter unit.
            '''

        })
    '''
    The containing substation of the DC converter unit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 HVDC substations.
    '''

    Region: Optional[SubGeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubGeographicalRegion.DCLines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The SubGeographicalRegion containing the DC line.
            '''

        })
    '''
    The SubGeographicalRegion containing the DC line.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    NamingSecondarySubstation: list[Substation] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Substation.NamingFeeder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        '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.
    '''

    NormalEnergizedSubstation: list[Substation] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Substation.NormalEnergizingFeeder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The substations that are normally energized by the feeder.
            '''

        })
    '''
    The substations that are normally energized by the feeder.
    '''

    NormalEnergizingSubstation: Optional[Substation] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Substation.NormalEnergizedFeeder',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    Region: Optional[SubGeographicalRegion] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubGeographicalRegion.Lines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The sub-geographical region of the line.
            '''

        })
    '''
    The sub-geographical region of the line.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 Circuit(Line):
    '''
    '''

    EndBay: list[Bay] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Bay.Circuit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EndTerminal: list[Terminal] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Terminal.Circuit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Feeder'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The DC converter unit belonging of the substation.
            '''

        })
    '''
    The DC converter unit belonging of the substation.
    '''

    NamingFeeder: Optional[Feeder] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Feeder.NamingSecondarySubstation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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.
    '''

    NormalEnergizingFeeder: list[Feeder] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Feeder.NormalEnergizedSubstation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The feeders that potentially energize the downstream substation. Should
            be consistent with the associations that describe the naming hierarchy.
            '''

        })
    '''
    The feeders that potentially energize the downstream substation. Should
    be consistent with the associations that describe the naming hierarchy.
    '''

    NormalEnergizedFeeder: list[Feeder] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Feeder.NormalEnergizingSubstation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The voltage levels within this substation.
            '''

        })
    '''
    The voltage levels within this substation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.VoltageLevel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Substation.VoltageLevels',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The bays within this voltage level.
            '''

        })
    '''
    The bays within this voltage level.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EquivalentNetwork(ConnectivityNodeContainer):
    '''
    A class that groups electrical equivalents, including internal nodes, of
    a network that has been reduced. The ConnectivityNodes contained in the
    equivalent are intended to reflect internal nodes of the equivalent. The
    boundary Connectivity nodes where the equivalent connects outside itself
    are not contained by the equivalent.
    '''

    EquivalentEquipments: list[EquivalentEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquivalentEquipment.EquivalentNetwork',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The associated reduced equivalents.
            '''

        })
    '''
    The associated reduced equivalents.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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 can 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    EnergyArea: Optional[EnergyArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyArea.ControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ControlAreaGeneratingUnit: list[ControlAreaGeneratingUnit] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaGeneratingUnit.ControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The generating unit specifications for the control area.
            '''

        })
    '''
    The generating unit specifications for the control area.
    '''

    EnergyArea: Optional[EnergyArea] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyArea.ControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktControlArea(ControlArea):
    '''
    Market subclass of IEC 61970:ControlArea.
    '''

    ControlAreaSolutionData: list[ControlAreaSolutionData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ControlAreaSolutionData.MktControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    EnergyConsumer: Optional[EnergyConsumer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumer.EnergyConsumerPhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyGroup(PowerSystemResource):
    '''
    '''

    isSlack: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'EnergySource.EnergySourcePhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The energy sourceto which the phase belongs.
            '''

        })
    '''
    The energy sourceto which the phase belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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 and EquivalentInjection.
            '''

        })
    '''
    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 and
    EquivalentInjection.
    '''

    inService: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EquipmentContainer.Equipments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Container of this equipment.
            '''

        })
    '''
    Container of this equipment.
    '''

    ContingencyEquipment: list[ContingencyEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContingencyEquipment.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The contingency equipments in which this equipment participates.
            '''

        })
    '''
    The contingency equipments in which this equipment participates.
    '''

    EqiupmentLimitSeriesComponent: list[EquipmentLimitSeriesComponent] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EquipmentLimitSeriesComponent.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Equipment limit series calculation component to which this equipment contributes.
            '''

        })
    '''
    Equipment limit series calculation component to which this equipment
    contributes.
    '''

    Faults: list[Fault] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Fault.FaultyEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All faults on this equipment.
            '''

        })
    '''
    All faults on this equipment.
    '''

    LimitDependencyModel: list[LimitDependency] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LimitDependency.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Limit dependencymodels organized under this equipment as a means for organizing
            the model in a tree view.
            '''

        })
    '''
    Limit dependencymodels organized under this equipment as a means for
    organizing the model in a tree view.
    '''

    OperationalLimitSet: list[OperationalLimitSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalLimitSet.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operational limit sets associated with this equipment.
            '''

        })
    '''
    The operational limit sets associated with this equipment.
    '''

    PinEquipment: list[PinEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PinEquipment.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProtectiveActionEquipment: list[ProtectiveActionEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveActionEquipment.Equipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Protective action is controlling equipment. This can be direct signals
            from the control center, or emulation of action done by protection equipment.
            '''

        })
    '''
    Protective action is controlling equipment. This can be direct signals
    from the control center, or emulation of action done by protection
    equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.AuxiliaryEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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.
    '''

    accuracyClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            CT accuracy classification.
            '''

        })
    '''
    CT accuracy classification.
    '''

    ctClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            CT classification; i.e. class 10P.
            '''

        })
    '''
    CT classification; i.e. class 10P.
    '''

    usage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power burden of the CT core.
            '''

        })
    '''
    Power burden of the CT core.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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.
    '''

    accuracyClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PT accuracy classification.
            '''

        })
    '''
    PT accuracy classification.
    '''

    nominalRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nominal ratio between the primary and secondary voltage.
            '''

        })
    '''
    Nominal ratio between the primary and secondary voltage.
    '''

    ptClass: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential transformer (PT) classification covering burden.
            '''

        })
    '''
    Potential transformer (PT) classification covering burden.
    '''

    type: Optional[ PotentialTransformerKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Potential transformer construction type.
            '''

        })
    '''
    Potential transformer construction type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WaveTrap(AuxiliaryEquipment):
    '''
    Line 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Switches contained in this Composite switch.
            '''

        })
    '''
    Switches contained in this Composite switch.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The outage that is isolated by the outage isolation equipment.
            '''

        })
    '''
    The outage that is isolated by the outage isolation equipment.
    '''

    GroundingAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.GroundedEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action involving grounding operation on this conducting equipment.
            '''

        })
    '''
    Action involving grounding operation on this conducting equipment.
    '''

    ProtectiveActionAdjustment: list[ProtectiveActionAdjustment] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveActionAdjustment.ConductingEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The operating condition to the Conducting Equipment is changed when protective
            action adjustment is activated. For ShuntCompensator or other conducting
            equipment that operates on discrete values (integer), the values given
            in float will be rounded.
            '''

        })
    '''
    The operating condition to the Conducting Equipment is changed when
    protective action adjustment is activated. For ShuntCompensator or
    other conducting equipment that operates on discrete values (integer),
    the values given in float will be rounded.
    '''

    SvStatus: list[SvStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SvStatus.ConductingEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power loss in pole at no power transfer. It is 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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum voltage on the DC side at which the converter should operate.
            It is 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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum voltage on the DC side at which the converter should operate.
            It is 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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated converter DC voltage, also called UdN. The attribute shall be a positive
            value. It is converter�s configuration data used in power flow. For instance
            a bipolar HVDC 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 converter�s configuration data used in power
    flow. For instance a bipolar HVDC 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            It is converter�s configuration data used in power flow. Refer to poleLossP.
            The attribute shall be a positive value.
            '''

        })
    '''
    It is 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    PccTerminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.ConverterDCSides',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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
    wanted 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.
    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 is 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-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-20 degrees.
    '''

    alpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum firing angle. It is converter�s configuration data used in power
            flow. The attribute shall be a positive value.
            '''

        })
    '''
    Maximum firing angle. It is 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum extinction angle. It is converter�s configuration data used in
            power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Maximum extinction angle. It is 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum direct current (Id) on the DC side at which the converter should
            operate. It is 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 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum firing angle. It is converter�s configuration data used in power
            flow. The attribute shall be a positive value.
            '''

        })
    '''
    Minimum firing angle. It is 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum extinction angle. It is converter�s configuration data used in
            power flow. The attribute shall be a positive value.
            '''

        })
    '''
    Minimum extinction angle. It is 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum direct current (Id) on the DC side at which the converter should
            operate. It is 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 converter�s configuration data 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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of active power control.
            '''

        })
    '''
    Kind of active power control.
    '''

    ratedIdc: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated converter DC current, also called IdN. The attribute shall be a positive
            value. It is converter�s configuration data used in power flow.
            '''

        })
    '''
    Rated converter DC current, also called IdN. The attribute shall be
    a positive value. It is converter�s configuration data used in power
    flow.
    '''

    targetAlpha: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Target firing angle. It is converter�s control variable used in power flow.
            It is only applicable for rectifier if continuous tap changer control is
            used. 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 if continuous tap changer
    control is used. 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Target extinction angle. It is converter�s control variable used in power
            flow. It is only applicable for inverter if continuous tap changer control
            is used. 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 if continuous tap changer
    control is used. 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://iec.ch/TC57/CIM100#',
        '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.
    '''

    CSCDynamics: Optional[CSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CSCDynamics.CSConverter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    CSCDynamics: Optional[CSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CSCDynamics.CSConverter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Droop constant. The pu value is obtained as D [kV/MW] x Sb / Ubdc. The
            attribute shall be a positive value.
            '''

        })
    '''
    Droop constant. The pu value is obtained as D [kV/MW] x 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    pPccControl: Optional[ VsPpccControlKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of reactive power control.
            '''

        })
    '''
    Kind of reactive power control.
    '''

    qShare: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    CapabilityCurve: Optional[VsCapabilityCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VsCapabilityCurve.VsConverterDCSides',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Capability curve of this converter.
            '''

        })
    '''
    Capability curve of this converter.
    '''

    VSCDynamics: Optional[VSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCDynamics.VsConverter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    VSCDynamics: Optional[VSCDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCDynamics.VsConverter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.Clamp',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The clamp action that is performed on the clamp
            '''

        })
    '''
    The clamp action that is performed on the clamp
    '''

    JumperAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.Clamp',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this jumper.
            '''

        })
    '''
    Action taken with this jumper.
    '''

    ClampAction: Optional[ClampAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClampAction.Clamp',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The clamp action that is performed on the clamp
            '''

        })
    '''
    The clamp action that is performed on the clamp
    '''

    JumperAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.Clamp',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action taken with this jumper.
            '''

        })
    '''
    Action taken with this jumper.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Segment length for calculating line section capabilities.
            '''

        })
    '''
    Segment length for calculating line section capabilities.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ACLineSegment(Conductor):
    '''
    A wire or combination of wires, with consistent electrical characteristics,
    building a single electrical system, used to carry alternating current
    between points in the power system.
    For symmetrical, transposed three phase lines, it is sufficient to use
    attributes of the line segment, which describe impedances and admittances
    for the entire length of the segment. Additionally impedances can be computed
    by using length and associated per length impedances.
    The BaseVoltage at the two ends of ACLineSegments in a Line 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.
    '''

    b0ch: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) susceptance, uniformly distributed, of the
            entire line section.
            '''

        })
    '''
    Zero sequence shunt (charging) susceptance, uniformly distributed,
    of the entire line section.
    '''

    bch: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance, uniformly distributed,
            of the entire line section. This value represents the full charging over
            the full length of the line.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance, uniformly distributed,
    of the entire line section. This value represents the full charging
    over the full length of the line.
    '''

    g0ch: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) conductance, uniformly distributed, of the
            entire line section.
            '''

        })
    '''
    Zero sequence shunt (charging) conductance, uniformly distributed,
    of the entire line section.
    '''

    gch: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance, uniformly distributed,
            of the entire line section.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance, uniformly distributed,
    of the entire line section.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance of the entire line section.
            '''

        })
    '''
    Positive sequence series resistance of the entire line section.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance of the entire line section.
            '''

        })
    '''
    Zero sequence series resistance of the entire line section.
    '''

    shortCircuitEndTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance of the entire line section.
            '''

        })
    '''
    Positive sequence series reactance of the entire line section.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance of the entire line section.
            '''

        })
    '''
    Zero sequence series reactance of the entire line section.
    '''

    LineGroundingAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.AlongACLineSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    PerLengthImpedance: Optional[PerLengthImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PerLengthImpedance.ACLineSegments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'WireSpacingInfo.ACLineSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The wire spacing information that applies to this AC line segment
            '''

        })
    '''
    The wire spacing information that applies to this AC line segment
    '''

    ACLineSegmentPhases: list[ACLineSegmentPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegmentPhase.ACLineSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Cuts applied to the line segment.
            '''

        })
    '''
    Cuts applied to the line segment.
    '''

    LineGroundingAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.AlongACLineSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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).
    '''

    LineFaults: list[LineFault] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LineFault.ACLineSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The line faults of the line segment.
            '''

        })
    '''
    The line faults of the line segment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktACLineSegment(ACLineSegment):
    '''
    Subclass of IEC 61970:Wires:ACLineSegment.
    '''

    EndAFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktACLineSegmentEndAFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EndBFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktACLineSegmentEndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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.
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nominal resistance of device.
            '''

        })
    '''
    Nominal resistance of device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance of device.
            '''

        })
    '''
    Reactance of device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    mode: Optional[ PetersenCoilModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The mode of operation of the Petersen coil.
            '''

        })
    '''
    The mode of operation of the Petersen coil.
    '''

    nominalU: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyConnection(ConductingEquipment):
    '''
    A connection of energy generation or consumption on the power system model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used for Yn and Zn connections. True if the neutral is solidly grounded.
            '''

        })
    '''
    Used for Yn and Zn connections. True if the neutral is solidly grounded.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phaseConnection: Optional[ PhaseShuntConnectionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of phase connection, such as wye or delta.
            '''

        })
    '''
    The type of phase connection, such as wye or delta.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    EnergyConsumerAction: Optional[EnergyConsumerAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumerAction.EnergyConsumer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The energy consumer action that is performed on the energy consumer
            '''

        })
    '''
    The energy consumer action that is performed on the energy consumer
    '''

    LoadDynamics: Optional[LoadDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadDynamics.EnergyConsumer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The energy consumer is assigned to this power cut zone.
            '''

        })
    '''
    The energy consumer is assigned to this power cut zone.
    '''

    EnergyConsumerAction: Optional[EnergyConsumerAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumerAction.EnergyConsumer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The energy consumer action that is performed on the energy consumer
            '''

        })
    '''
    The energy consumer action that is performed on the energy consumer
    '''

    EnergyConsumerPhase: list[EnergyConsumerPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyConsumerPhase.EnergyConsumer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConformLoad(EnergyConsumer):
    '''
    ConformLoad represent 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Group of this ConformLoad.
            '''

        })
    '''
    Group of this ConformLoad.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Group of this ConformLoad.
            '''

        })
    '''
    Group of this ConformLoad.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence Thevenin resistance.
            '''

        })
    '''
    Zero sequence Thevenin resistance.
    '''

    reactivePower: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    rn: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence Thevenin resistance.
            '''

        })
    '''
    Negative sequence Thevenin resistance.
    '''

    voltageAngle: Optional[ float | AngleRadians ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence Thevenin reactance.
            '''

        })
    '''
    Zero sequence Thevenin reactance.
    '''

    xn: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this energy source.
            '''

        })
    '''
    Action taken with this energy source.
    '''

    EnergySourceAction: Optional[EnergySourceAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySourceAction.EnergySource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    RegulatingControl: Optional[RegulatingControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulatingControl.RegulatingCondEq',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 and it is used for IEC 60909
    calculations.
    '''

    ikSecond: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether initial symmetrical short-circuit current and power have
            been calculated according to IEC (Ik"). Used only if short circuit calculations
            are done according to superposition method.
            '''

        })
    '''
    Indicates whether initial symmetrical short-circuit current and power
    have been calculated according to IEC (Ik"). Used only if short circuit
    calculations are done according to superposition method.
    '''

    maxR0ToX0Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of zero sequence resistance of Network Feeder to its zero
            sequence reactance (R(0)/X(0) max). Used for short circuit data exchange
            according to IEC 60909.
            '''

        })
    '''
    Maximum ratio of zero sequence resistance of Network Feeder to its
    zero sequence reactance (R(0)/X(0) max). Used for short circuit data
    exchange according to IEC 60909.
    '''

    maxR1ToX1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of positive sequence resistance of Network Feeder to its
            positive sequence reactance (R(1)/X(1) max). Used for short circuit data
            exchange according to IEC 60909.
            '''

        })
    '''
    Maximum ratio of positive sequence resistance of Network Feeder to
    its positive sequence reactance (R(1)/X(1) max). Used for short circuit
    data exchange according to IEC 60909.
    '''

    maxZ0ToZ1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum ratio of zero sequence impedance to its positive sequence impedance
            (Z(0)/Z(1) max). Used for short circuit data exchange according to IEC
            60909.
            '''

        })
    '''
    Maximum ratio of zero sequence impedance to its positive sequence impedance
    (Z(0)/Z(1) max). Used for short circuit data exchange according to
    IEC 60909.
    '''

    minR0ToX0Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates whether initial symmetrical short-circuit current and power have
            been calculated according to IEC (Ik"). Used for short circuit data exchange
            according to IEC 6090.
            '''

        })
    '''
    Indicates whether initial symmetrical short-circuit current and power
    have been calculated according to IEC (Ik"). Used for short circuit
    data exchange according to IEC 6090.
    '''

    minR1ToX1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum ratio of positive sequence resistance of Network Feeder to its
            positive sequence reactance (R(1)/X(1) min). Used for short circuit data
            exchange according to IEC 60909.
            '''

        })
    '''
    Minimum ratio of positive sequence resistance of Network Feeder to
    its positive sequence reactance (R(1)/X(1) min). Used for short circuit
    data exchange according to IEC 60909.
    '''

    minZ0ToZ1Ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum ratio of zero sequence impedance to its positive sequence impedance
            (Z(0)/Z(1) min). Used for short circuit data exchange according to IEC
            60909.
            '''

        })
    '''
    Minimum ratio of zero sequence impedance to its positive sequence impedance
    (Z(0)/Z(1) min). Used for short circuit data exchange according to
    IEC 60909.
    '''

    referencePriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum initial symmetrical short-circuit currents (Ik" max) in A (Ik"
            = Sk"/(SQRT(3) Un)). Used for short circuit data exchange according to
            IEC 60909.
            '''

        })
    '''
    Maximum initial symmetrical short-circuit currents (Ik" max) in A (Ik"
    = Sk"/(SQRT(3) Un)). Used for short circuit data exchange according
    to IEC 60909.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power limit. It is used for modelling of infeed for load
            flow exchange and not for short circuit modelling.
            '''

        })
    '''
    Maximum reactive power limit. It is used for modelling of infeed for
    load flow exchange and not for short circuit modelling.
    '''

    minInitialSymShCCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum initial symmetrical short-circuit currents (Ik" min) in A (Ik"
            = Sk"/(SQRT(3) Un)). Used for short circuit data exchange according to
            IEC 60909.
            '''

        })
    '''
    Minimum initial symmetrical short-circuit currents (Ik" min) in A (Ik"
    = Sk"/(SQRT(3) Un)). Used for short circuit data exchange according
    to IEC 60909.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power limit. It is used for modelling of infeed for load
            flow exchange and not for short circuit modelling.
            '''

        })
    '''
    Minimum reactive power limit. It is used for modelling of infeed for
    load flow exchange and not for short circuit modelling.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage factor in pu, which was used to calculate short-circuit current
            Ik" and power Sk". Used only if short circuit calculations are done according
            to superposition method.
            '''

        })
    '''
    Voltage factor in pu, which was used to calculate short-circuit current
    Ik" and power Sk". Used only if short circuit calculations are done
    according to superposition method.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence resistance of the synchronous machine.
            '''

        })
    '''
    Zero sequence resistance of the synchronous machine.
    '''

    ratedS: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    rn: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence Thevenin resistance.
            '''

        })
    '''
    Negative sequence Thevenin resistance.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence Thevenin reactance.
            '''

        })
    '''
    Positive sequence Thevenin reactance.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence Thevenin reactance.
            '''

        })
    '''
    Zero sequence Thevenin reactance.
    '''

    xn: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence Thevenin reactance.
            '''

        })
    '''
    Negative sequence Thevenin reactance.
    '''

    WindTurbineType3or4Dynamics: Optional[WindTurbineType3or4Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4Dynamics.PowerElectronicsConnection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    WindTurbineType3or4Dynamics: Optional[WindTurbineType3or4Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4Dynamics.PowerElectronicsConnection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    asynchronousMachineType: Optional[ AsynchronousMachineKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the type of Asynchronous Machine (motor or generator).
            '''

        })
    '''
    Indicates the type of Asynchronous Machine (motor or generator).
    '''

    efficiency: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Magnetizing reactance.
            '''

        })
    '''
    Magnetizing reactance.
    '''

    xp: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Synchronous reactance (greater than xp).
            '''

        })
    '''
    Synchronous reactance (greater than xp).
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.AsynchronousMachine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    AsynchronousMachineDynamics: Optional[AsynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineDynamics.AsynchronousMachine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Factor to calculate the breaking current (Section 4.5.2.1 in IEC 60909-0).
            Used only for single fed short circuit on a generator (Section 4.3.4.2.
            in IEC 60909-0).
            '''

        })
    '''
    Factor to calculate the breaking current (Section 4.5.2.1 in IEC 60909-0).
    Used only for single fed short circuit on a generator (Section 4.3.4.2.
    in IEC 60909-0).
    '''

    referencePriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power consumed when in condenser mode operation.
            '''

        })
    '''
    Active power consumed when in condenser mode operation.
    '''

    coolantType: Optional[ CoolantType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Method of cooling the machine.
            '''

        })
    '''
    Method of cooling the machine.
    '''

    earthingStarPointR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage limit for the unit.
            '''

        })
    '''
    Minimum voltage limit for the unit.
    '''

    operatingMode: Optional[ SynchronousMachineOperatingMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current mode of operation.
            '''

        })
    '''
    Current mode of operation.
    '''

    qPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    shortCircuitRotorType: Optional[ ShortCircuitRotorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Modes that this synchronous machine can operate in.
            '''

        })
    '''
    Modes that this synchronous machine can operate in.
    '''

    voltageRegulationRange: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence reactance.
            '''

        })
    '''
    Negative sequence reactance.
    '''

    InitialReactiveCapabilityCurve: Optional[ReactiveCapabilityCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReactiveCapabilityCurve.InitiallyUsedBySynchronousMachines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The default reactive capability curve for use by a synchronous machine.
            '''

        })
    '''
    The default reactive capability curve for use by a synchronous machine.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.SynchronousMachine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    SynchronousMachineDynamics: Optional[SynchronousMachineDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineDynamics.SynchronousMachine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used for Yn and Zn connections. True if the neutral is solidly grounded.
            '''

        })
    '''
    Used for Yn and Zn connections. True if the neutral is solidly grounded.
    '''

    maximumSections: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    switchOnCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switch on count since the capacitor count was last reset or initialized.
            '''

        })
    '''
    The switch on count since the capacitor count was last reset or initialized.
    '''

    switchOnDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time when the capacitor bank was last switched on.
            '''

        })
    '''
    The date and time when the capacitor bank was last switched on.
    '''

    aVRDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phaseConnection: Optional[ PhaseShuntConnectionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of phase connection, such as wye or delta.
            '''

        })
    '''
    The type of phase connection, such as wye or delta.
    '''

    voltageSensitivity: Optional[ float | VoltagePerReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ShuntCompensatorAction: Optional[ShuntCompensatorAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorAction.ShuntCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The shunt compensator action that is performed on the shunt compensator
            '''

        })
    '''
    The shunt compensator action that is performed on the shunt compensator
    '''

    ShuntCompensatorAction: Optional[ShuntCompensatorAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorAction.ShuntCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The shunt compensator action that is performed on the shunt compensator
            '''

        })
    '''
    The shunt compensator action that is performed on the shunt compensator
    '''

    ShuntCompensatorPhase: list[ShuntCompensatorPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShuntCompensatorPhase.ShuntCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance per section.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktShuntCompensator(ShuntCompensator):
    '''
    Subclass of IEC 61970:Wires:ShuntCompensator.
    '''

    ShuntCompensatorDynamicData: list[ShuntCompensatorDynamicData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ShuntCompensatorDynamicData.MktShuntCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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 g, b, g0 and b0 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SVC(ShuntCompensator):
    '''
    SVC asset allows the capacitive and inductive ratings for each phase to
    be specified individually if required.
    '''

    capacitiveRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum capacitive reactive power.
            '''

        })
    '''
    Maximum capacitive reactive power.
    '''

    inductiveRating: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum inductive reactive power.
            '''

        })
    '''
    Maximum inductive reactive power.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWiresExt'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StaticVarCompensator(RegulatingCondEq):
    '''
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    sVCControlMode: Optional[ SVCControlMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            SVC control mode.
            '''

        })
    '''
    SVC control mode.
    '''

    voltageSetPoint: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    StaticVarCompensatorDynamics: Optional[StaticVarCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensatorDynamics.StaticVarCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    StaticVarCompensatorDynamics: Optional[StaticVarCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StaticVarCompensatorDynamics.StaticVarCompensator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquivalentEquipment(ConductingEquipment):
    '''
    The class represents equivalent objects that are the result of a network
    reduction. The class is the base for equivalent objects of different types.
    '''

    EquivalentNetwork: Optional[EquivalentNetwork] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EquivalentNetwork.EquivalentEquipments',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The equivalent where the reduced model belongs.
            '''

        })
    '''
    The equivalent where the reduced model belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquivalentBranch(EquivalentEquipment):
    '''
    The class represents equivalent branches. In cases where a transformer
    phase shift is modelled and the EquivalentBranch is spanning the same nodes,
    the impedance quantities for the EquivalentBranch shall consider the needed
    phase shift.
    '''

    negativeR12: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence series resistance from terminal sequence 1 to terminal
            sequence 2. Used for short circuit data exchange according to IEC 60909.
            EquivalentBranch is a result of network reduction prior to the data exchange.
            '''

        })
    '''
    Negative sequence series resistance from terminal sequence 1 to terminal
    sequence 2. Used for short circuit data exchange according to IEC 60909.
    EquivalentBranch is a result of network reduction prior to the data
    exchange.
    '''

    negativeR21: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence series resistance from terminal sequence 2 to terminal
            sequence 1. Used for short circuit data exchange according to IEC 60909.
            EquivalentBranch is a result of network reduction prior to the data exchange.
            '''

        })
    '''
    Negative sequence series resistance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    EquivalentBranch is a result of network reduction prior to the data
    exchange.
    '''

    negativeX12: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence series reactance from terminal sequence 1 to terminal
            sequence 2. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Negative sequence series reactance from terminal sequence 1 to terminal
    sequence 2. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    negativeX21: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence series reactance from terminal sequence 2 to terminal
            sequence 1. Used for short circuit data exchange according to IEC 60909.
            Usage: EquivalentBranch is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Negative sequence series reactance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    Usage: EquivalentBranch is a result of network reduction prior to the
    data exchange.
    '''

    positiveR12: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance from terminal sequence 1 to terminal
            sequence 2 . Used for short circuit data exchange according to IEC 60909.
            EquivalentBranch is a result of network reduction prior to the data exchange.
            '''

        })
    '''
    Positive sequence series resistance from terminal sequence 1 to terminal
    sequence 2 . Used for short circuit data exchange according to IEC
    60909.
    EquivalentBranch is a result of network reduction prior to the data
    exchange.
    '''

    positiveR21: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance from terminal sequence 2 to terminal
            sequence 1. Used for short circuit data exchange according to IEC 60909.
            EquivalentBranch is a result of network reduction prior to the data exchange.
            '''

        })
    '''
    Positive sequence series resistance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    EquivalentBranch is a result of network reduction prior to the data
    exchange.
    '''

    positiveX12: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance from terminal sequence 1 to terminal
            sequence 2. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Positive sequence series reactance from terminal sequence 1 to terminal
    sequence 2. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    positiveX21: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance from terminal sequence 2 to terminal
            sequence 1. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Positive sequence series reactance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series resistance of the reduced branch.
            '''

        })
    '''
    Positive sequence series resistance of the reduced branch.
    '''

    r21: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistance from terminal sequence 2 to terminal sequence 1 .Used for steady
            state power flow. This attribute is optional and represent unbalanced network
            such as off-nominal phase shifter. If only EquivalentBranch.r is given,
            then EquivalentBranch.r21 is assumed equal to EquivalentBranch.r.
            Usage rule : EquivalentBranch is a result of network reduction prior to
            the data exchange.
            '''

        })
    '''
    Resistance from terminal sequence 2 to terminal sequence 1 .Used for
    steady state power flow. This attribute is optional and represent unbalanced
    network such as off-nominal phase shifter. If only EquivalentBranch.r
    is given, then EquivalentBranch.r21 is assumed equal to EquivalentBranch.r.
    Usage rule : EquivalentBranch is a result of network reduction prior
    to the data exchange.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence series reactance of the reduced branch.
            '''

        })
    '''
    Positive sequence series reactance of the reduced branch.
    '''

    x21: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance from terminal sequence 2 to terminal sequence 1. Used for steady
            state power flow. This attribute is optional and represents an unbalanced
            network such as off-nominal phase shifter. If only EquivalentBranch.x is
            given, then EquivalentBranch.x21 is assumed equal to EquivalentBranch.x.
            Usage rule: EquivalentBranch is a result of network reduction prior to
            the data exchange.
            '''

        })
    '''
    Reactance from terminal sequence 2 to terminal sequence 1. Used for
    steady state power flow. This attribute is optional and represents
    an unbalanced network such as off-nominal phase shifter. If only EquivalentBranch.x
    is given, then EquivalentBranch.x21 is assumed equal to EquivalentBranch.x.
    Usage rule: EquivalentBranch is a result of network reduction prior
    to the data exchange.
    '''

    zeroR12: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance from terminal sequence 1 to terminal sequence
            2. Used for short circuit data exchange according to IEC 60909.
            EquivalentBranch is a result of network reduction prior to the data exchange.
            '''

        })
    '''
    Zero sequence series resistance from terminal sequence 1 to terminal
    sequence 2. Used for short circuit data exchange according to IEC 60909.
    EquivalentBranch is a result of network reduction prior to the data
    exchange.
    '''

    zeroR21: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series resistance from terminal sequence 2 to terminal sequence
            1. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Zero sequence series resistance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    zeroX12: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance from terminal sequence 1 to terminal sequence
            2. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Zero sequence series reactance from terminal sequence 1 to terminal
    sequence 2. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    zeroX21: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance from terminal sequence 2 to terminal sequence
            1. Used for short circuit data exchange according to IEC 60909.
            Usage : EquivalentBranch is a result of network reduction prior to the
            data exchange.
            '''

        })
    '''
    Zero sequence series reactance from terminal sequence 2 to terminal
    sequence 1. Used for short circuit data exchange according to IEC 60909.
    Usage : EquivalentBranch is a result of network reduction prior to
    the data exchange.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquivalentInjection(EquivalentEquipment):
    '''
    This class represents equivalent injections (generation or load). Voltage
    regulation is allowed only at the point of connection.
    '''

    regulationCapability: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies whether or not the EquivalentInjection has the capability to
            regulate the local voltage. If true the EquivalentInjection can regulate.
            If false the EquivalentInjection cannot regulate. ReactiveCapabilityCurve
            can only be associated with EquivalentInjection if the flag is true.
            '''

        })
    '''
    Specifies whether or not the EquivalentInjection has the capability
    to regulate the local voltage. If true the EquivalentInjection can
    regulate. If false the EquivalentInjection cannot regulate. ReactiveCapabilityCurve
    can only be associated with EquivalentInjection if the flag is true.
    '''

    regulationStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the regulation status of the EquivalentInjection. True is regulating.
            False is not regulating.
            '''

        })
    '''
    Specifies the regulation status of the EquivalentInjection. True is
    regulating. False is not regulating.
    '''

    maxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power of the injection. Used for modelling of infeed for
            load flow exchange. Not used for short circuit modelling. If maxQ and minQ
            are not used ReactiveCapabilityCurve can be used.
            '''

        })
    '''
    Maximum reactive power of the injection. Used for modelling of infeed
    for load flow exchange. Not used for short circuit modelling. If maxQ
    and minQ are not used ReactiveCapabilityCurve can be used.
    '''

    minP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power of the injection. Used for modelling of infeed for
            load flow exchange. Not used for short circuit modelling. If maxQ and minQ
            are not used ReactiveCapabilityCurve can be used.
            '''

        })
    '''
    Minimum reactive power of the injection. Used for modelling of infeed
    for load flow exchange. Not used for short circuit modelling. If maxQ
    and minQ are not used ReactiveCapabilityCurve can be used.
    '''

    p: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Equivalent active power injection. Load sign convention is used, i.e. positive
            sign means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    Equivalent 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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Equivalent reactive power injection. Load sign convention is used, i.e.
            positive sign means flow out from a node.
            Starting value for steady state solutions.
            '''

        })
    '''
    Equivalent reactive power injection. Load sign convention is used,
    i.e. positive sign means flow out from a node.
    Starting value for steady state solutions.
    '''

    r: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence resistance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Positive sequence resistance. Used to represent Extended-Ward (IEC
    60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    r0: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence resistance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Zero sequence resistance. Used to represent Extended-Ward (IEC 60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    r2: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence resistance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Negative sequence resistance. Used to represent Extended-Ward (IEC
    60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    regulationTarget: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The target voltage for voltage regulation. The attribute shall be a positive
            value.
            '''

        })
    '''
    The target voltage for voltage regulation. The attribute shall be a
    positive value.
    '''

    x: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence reactance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Positive sequence reactance. Used to represent Extended-Ward (IEC 60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    x0: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence reactance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Zero sequence reactance. Used to represent Extended-Ward (IEC 60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    x2: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Negative sequence reactance. Used to represent Extended-Ward (IEC 60909).
            Usage : Extended-Ward is a result of network reduction prior to the data
            exchange.
            '''

        })
    '''
    Negative sequence reactance. Used to represent Extended-Ward (IEC 60909).
    Usage : Extended-Ward is a result of network reduction prior to the
    data exchange.
    '''

    ReactiveCapabilityCurve: Optional[ReactiveCapabilityCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReactiveCapabilityCurve.EquivalentInjection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reactive capability curve used by this equivalent injection.
            '''

        })
    '''
    The reactive capability curve used by this equivalent injection.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EquivalentShunt(EquivalentEquipment):
    '''
    The class represents equivalent shunts.
    '''

    b: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt susceptance.
            '''

        })
    '''
    Positive sequence shunt susceptance.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt conductance.
            '''

        })
    '''
    Positive sequence shunt conductance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Equivalents'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this ground.
            '''

        })
    '''
    Action taken with this ground.
    '''

    GroundAction: Optional[GroundAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GroundAction.Ground',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action taken with this ground.
            '''

        })
    '''
    Action taken with this ground.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktConductingEquipment(ConductingEquipment):
    '''
    Subclass of IEC 61970:Core:ConductingEquipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transformers that belong to this bank.
            '''

        })
    '''
    All transformers that belong to this bank.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EndBFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktPowerTransformerEndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence reactance.
            '''

        })
    '''
    Zero sequence reactance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktSeriesCompensator(SeriesCompensator):
    '''
    Subclass of IEC 61970:Wires:SeriesCompensator.
    '''

    EndAFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktSeriresCompensatorEndAFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EndBFlow: Optional[BranchEndFlow] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BranchEndFlow.MktSeriesCompensatorEndBFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    switchOnCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switch on count since the switch was last reset or initialized.
            '''

        })
    '''
    The switch on count since the switch was last reset or initialized.
    '''

    switchOnDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date and time when the switch was last switched on.
            '''

        })
    '''
    The date and time when the switch was last switched on.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switch state associated with the switch.
            '''

        })
    '''
    The switch state associated with the switch.
    '''

    SwitchAction: Optional[SwitchAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchAction.OperatedSwitch',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action changing status of this switch.
            '''

        })
    '''
    Action changing status of this switch.
    '''

    SwitchPhase: list[SwitchPhase] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchPhase.Switch',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A Switch can be associated with SwitchSchedules.
            '''

        })
    '''
    A Switch can be associated with SwitchSchedules.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.Cut',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this cut.
            '''

        })
    '''
    Action taken with this cut.
    '''

    CutAction: Optional[CutAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CutAction.Cut',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action taken with this cut.
            '''

        })
    '''
    Action taken with this cut.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 manually operated or motor operated mechanical switching device used
    for changing the connections in a circuit, or for isolating a circuit or
    equipment from a source of power. It is required to open or close circuits
    when negligible current is broken or made.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Action taken with this jumper.
            '''

        })
    '''
    Action taken with this jumper.
    '''

    JumperAction: Optional[JumperAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'JumperAction.Jumper',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Action taken with this jumper.
            '''

        })
    '''
    Action taken with this jumper.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktSwitch(Switch):
    '''
    Subclass of IEC 61970:Wires:Switch.
    '''

    SwitchStatus: list[SwitchStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchStatus.MktSwitch',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@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://iec.ch/TC57/CIM100#',
        '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.
    '''

    RecloseSequences: list[RecloseSequence] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RecloseSequence.ProtectedSwitch',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A breaker may have zero or more automatic reclosures after a trip occurs.
            '''

        })
    '''
    A breaker may have zero or more automatic reclosures after a trip occurs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The transition time from open to close.
            '''

        })
    '''
    The transition time from open to close.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#'
    @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 DCConductingEquipment(Equipment):
    '''
    The parts of the DC power system that are designed to carry current or
    that are conductively connected through DC terminals.
    '''

    ratedUdc: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A DC conducting equipment has DC terminals.
            '''

        })
    '''
    A DC conducting equipment has DC terminals.
    '''

    ProtectiveActionAdjustment: list[ProtectiveActionAdjustment] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveActionAdjustment.DCConductingEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistance to ground.
            '''

        })
    '''
    Resistance to ground.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the DC device.
            '''

        })
    '''
    Resistance of the DC device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistance of the DC device.
            '''

        })
    '''
    Resistance of the DC device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    genControlMode: Optional[ GeneratorControlMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    governorMPL: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The variable cost component of production per unit of ActivePower.
            '''

        })
    '''
    The variable cost component of production per unit of ActivePower.
    '''

    GenUnitOpSchedule: Optional[GenUnitOpSchedule] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenUnitOpSchedule.GeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    energyConversionCapability: Optional[ HydroEnergyConversionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy conversion capability for generating.
            '''

        })
    '''
    Energy conversion capability for generating.
    '''

    hydroUnitWaterCost: Optional[ float | CostPerVolume ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The equivalent cost of water that drives the hydro turbine.
            '''

        })
    '''
    The equivalent cost of water that drives the hydro turbine.
    '''

    turbineType: Optional[ HydroTurbineKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    GeneratingUnitDynamicValues: list[GeneratingUnitDynamicValues] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingUnitDynamicValues.MktGeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktThermalGeneratingUnit(ThermalGeneratingUnit):
    '''
    Subclass of ThermalGeneratingUnit from Production Package in IEC 61970.
    '''

    CombinedCycleConfigurationMember: list[CombinedCycleConfigurationMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleConfigurationMember.MktThermalGeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of wind generating unit.
            '''

        })
    '''
    The kind of wind generating unit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'RotatingMachine.HydroPump',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.PowerElectronicsUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BatteryUnit(PowerElectronicsUnit):
    '''
    An electrochemical energy storage device.
    '''

    batteryState: Optional[ BatteryStateKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The current state of the battery (charging, full, etc.).
            '''

        })
    '''
    The current state of the battery (charging, full, etc.).
    '''

    ratedE: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PhotoVoltaicUnit(PowerElectronicsUnit):
    '''
    A photovoltaic device or an aggregation of such devices.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ProtectionEquipment(Equipment):
    '''
    An electrical device designed to respond to input conditions in a prescribed
    manner and after specified conditions are met to cause contact operation
    or similar abrupt change in associated electric control circuits, or simply
    to display the detected condition. Protection equipment is associated with
    conducting equipment and usually operate circuit breakers.
    '''

    highLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum allowable value.
            '''

        })
    '''
    The maximum allowable value.
    '''

    lowLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum allowable value.
            '''

        })
    '''
    The minimum allowable value.
    '''

    powerDirectionFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Direction same as positive active power flow value.
            '''

        })
    '''
    Direction same as positive active power flow value.
    '''

    relayDelayTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The time delay from detection of abnormal conditions to relay operation.
            '''

        })
    '''
    The time delay from detection of abnormal conditions to relay operation.
    '''

    unitMultiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit multiplier of the value.
            '''

        })
    '''
    The unit multiplier of the value.
    '''

    unitSymbol: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure of the value.
            '''

        })
    '''
    The unit of measure of the value.
    '''

    ProtectiveAction: list[ProtectiveAction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveAction.ProtectionEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Protective action can emulate the action done by one or more protection
            equipment. In a node breaker model were protective equipment is model this
            association will be used.
            '''

        })
    '''
    Protective action can emulate the action done by one or more protection
    equipment. In a node breaker model were protective equipment is model
    this association will be used.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurrentRelay(ProtectionEquipment):
    '''
    A device that checks current flow values in any direction or designated
    direction.
    '''

    inverseTimeFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set true if the current relay has inverse time characteristic.
            '''

        })
    '''
    Set true if the current relay has inverse time characteristic.
    '''

    currentLimit1: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current limit number one 1 for inverse time pickup.
            '''

        })
    '''
    Current limit number one 1 for inverse time pickup.
    '''

    currentLimit2: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current limit number 2 for inverse time pickup.
            '''

        })
    '''
    Current limit number 2 for inverse time pickup.
    '''

    currentLimit3: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current limit number 3 for inverse time pickup.
            '''

        })
    '''
    Current limit number 3 for inverse time pickup.
    '''

    timeDelay1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inverse time delay number 1 for current limit number 1.
            '''

        })
    '''
    Inverse time delay number 1 for current limit number 1.
    '''

    timeDelay2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inverse time delay number 2 for current limit number 2.
            '''

        })
    '''
    Inverse time delay number 2 for current limit number 2.
    '''

    timeDelay3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inverse time delay number 3 for current limit number 3.
            '''

        })
    '''
    Inverse time delay number 3 for current limit number 3.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SynchrocheckRelay(ProtectionEquipment):
    '''
    A device that operates when two AC circuits are within the desired limits
    of frequency, phase angle, and voltage, to permit or to cause the paralleling
    of these two circuits. Used to prevent the paralleling of non-synchronous
    topological islands.
    '''

    maxAngleDiff: Optional[ float | AngleRadians ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum allowable voltage vector phase angle difference across the
            open device.
            '''

        })
    '''
    The maximum allowable voltage vector phase angle difference across
    the open device.
    '''

    maxFreqDiff: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum allowable frequency difference across the open device.
            '''

        })
    '''
    The maximum allowable frequency difference across the open device.
    '''

    maxVoltDiff: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum allowable difference voltage across the open device.
            '''

        })
    '''
    The maximum allowable difference voltage across the open device.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerTransformer.TransformerTanks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bank this transformer belongs to.
            '''

        })
    '''
    Bank this transformer belongs to.
    '''

    TransformerObservations: list[TransformerObservation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerObservation.Transformer',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransformerTankEnds: list[TransformerTankEnd] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerTankEnd.TransformerTank',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All windings of this transformer.
            '''

        })
    '''
    All windings of this transformer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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.
    '''

    direction: Optional[ InterTieDirection ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The direction of the flowgate, export or import
            '''

        })
    '''
    The direction of the flowgate, export or import
    '''

    exportMWRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Export MW rating
            '''

        })
    '''
    Export MW rating
    '''

    importMWRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Import MW rating
            '''

        })
    '''
    Import MW rating
    '''

    CongestionRevenueRight: Optional[CongestionRevenueRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CongestionRevenueRight.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    From_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.From_Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GenericConstraints: Optional[GenericConstraints] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenericConstraints.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraints: Optional[SecurityConstraints] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraints.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    To_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.To_Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CongestionRevenueRight: Optional[CongestionRevenueRight] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CongestionRevenueRight.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ConstraintResults: list[ConstraintResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConstraintResults.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContractDistributionFactor: list[ContractDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractDistributionFactor.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FTRs: list[FTR] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FTR.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FlowgateRelief: list[FlowgateRelief] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FlowgateRelief.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FlowgateValue: list[FlowgateValue] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FlowgateValue.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeneratingUnitDynamicValues: list[GeneratingUnitDynamicValues] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingUnitDynamicValues.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieResults: list[InterTieResults] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterTieResults.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktTerminal: list[MktTerminal] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktTerminal.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredInterTie: list[RegisteredInterTie] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredInterTie.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTie: list[SchedulingPoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SchedulingPoint.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SecurityConstraints: Optional[SecurityConstraints] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SecurityConstraints.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionCapacity: list[TransmissionCapacity] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionCapacity.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TranmissionRightEntitlement: list[TransmissionInterfaceRightEntitlement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionInterfaceRightEntitlement.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ViolationLimits: list[ViolationLimit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ViolationLimit.Flowgate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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.
    '''

    frequencyBiasFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The control area's frequency bias factor, in MW/0.1 Hz, for automatic generation
            control (AGC)
            '''

        })
    '''
    The control area's frequency bias factor, in MW/0.1 Hz, for automatic
    generation control (AGC)
    '''

    areaControlMode: Optional[ AreaControlMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The area's present control mode: (CF = constant frequency) or (CTL = constant
            tie-line) or (TLB = tie-line bias) or (OFF = off control)
            '''

        })
    '''
    The area's present control mode: (CF = constant frequency) or (CTL
    = constant tie-line) or (TLB = tie-line bias) or (OFF = off control)
    '''

    freqSetPoint: Optional[ float | Frequency ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The present power system frequency set point for automatic generation control
            '''

        })
    '''
    The present power system frequency set point for automatic generation
    control
    '''

    AdjacentCASet: Optional[AdjacentCASet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AdjacentCASet.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Controls: Optional[ControlAreaOperator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ControlAreaOperator.ControlledBy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A ControlAreaCompany controls a ControlArea.
            '''

        })
    '''
    A ControlAreaCompany controls a ControlArea.
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AdjacentCASet: Optional[AdjacentCASet] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AdjacentCASet.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSelfSched: list[BidSelfSched] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidSelfSched.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CnodeDistributionFactor: list[CnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CnodeDistributionFactor.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Controls: Optional[ControlAreaOperator] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ControlAreaOperator.ControlledBy',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A ControlAreaCompany controls a ControlArea.
            '''

        })
    '''
    A ControlAreaCompany controls a ControlArea.
    '''

    Flowgate: list[Flowgate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Flowgate.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LossClearingResults: list[LossClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossClearingResults.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: list[RegisteredResource] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegisteredResource.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlAreas: list[SubControlArea] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubControlArea.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The interchange area may operate as a control area
            '''

        })
    '''
    The interchange area may operate as a control area
    '''

    SysLoadDistribuFactor: list[SysLoadDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SysLoadDistributionFactor.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterface: list[TransferInterface] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransferInterface.HostControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    hydroPlantStorageType: Optional[ HydroPlantStorageKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of hydro power plant water storage.
            '''

        })
    '''
    The type of hydro power plant water storage.
    '''

    plantDischargeCapacity: Optional[ float | VolumeFlowRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The level at which the surge tank spills.
            '''

        })
    '''
    The level at which the surge tank spills.
    '''

    GenSourcePumpDischargeReservoir: Optional[Reservoir] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Reservoir.UpstreamFromHydroPowerPlants',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    PowerElectronicsConnection: Optional[PowerElectronicsConnection] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PowerElectronicsConnection.PowerElectronicsConnectionPhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PrimeMover(PowerSystemResource):
    '''
    The machine used to develop mechanical energy used to drive a generator.
    '''

    primeMoverRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rating of prime mover.
            '''

        })
    '''
    Rating of prime mover.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class CombustionTurbine(PrimeMover):
    '''
    A prime mover that is typically fuelled by gas or light oil.
    '''

    heatRecoveryFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag that is set to true if the combustion turbine is associated with a
            heat recovery boiler.
            '''

        })
    '''
    Flag that is set to true if the combustion turbine is associated with
    a heat recovery boiler.
    '''

    ambientTemp: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Default ambient temperature to be used in modelling applications.
            '''

        })
    '''
    Default ambient temperature to be used in modelling applications.
    '''

    auxPowerVersusFrequency: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Off-nominal frequency effect on turbine auxiliaries. Per unit reduction
            in auxiliary active power consumption versus per unit reduction in frequency
            (from rated frequency).
            '''

        })
    '''
    Off-nominal frequency effect on turbine auxiliaries. Per unit reduction
    in auxiliary active power consumption versus per unit reduction in
    frequency (from rated frequency).
    '''

    auxPowerVersusVoltage: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Off-nominal voltage effect on turbine auxiliaries. Per unit reduction in
            auxiliary active power consumption versus per unit reduction in auxiliary
            bus voltage (from a specified voltage level).
            '''

        })
    '''
    Off-nominal voltage effect on turbine auxiliaries. Per unit reduction
    in auxiliary active power consumption versus per unit reduction in
    auxiliary bus voltage (from a specified voltage level).
    '''

    capabilityVersusFrequency: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Off-nominal frequency effect on turbine capability. Per unit reduction
            in unit active power capability versus per unit reduction in frequency
            (from rated frequency).
            '''

        })
    '''
    Off-nominal frequency effect on turbine capability. Per unit reduction
    in unit active power capability versus per unit reduction in frequency
    (from rated frequency).
    '''

    powerVariationByTemp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Per unit change in power per (versus) unit change in ambient temperature.
            '''

        })
    '''
    Per unit change in power per (versus) unit change in ambient temperature.
    '''

    referenceTemp: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference temperature at which the output of the turbine was defined.
            '''

        })
    '''
    Reference temperature at which the output of the turbine was defined.
    '''

    timeConstant: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The time constant for the turbine.
            '''

        })
    '''
    The time constant for the turbine.
    '''

    AirCompressor: Optional[AirCompressor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CombustionTurbine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A CAES air compressor is driven by combustion turbine.
            '''

        })
    '''
    A CAES air compressor is driven by combustion turbine.
    '''

    CTTempActivePowerCurve: Optional[CTTempActivePowerCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CTTempActivePowerCurve.CombustionTurbine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A combustion turbine may have an active power versus ambient temperature
            relationship.
            '''

        })
    '''
    A combustion turbine may have an active power versus ambient temperature
    relationship.
    '''

    HeatRecoveryBoiler: Optional[HeatRecoveryBoiler] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HeatRecoveryBoiler.CombustionTurbines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A combustion turbine may have a heat recovery boiler for making steam.
            '''

        })
    '''
    A combustion turbine may have a heat recovery boiler for making steam.
    '''

    AirCompressor: Optional[AirCompressor] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AirCompressor.CombustionTurbine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A CAES air compressor is driven by combustion turbine.
            '''

        })
    '''
    A CAES air compressor is driven by combustion turbine.
    '''

    CTTempActivePowerCurve: Optional[CTTempActivePowerCurve] = field(
        default=None,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CTTempActivePowerCurve.CombustionTurbine',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A combustion turbine may have an active power versus ambient temperature
            relationship.
            '''

        })
    '''
    A combustion turbine may have an active power versus ambient temperature
    relationship.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HydroTurbine(PrimeMover):
    '''
    A water driven prime mover. Typical turbine types are: Francis, Kaplan,
    and Pelton.
    '''

    gateRateLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate rate limit.
            '''

        })
    '''
    Gate rate limit.
    '''

    gateUpperLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate upper limit.
            '''

        })
    '''
    Gate upper limit.
    '''

    maxHeadMaxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum efficiency active power at maximum head conditions.
            '''

        })
    '''
    Maximum efficiency active power at maximum head conditions.
    '''

    minHeadMaxP: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum efficiency active power at minimum head conditions.
            '''

        })
    '''
    Maximum efficiency active power at minimum head conditions.
    '''

    speedRating: Optional[ float | RotationSpeed ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated speed in number of revolutions. The attribute shall be a positive
            value.
            '''

        })
    '''
    Rated speed in number of revolutions. The attribute shall be a positive
    value.
    '''

    speedRegulation: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed regulation.
            '''

        })
    '''
    Speed regulation.
    '''

    transientDroopTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient droop time constant.
            '''

        })
    '''
    Transient droop time constant.
    '''

    transientRegulation: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transient regulation.
            '''

        })
    '''
    Transient regulation.
    '''

    turbineRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rated turbine active power. The attribute shall be a positive value.
            '''

        })
    '''
    Rated turbine active power. The attribute shall be a positive value.
    '''

    turbineType: Optional[ HydroTurbineKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of turbine.
            '''

        })
    '''
    Type of turbine.
    '''

    waterStartingTime: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water starting time.
            '''

        })
    '''
    Water starting time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SteamTurbine(PrimeMover):
    '''
    Steam turbine.
    '''

    shaft1PowerHP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 1 high pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 1 high pressure turbine output.
    '''

    shaft1PowerIP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 1 intermediate pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 1 intermediate pressure turbine output.
    '''

    shaft1PowerLP1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 1 first low pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 1 first low pressure turbine output.
    '''

    shaft1PowerLP2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 1 second low pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 1 second low pressure turbine output.
    '''

    shaft2PowerHP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 2 high pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 2 high pressure turbine output.
    '''

    shaft2PowerIP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 2 intermediate pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 2 intermediate pressure turbine output.
    '''

    shaft2PowerLP1: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 2 first low pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 2 first low pressure turbine output.
    '''

    shaft2PowerLP2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fraction of power from shaft 2 second low pressure turbine output.
            '''

        })
    '''
    Fraction of power from shaft 2 second low pressure turbine output.
    '''

    crossoverTC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Crossover time constant.
            '''

        })
    '''
    Crossover time constant.
    '''

    reheater1TC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            First reheater time constant.
            '''

        })
    '''
    First reheater time constant.
    '''

    reheater2TC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Second reheater time constant.
            '''

        })
    '''
    Second reheater time constant.
    '''

    steamChestTC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam chest time constant.
            '''

        })
    '''
    Steam chest time constant.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum on time after start up.
            '''

        })
    '''
    Minimum on time after start up.
    '''

    ACAFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    minDispatchTime: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    mustOfferFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Registration Status of resource - Active, Mothballed, Planned, or Decommissioned.
            '''

        })
    '''
    Registration Status of resource - Active, Mothballed, Planned, or Decommissioned.
    '''

    resourceAdequacyFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An AggregateNode may be associated with up to many RegisteredResources.
            '''

        })
    '''
    An AggregateNode may be associated with up to many RegisteredResources.
    '''

    DefaultBid: Optional[DefaultBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBid.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketParticipant: Optional[MarketParticipant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketParticipant.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.RegisteredResources',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AllocationResultValues: list[AllocationResultValues] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AllocationResultValues.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Commitments: list[Commitments] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Commitments.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ContractDistributionFactor: list[ContractDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractDistributionFactor.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DefaultBid: Optional[DefaultBid] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DefaultBid.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DispatchInstReply: list[DispatchInstReply] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DispatchInstReply.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DopInstruction: list[DopInstruction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DopInstruction.RegisteredResouce',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DotInstruction: list[DotInstruction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DotInstruction.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExPostResourceResults: list[ExPostResourceResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostResourceResults.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ExpectedEnergyValues: list[ExpectedEnergyValues] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExpectedEnergyValues.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FormerReference: list[FormerReference] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'FormerReference.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Instructions: list[Instructions] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Instructions.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IntermittentResourceEligibility: list[IntermittentResourceEligibility] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IntermittentResourceEligibility.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadFollowingInst: list[LoadFollowingInst] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadFollowingInst.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadFollowingOperatorInput: list[LoadFollowingOperatorInput] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadFollowingOperatorInput.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMResourceStatus: list[MPMResourceStatus] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MPMResourceStatus.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OrgResOwnership: list[OrgResOwnership] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OrgResOwnership.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMROperatorInput: list[RMROperatorInput] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RMROperatorInput.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RUCAwardInstruction: list[RUCAwardInstruction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RUCAwardInstruction.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceAwardInstruction: list[ResourceAwardInstruction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceAwardInstruction.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceAncillaryServiceQualification: list[ResourceCertification] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceCertification.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            RegisteredResources are qualified for resource ancillary service types
            (which include market product types as well as other types such as BlackStart)
            by the association to the class ResourceAncillaryServiceQualification.
            '''

        })
    '''
    RegisteredResources are qualified for resource ancillary service types
    (which include market product types as well as other types such as
    BlackStart) by the association to the class ResourceAncillaryServiceQualification.
    '''

    ResourceDispatchResults: list[ResourceDispatchResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceDispatchResults.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceLoadFollowingInst: list[ResourceLoadFollowingInst] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceLoadFollowingInst.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubstitutionResourceList: list[SubstitutionResourceList] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SubstitutionResourceList.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredDistributedResource(RegisteredResource):
    '''
    A registered resource that represents a distributed energy resource, such
    as a micro-generator, fuel cell, photo-voltaic energy source, etc.
    '''

    distributedResourceType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of resource. Examples include: fuel cell, flywheel, photovoltaic,
            micro-turbine, CHP (combined heat power), V2G (vehicle to grid), DES (distributed
            energy storage), and others.
            '''

        })
    '''
    The type of resource. Examples include: fuel cell, flywheel, photovoltaic,
    micro-turbine, CHP (combined heat power), V2G (vehicle to grid), DES
    (distributed energy storage), and others.
    '''

    ResourcePerformanceRatings: list[ResourcePerformanceRating] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourcePerformanceRating.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResponseMethods: list[ResponseMethod] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResponseMethod.RegisteredResource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredGenerator(RegisteredResource):
    '''
    Model of a generator that is registered to participate in the market.
    '''

    coldStartTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold start time.
            '''

        })
    '''
    Cold start time.
    '''

    combinedCycleOperatingMode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Combined Cycle operating mode.
            '''

        })
    '''
    Combined Cycle operating mode.
    '''

    commericialOperationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    hotIntTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hot-to-intermediate time (Seasonal)
            '''

        })
    '''
    Hot-to-intermediate time (Seasonal)
    '''

    hotStartTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hot start time.
            '''

        })
    '''
    Hot start time.
    '''

    intColdTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate-to-cold time (Seasonal)
            '''

        })
    '''
    Intermediate-to-cold time (Seasonal)
    '''

    intStartTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intermediate start time.
            '''

        })
    '''
    Intermediate start time.
    '''

    maxShutdownTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum time this device can be shut down.
            '''

        })
    '''
    Maximum time this device can be shut down.
    '''

    maxStartUpsPerDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            maximum start ups per day
            '''

        })
    '''
    maximum start ups per day
    '''

    maxWeeklyEnergy: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum weekly Energy (Seasonal)
            '''

        })
    '''
    Maximum weekly Energy (Seasonal)
    '''

    maxWeeklyStarts: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum weekly starts (seasonal parameter)
            '''

        })
    '''
    Maximum weekly starts (seasonal parameter)
    '''

    pumpingFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pumping factor for pump storage units, conversion factor between generating
            and pumping.
            '''

        })
    '''
    Pumping factor for pump storage units, conversion factor between generating
    and pumping.
    '''

    pumpMinDownTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum down time for the pump in a pump storage unit.
            '''

        })
    '''
    The minimum down time for the pump in a pump storage unit.
    '''

    pumpMinUpTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum up time aspect for the pump in a pump storage unit
            '''

        })
    '''
    The minimum up time aspect for the pump in a pump storage unit
    '''

    pumpShutdownCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost to shutdown a pump during the pump aspect of a pump storage unit.
            '''

        })
    '''
    The cost to shutdown a pump during the pump aspect of a pump storage
    unit.
    '''

    pumpShutdownTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The shutdown time (minutes) of the pump aspect of a pump storage unit.
            '''

        })
    '''
    The shutdown time (minutes) of the pump aspect of a pump storage unit.
    '''

    resourceSubType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit sub type used by Settlements or scheduling application. Application
            use of the unit sub type may define the necessary types as applicable.
            '''

        })
    '''
    Unit sub type used by Settlements or scheduling application. Application
    use of the unit sub type may define the necessary types as applicable.
    '''

    riverSystem: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            River System the Resource is tied to.
            '''

        })
    '''
    River System the Resource is tied to.
    '''

    capacityFactor: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The ratio of actual energy produced by resource divided by the maximum
            potential energy if the resource is fully utilized. As an example, wind
            farms.
            '''

        })
    '''
    The ratio of actual energy produced by resource divided by the maximum
    potential energy if the resource is fully utilized. As an example,
    wind farms.
    '''

    constrainedOutputFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Constrained Output Generator (COG) Indicator (Yes/No), per Generating Resource
            '''

        })
    '''
    Constrained Output Generator (COG) Indicator (Yes/No), per Generating
    Resource
    '''

    energyDownRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Response rate in MW per minute for ramping energy down.
            '''

        })
    '''
    Response rate in MW per minute for ramping energy down.
    '''

    energyUpRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Response rate in MW per minute for ramping energy up.
            '''

        })
    '''
    Response rate in MW per minute for ramping energy up.
    '''

    extremeLongStart: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Some long-start up time units may need to receive start up instruction
            before DA market results are available. Long-Start resources may be either
            physical resources within the control with start-up times greater than
            18 hours or the long-start contractual inter-tie commitment that shall
            be completed by 6 am one-day ahead. Therefore, there is a need for a process
            to determine the commitment of such resources before the DA market.
            '''

        })
    '''
    Some long-start up time units may need to receive start up instruction
    before DA market results are available. Long-Start resources may be
    either physical resources within the control with start-up times greater
    than 18 hours or the long-start contractual inter-tie commitment that
    shall be completed by 6 am one-day ahead. Therefore, there is a need
    for a process to determine the commitment of such resources before
    the DA market.
    '''

    fuelSource: Optional[ FuelSource ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Values: Natural Gas Based Resource, Non Natural Gas Based Resource
            "NG" - Natural-Gas-Based Resource - a Resource that is powered by Natural
            Gas
            "NNG" - Non-Natural-Gas-Based Resource - a Resouce that is powered by some
            other fuel than Natural Gas
            '''

        })
    '''
    Values: Natural Gas Based Resource, Non Natural Gas Based Resource
    "NG" - Natural-Gas-Based Resource - a Resource that is powered by Natural
    Gas
    "NNG" - Non-Natural-Gas-Based Resource - a Resouce that is powered
    by some other fuel than Natural Gas
    '''

    highControlLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High limit for secondary (AGC) control
            '''

        })
    '''
    High limit for secondary (AGC) control
    '''

    loadFollowingDownMSS: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Certifies resources for use in MSS Load Following Down
            '''

        })
    '''
    Certifies resources for use in MSS Load Following Down
    '''

    loadFollowingUpMSS: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Certifies resources for use in MSS Load Following Up
            '''

        })
    '''
    Certifies resources for use in MSS Load Following Up
    '''

    lowControlLImit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low limit for secondary (AGC) control
            '''

        })
    '''
    Low limit for secondary (AGC) control
    '''

    maxDependableCap: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Dependable Capacity (MNDC). Maximun Net Dependable Capacity is
            used in association with an RMR contract.
            '''

        })
    '''
    Maximum Dependable Capacity (MNDC). Maximun Net Dependable Capacity
    is used in association with an RMR contract.
    '''

    maximumAllowableSpinningReserve: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    maximumOperatingLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the maximum operating MW limit the dispatcher can enter for this
            unit
            '''

        })
    '''
    This is the maximum operating MW limit the dispatcher can enter for
    this unit
    '''

    maxMinLoadCost: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The registered maximum Minimum Load Cost of a Generating Resource registered
            with a Cost Basis of "Bid Cost".
            '''

        })
    '''
    The registered maximum Minimum Load Cost of a Generating Resource registered
    with a Cost Basis of "Bid Cost".
    '''

    maxPumpingLevel: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            max pumping level of a hydro pump unit
            '''

        })
    '''
    max pumping level of a hydro pump unit
    '''

    minimumLoadCostBasis: Optional[ CostBasis ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost basis for minimum load.
            '''

        })
    '''
    The cost basis for minimum load.
    '''

    minimumLoadFuelCost: Optional[ float | CostPerHeatUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost for the fuel required to get a Generating Resource to operate
            at the minimum load level
            '''

        })
    '''
    The cost for the fuel required to get a Generating Resource to operate
    at the minimum load level
    '''

    minimumOperatingLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the minimum operating MW limit the dispatcher can enter for this
            unit.
            '''

        })
    '''
    This is the minimum operating MW limit the dispatcher can enter for
    this unit.
    '''

    minLoadCost: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            minimum load cost. Value is (currency/hr)
            '''

        })
    '''
    minimum load cost. Value is (currency/hr)
    '''

    mustOfferRA: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate that this unit is a resource adequacy resource and must
            offer.
            '''

        })
    '''
    Flag to indicate that this unit is a resource adequacy resource and
    must offer.
    '''

    nameplateCapacity: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW value stated on the nameplate of the Generator -- the value it potentially
            could provide.
            '''

        })
    '''
    MW value stated on the nameplate of the Generator -- the value it potentially
    could provide.
    '''

    operatingMaintenanceCost: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The portion of the Operating Cost of a Generating Resource that is not
            related to fuel cost.
            '''

        })
    '''
    The portion of the Operating Cost of a Generating Resource that is
    not related to fuel cost.
    '''

    pumpingCost: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    quickStartFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Quick start flag (Yes/No). Identifies the registered generator as a quick
            start unit. A quick start unit is a unit that has the ability to be available
            for load within a 30 minute period.
            '''

        })
    '''
    Quick start flag (Yes/No). Identifies the registered generator as a
    quick start unit. A quick start unit is a unit that has the ability
    to be available for load within a 30 minute period.
    '''

    rampCurveType: Optional[ RampCurveType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramp curve type. Identifies the type of curve which may be a fixed, static
            or dynamic.
            '''

        })
    '''
    Ramp curve type. Identifies the type of curve which may be a fixed,
    static or dynamic.
    '''

    regulationDownRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulation down response rate in MW per minute
            '''

        })
    '''
    Regulation down response rate in MW per minute
    '''

    regulationFlag: Optional[ UnitRegulationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies if the unit is regulating or not regulating or expected to be
            regulating but is not.
            '''

        })
    '''
    Specifies if the unit is regulating or not regulating or expected to
    be regulating but is not.
    '''

    regulationUpRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regulation up response rate in MW per minute.
            '''

        })
    '''
    Regulation up response rate in MW per minute.
    '''

    RMNRFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reliability must not run (RMNR) flag: indicated whether the RMR unit is
            set as an RMNR in the current market
            '''

        })
    '''
    Reliability must not run (RMNR) flag: indicated whether the RMR unit
    is set as an RMNR in the current market
    '''

    RMRFlag: Optional[ FlagTypeRMR ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reliability must run (RMR) flag: indicates whether the unit is RMR; Indicates
            whether the unit is RMR:
            N' - not an RMR unit
            '1' - RMR Condition 1 unit
            '2' - RMR Condition 2 unit
            '''

        })
    '''
    Reliability must run (RMR) flag: indicates whether the unit is RMR;
    Indicates whether the unit is RMR:
    N' - not an RMR unit
    '1' - RMR Condition 1 unit
    '2' - RMR Condition 2 unit
    '''

    RMRManualIndicator: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the RMR Manual pre-determination status [Y/N]
            '''

        })
    '''
    Indicates the RMR Manual pre-determination status [Y/N]
    '''

    RMTFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reliability must take (RMT) flag (Yes/No): indicates whether the unit is
            RMT
            '''

        })
    '''
    Reliability must take (RMT) flag (Yes/No): indicates whether the unit
    is RMT
    '''

    spinRampRate: Optional[ float | ActivePowerChangeRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Response rate in MW per minute for spinning reserve.
            '''

        })
    '''
    Response rate in MW per minute for spinning reserve.
    '''

    startUpCostBasis: Optional[ CostBasis ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost basis for start up.
            '''

        })
    '''
    The cost basis for start up.
    '''

    syncCondCapable: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the Resource Synchronous Condenser capable Resource?
            '''

        })
    '''
    Is the Resource Synchronous Condenser capable Resource?
    '''

    unitType: Optional[ UnitType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Generating unit type: Combined Cycle, Gas Turbine, Hydro Turbine, Other,
            Photovoltaic, Hydro Pump-Turbine, Reciprocating Engine, Steam Turbine,
            Synchronous Condenser, Wind Turbine
            '''

        })
    '''
    Generating unit type: Combined Cycle, Gas Turbine, Hydro Turbine, Other,
    Photovoltaic, Hydro Pump-Turbine, Reciprocating Engine, Steam Turbine,
    Synchronous Condenser, Wind Turbine
    '''

    useLimitFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Use limit flag: indicates if the use-limited resource is fully scheduled
            (or has some slack for real-time dispatch) (Y/N)
            '''

        })
    '''
    Use limit flag: indicates if the use-limited resource is fully scheduled
    (or has some slack for real-time dispatch) (Y/N)
    '''

    variableEnergyResource: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides an indication that this resource is intending to participate in
            an intermittent resource program.
            '''

        })
    '''
    Provides an indication that this resource is intending to participate
    in an intermittent resource program.
    '''

    EnergyPriceIndex: Optional[EnergyPriceIndex] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyPriceIndex.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FuelCostCurve: Optional[FuelCostCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelCostCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FuelRegion: Optional[FuelRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelRegion.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LocalReliabilityArea: Optional[LocalReliabilityArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LocalReliabilityArea.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktHeatRateCurve: Optional[MktHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktHeatRateCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegulatingLimit: Optional[RegulatingLimit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulatingLimit.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRHeatRateCurve: Optional[RMRHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRHeatRateCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpCostCurve: Optional[RMRStartUpCostCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpCostCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpEnergyCurve: Optional[RMRStartUpEnergyCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpEnergyCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpFuelCurve: Optional[RMRStartUpFuelCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpFuelCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpTimeCurve: Optional[RMRStartUpTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpTimeCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpEnergyCurve: Optional[StartUpEnergyCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpEnergyCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpFuelCurve: Optional[StartUpFuelCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpFuelCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpTimeCurve: Optional[StartUpTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpTimeCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AuxillaryObject: list[AuxiliaryObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryObject.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    EnergyPriceIndex: Optional[EnergyPriceIndex] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyPriceIndex.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FuelCostCurve: Optional[FuelCostCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelCostCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeneratingBids: list[GeneratingBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneratingBid.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktHeatRateCurve: Optional[MktHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktHeatRateCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRHeatRateCurve: Optional[RMRHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRHeatRateCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpCostCurve: Optional[RMRStartUpCostCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpCostCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpEnergyCurve: Optional[RMRStartUpEnergyCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpEnergyCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpFuelCurve: Optional[RMRStartUpFuelCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpFuelCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RMRStartUpTimeCurve: Optional[RMRStartUpTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RMRStartUpTimeCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegulatingLimit: Optional[RegulatingLimit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegulatingLimit.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpEnergyCurve: Optional[StartUpEnergyCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpEnergyCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpFuelCurve: Optional[StartUpFuelCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpFuelCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StartUpTimeCurve: Optional[StartUpTimeCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'StartUpTimeCurve.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Trade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.RegisteredGenerator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    UnitInitialConditions: list[UnitInitialConditions] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UnitInitialConditions.GeneratingUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CombinedCycleConfiguration(RegisteredGenerator):
    '''
    Configuration options for combined cycle units.
    For example, a Combined Cycle with (CT1, CT2, ST1) will have (CT1, ST1)
    and (CT2, ST1) configurations as part of(1CT + 1STlogicalconfiguration).
    '''

    primaryConfiguration: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Whether this CombinedCycleConfiguration is the primary configuration in
            the associated Logical configuration?
            '''

        })
    '''
    Whether this CombinedCycleConfiguration is the primary configuration
    in the associated Logical configuration?
    '''

    ShutdownFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Whether Combined Cycle Plant can be shut-down in this Configuration?
            '''

        })
    '''
    Whether Combined Cycle Plant can be shut-down in this Configuration?
    '''

    StartupFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Whether Combined Cycle Plant can be started in this Logical Configuration?
            '''

        })
    '''
    Whether Combined Cycle Plant can be started in this Logical Configuration?
    '''

    CombinedCycleLogicalConfiguration: Optional[CombinedCycleLogicalConfiguration] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CombinedCycleLogicalConfiguration.CombinedCycleConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CombinedCycleConfigurationMember: list[CombinedCycleConfigurationMember] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleConfigurationMember.CombinedCycleConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    FromTransitionState: list[CombinedCycleTransitionState] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleTransitionState.FromConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ToTransitionState: list[CombinedCycleTransitionState] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombinedCycleTransitionState.ToConfiguration',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredInterTie(RegisteredResource):
    '''
    This class represents the inter tie resource.
    '''

    minHourlyBlockLimit: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The registered upper bound of minimum hourly block for an Inter-Tie Resource.
            '''

        })
    '''
    The registered upper bound of minimum hourly block for an Inter-Tie
    Resource.
    '''

    direction: Optional[ InterTieDirection ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the direction (export/import) of an InterTie resource.
            '''

        })
    '''
    Indicates the direction (export/import) of an InterTie resource.
    '''

    energyProductType: Optional[ EnergyProductType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Under each major product type, the commodity type can be applied to further
            specify the type.
            '''

        })
    '''
    Under each major product type, the commodity type can be applied to
    further specify the type.
    '''

    isDCTie: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicated whether this Inter-tie is a DC Tie.
            '''

        })
    '''
    Flag to indicated whether this Inter-tie is a DC Tie.
    '''

    isDynamicInterchange: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies whether the inter-tie resource is registered for the dynamic
            interchange.
            '''

        })
    '''
    Specifies whether the inter-tie resource is registered for the dynamic
    interchange.
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Flowgate.RegisteredInterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieBid: Optional[InterTieBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterTieBid.RegisteredInterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieBid: Optional[InterTieBid] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterTieBid.RegisteredInterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieDispatchResponse: list[InterTieDispatchResponse] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterTieDispatchResponse.RegisteredInterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterchangeSchedule: list[InterchangeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterchangeSchedule.RegisteredInterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredLoad(RegisteredResource):
    '''
    Model of a load that is registered to participate in the market.
    RegisteredLoad is used to model any load that is served by the wholesale
    market directly. RegisteredLoads may be dispatchable or non-dispatchable
    and may or may not have bid curves. Examples of RegisteredLoads would include:
    distribution company load, energy retailer load, large bulk power system
    connected facility load.
    Loads that are served indirectly, for example - through an energy retailer
    or a vertical utility, should be modeled as RegisteredDistributedResources.
    Examples of RegisteredDistributedResources would include: distribution
    level storage, distribution level generation and distribution level demand
    response.
    '''

    blockLoadTransfer: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Emergency operating procedure - Flag to indicate that the Resource is Block
            Load pseudo resource.
            '''

        })
    '''
    Emergency operating procedure - Flag to indicate that the Resource
    is Block Load pseudo resource.
    '''

    dynamicallyScheduledLoadResource: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag to indicate that a Load Resource is part of a DSR Load
            '''

        })
    '''
    Flag to indicate that a Load Resource is part of a DSR Load
    '''

    dynamicallyScheduledQualification: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Qualification status (used for DSR qualification).
            '''

        })
    '''
    Qualification status (used for DSR qualification).
    '''

    AuxillaryObject: list[AuxiliaryObject] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryObject.RegisteredLoad',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LoadBids: list[LoadBid] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LoadBid.RegisteredLoad',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@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-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 move the tap position in circles (hunting)
    that is to be used regardless of the attributes minAllowedTargetValue and
    maxAllowedTargetValue.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed target value (RegulatingControl.targetValue).
            '''

        })
    '''
    Maximum allowed target value (RegulatingControl.targetValue).
    '''

    minAllowedTargetValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum allowed target value (RegulatingControl.targetValue).
            '''

        })
    '''
    Minimum allowed target value (RegulatingControl.targetValue).
    '''

    targetDeadband: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is a deadband used with discrete control to avoid excessive update
            of controls like tap changers and shunt compensator banks while regulating.
            The units of those appropriate for the mode. The attribute shall be a positive
            value or zero. If RegulatingControl.discrete is set to "false", the RegulatingControl.targetDeadband
            is to be ignored.
            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 a deadband used with discrete control to avoid excessive update
    of controls like tap changers and shunt compensator banks while regulating.
    The units of those appropriate for the mode. The attribute shall be
    a positive value or zero. If RegulatingControl.discrete is set to "false",
    the RegulatingControl.targetDeadband is to be ignored.
    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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The target value specified for case input. This value can be used for the
            target value without the use of schedules. The value has the units appropriate
            to the mode attribute.
            '''

        })
    '''
    The target value specified for case input. This value can be used for
    the target value without the use of schedules. The value has the units
    appropriate to the mode attribute.
    '''

    mode: Optional[ RegulatingControlModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specify the multiplier for used for the targetValue.
            '''

        })
    '''
    Specify the multiplier for used for the targetValue.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Terminal.RegulatingControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ProtectiveActionRegulation: list[ProtectiveActionRegulation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveActionRegulation.RegulatingControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Enable/disable a regulating control or set new target value.
            '''

        })
    '''
    Enable/disable a regulating control or set new target value.
    '''

    RegulatingCondEq: list[RegulatingCondEq] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RegulatingCondEq.RegulatingControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Schedule for this regulating control.
            '''

        })
    '''
    Schedule for this regulating control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    branchDirect: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For VAR, amp, or power factor locally controlled shunt impedances, the
            flow direction: in, out.
            '''

        })
    '''
    For VAR, amp, or power factor locally controlled shunt impedances,
    the flow direction: in, out.
    '''

    localOffLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Upper control setting.
            '''

        })
    '''
    Upper control setting.
    '''

    localOnLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lower control setting.
            '''

        })
    '''
    Lower control setting.
    '''

    localOverride: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the locally controlled capacitor has voltage override capability.
            '''

        })
    '''
    True if the locally controlled capacitor has voltage override capability.
    '''

    maxSwitchOperationCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            IdmsShuntImpedanceData.maxNumSwitchOps.
            '''

        })
    '''
    IdmsShuntImpedanceData.maxNumSwitchOps.
    '''

    normalOpen: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if open is normal status for a fixed capacitor bank, otherwise normal
            status is closed.
            '''

        })
    '''
    True if open is normal status for a fixed capacitor bank, otherwise
    normal status is closed.
    '''

    regBranch: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For VAR, amp, or power factor locally controlled shunt impedances, the
            index of the regulation branch.
            '''

        })
    '''
    For VAR, amp, or power factor locally controlled shunt impedances,
    the index of the regulation branch.
    '''

    regBranchEnd: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For VAR, amp, or power factor locally controlled shunt impedances, the
            end of the branch that is regulated. The field has the following values:
            from side, to side, and tertiary (only if the branch is a transformer).
            '''

        })
    '''
    For VAR, amp, or power factor locally controlled shunt impedances,
    the end of the branch that is regulated. The field has the following
    values: from side, to side, and tertiary (only if the branch is a transformer).
    '''

    vRegLineLine: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if regulated voltages are measured line to line, otherwise they are
            measured line to ground.
            '''

        })
    '''
    True if regulated voltages are measured line to line, otherwise they
    are measured line to ground.
    '''

    cellSize: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The size of the individual units that make up the bank.
            '''

        })
    '''
    The size of the individual units that make up the bank.
    '''

    controlKind: Optional[ ShuntImpedanceControlKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of control (if any).
            '''

        })
    '''
    Kind of control (if any).
    '''

    highVoltageOverride: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For locally controlled shunt impedances which have a voltage override feature,
            the high voltage override value. If the voltage is above this value, the
            shunt impedance will be turned off regardless of the other local controller
            settings.
            '''

        })
    '''
    For locally controlled shunt impedances which have a voltage override
    feature, the high voltage override value. If the voltage is above this
    value, the shunt impedance will be turned off regardless of the other
    local controller settings.
    '''

    localControlKind: Optional[ ShuntImpedanceLocalControlKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of local controller.
            '''

        })
    '''
    Kind of local controller.
    '''

    lowVoltageOverride: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For locally controlled shunt impedances which have a voltage override feature,
            the low voltage override value. If the voltage is below this value, the
            shunt impedance will be turned on regardless of the other local controller
            settings.
            '''

        })
    '''
    For locally controlled shunt impedances which have a voltage override
    feature, the low voltage override value. If the voltage is below this
    value, the shunt impedance will be turned on regardless of the other
    local controller settings.
    '''

    regBranchKind: Optional[ RegulationBranchKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (For VAR, amp, or power factor locally controlled shunt impedances) Kind
            of regulation branch.
            '''

        })
    '''
    (For VAR, amp, or power factor locally controlled shunt impedances)
    Kind of regulation branch.
    '''

    sensingPhaseCode: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phases that are measured for controlling the device.
            '''

        })
    '''
    Phases that are measured for controlling the device.
    '''

    switchOperationCycle: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time interval between consecutive switching operations.
            '''

        })
    '''
    Time interval between consecutive switching operations.
    '''

    ShuntCompensatorInfo: Optional[ShuntCompensatorInfo] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorInfo.ShuntCompensatorControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ShuntCompensatorInfo: Optional[ShuntCompensatorInfo] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensatorInfo.ShuntCompensatorControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    lineDropCompensation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the line drop compensation is to be applied.
            '''

        })
    '''
    If true, the line drop compensation is to be applied.
    '''

    limitVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum allowed regulated voltage on the PT secondary, regardless of line
            drop compensation. Sometimes referred to as first-house protection.
            '''

        })
    '''
    Maximum allowed regulated voltage on the PT secondary, regardless of
    line drop compensation. Sometimes referred to as first-house protection.
    '''

    lineDropR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator reactance setting for normal (forward) power flow.
            '''

        })
    '''
    Line drop compensator reactance setting for normal (forward) power
    flow.
    '''

    reverseLineDropR: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Line drop compensator reactance setting for reverse power flow.
            '''

        })
    '''
    Line drop compensator reactance setting for reverse power flow.
    '''

    TapChanger: list[TapChanger] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TapChanger.TapChangerControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class RemedialActionScheme(PowerSystemResource):
    '''
    Remedial Action Scheme (RAS), Special Protection Schemes (SPS), System
    Protection Schemes (SPS) or System Integrity Protection Schemes (SIPS).
    '''

    armed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The status of the class set by operation or by signal. Optional field that
            will override other status fields.
            '''

        })
    '''
    The status of the class set by operation or by signal. Optional field
    that will override other status fields.
    '''

    normalArmed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The default/normal value used when other active signal/values are missing.
            '''

        })
    '''
    The default/normal value used when other active signal/values are missing.
    '''

    kind: Optional[ RemedialActionSchemeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of Remedial Action Scheme (RAS).
            '''

        })
    '''
    Kind of Remedial Action Scheme (RAS).
    '''

    GateArmed: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.RemedialActionScheme',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gate that through a gate logic and input pin defines arming of the Remedial
            Action Schemes (RAS).
            '''

        })
    '''
    Gate that through a gate logic and input pin defines arming of the
    Remedial Action Schemes (RAS).
    '''

    Stage: list[Stage] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Stage.RemedialActionScheme',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A Remedial Action Scheme (RAS) consist of one or more stage that are trigger
            and execute protection action.
            '''

        })
    '''
    A Remedial Action Scheme (RAS) consist of one or more stage that are
    trigger and execute protection action.
    '''

    TriggerCondition: list[TriggerCondition] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TriggerCondition.RemedialActionScheme',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Triggering of the Remedial Action Schemes (RAS).
            '''

        })
    '''
    Triggering of the Remedial Action Schemes (RAS).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class RemoteUnit(PowerSystemResource):
    '''
    A remote unit can be an RTU, IED, substation control system, control centre,
    etc. The communication with the remote unit can be through various standard
    protocols (e.g. IEC 61870, IEC 61850) or non standard protocols (e.g. DNP,
    RP570, etc.). A remote unit contains remote data points that might be telemetered,
    collected or calculated. The RemoteUnit class inherits PowerSystemResource.
    The intention is to allow RemoteUnits to have Measurements. These Measurements
    can be used to model unit status as operational, out of service, unit failure,
    etc.
    '''

    remoteUnitType: Optional[ RemoteUnitType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of remote unit.
            '''

        })
    '''
    Type of remote unit.
    '''

    RemotePoints: list[RemotePoint] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'RemotePoint.RemoteUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Remote points this Remote unit contains.
            '''

        })
    '''
    Remote points this Remote unit contains.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SCADA'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    fullSupplyLevel: Optional[ float | WaterLevel ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorPhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shunt compensator of this shunt compensator phase.
            '''

        })
    '''
    Shunt compensator of this shunt compensator phase.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 g and b 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SteamSupply(PowerSystemResource):
    '''
    Steam supply for steam turbine.
    '''

    steamSupplyRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rating of steam supply.
            '''

        })
    '''
    Rating of steam supply.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BWRSteamSupply(SteamSupply):
    '''
    Boiling water reactor used as a steam supply to a steam turbine.
    '''

    integralGain: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain.
            '''

        })
    '''
    Integral gain.
    '''

    pressureSetpointGA: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure setpoint gain adjuster.
            '''

        })
    '''
    Pressure setpoint gain adjuster.
    '''

    proportionalGain: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain.
            '''

        })
    '''
    Proportional gain.
    '''

    rodPatternConstant: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Constant associated with rod pattern.
            '''

        })
    '''
    Constant associated with rod pattern.
    '''

    highPowerLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High power limit.
            '''

        })
    '''
    High power limit.
    '''

    inCoreThermalTC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            In-core thermal time constant.
            '''

        })
    '''
    In-core thermal time constant.
    '''

    lowerLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Initial lower limit.
            '''

        })
    '''
    Initial lower limit.
    '''

    lowPowerLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Low power limit.
            '''

        })
    '''
    Low power limit.
    '''

    pressureLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure limit.
            '''

        })
    '''
    Pressure limit.
    '''

    pressureSetpointTC1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure setpoint time constant.
            '''

        })
    '''
    Pressure setpoint time constant.
    '''

    pressureSetpointTC2: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure setpoint time constant.
            '''

        })
    '''
    Pressure setpoint time constant.
    '''

    rfAux1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux3: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux4: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux5: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux6: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux7: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rfAux8: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for modelling the effect of off-nominal frequency and voltage
            on recirculation and core flow, which affects the BWR power output.
            '''

        })
    '''
    Coefficient for modelling the effect of off-nominal frequency and voltage
    on recirculation and core flow, which affects the BWR power output.
    '''

    rodPattern: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rod pattern.
            '''

        })
    '''
    Rod pattern.
    '''

    upperLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Initial upper limit.
            '''

        })
    '''
    Initial upper limit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class FossilSteamSupply(SteamSupply):
    '''
    Fossil fuelled boiler (e.g., coal, oil, gas).
    '''

    controlErrorBiasP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power error bias ratio.
            '''

        })
    '''
    Active power error bias ratio.
    '''

    controlIC: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral constant.
            '''

        })
    '''
    Integral constant.
    '''

    controlPC: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional constant.
            '''

        })
    '''
    Proportional constant.
    '''

    controlPEB: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure error bias ratio.
            '''

        })
    '''
    Pressure error bias ratio.
    '''

    controlTC: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant.
            '''

        })
    '''
    Time constant.
    '''

    feedWaterIG: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedwater integral gain ratio.
            '''

        })
    '''
    Feedwater integral gain ratio.
    '''

    feedWaterPG: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedwater proportional gain ratio.
            '''

        })
    '''
    Feedwater proportional gain ratio.
    '''

    maxErrorRateP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power maximum error rate limit.
            '''

        })
    '''
    Active power maximum error rate limit.
    '''

    minErrorRateP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power minimum error rate limit.
            '''

        })
    '''
    Active power minimum error rate limit.
    '''

    pressureCtrlDG: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure control derivative gain ratio.
            '''

        })
    '''
    Pressure control derivative gain ratio.
    '''

    pressureCtrlIG: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure control integral gain ratio.
            '''

        })
    '''
    Pressure control integral gain ratio.
    '''

    pressureCtrlPG: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure control proportional gain ratio.
            '''

        })
    '''
    Pressure control proportional gain ratio.
    '''

    pressureFeedback: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure feedback indicator.
            '''

        })
    '''
    Pressure feedback indicator.
    '''

    superHeater1Capacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Drum/primary superheater capacity.
            '''

        })
    '''
    Drum/primary superheater capacity.
    '''

    superHeater2Capacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Secondary superheater capacity.
            '''

        })
    '''
    Secondary superheater capacity.
    '''

    superHeaterPipePD: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Superheater pipe pressure drop constant.
            '''

        })
    '''
    Superheater pipe pressure drop constant.
    '''

    auxPowerVersusFrequency: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Off nominal frequency effect on auxiliary real power. Per unit active power
            variation versus per unit frequency variation.
            '''

        })
    '''
    Off nominal frequency effect on auxiliary real power. Per unit active
    power variation versus per unit frequency variation.
    '''

    auxPowerVersusVoltage: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Off nominal voltage effect on auxiliary real power. Per unit active power
            variation versus per unit voltage variation.
            '''

        })
    '''
    Off nominal voltage effect on auxiliary real power. Per unit active
    power variation versus per unit voltage variation.
    '''

    boilerControlMode: Optional[ BoilerControlMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The control mode of the boiler.
            '''

        })
    '''
    The control mode of the boiler.
    '''

    controlPED: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure error deadband.
            '''

        })
    '''
    Pressure error deadband.
    '''

    feedWaterTC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedwater time constant ratio.
            '''

        })
    '''
    Feedwater time constant ratio.
    '''

    fuelDemandLimit: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel demand limit.
            '''

        })
    '''
    Fuel demand limit.
    '''

    fuelSupplyDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel delay.
            '''

        })
    '''
    Fuel delay.
    '''

    fuelSupplyTC: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Fuel supply time constant.
            '''

        })
    '''
    Fuel supply time constant.
    '''

    mechPowerSensorLag: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mechanical power sensor lag.
            '''

        })
    '''
    Mechanical power sensor lag.
    '''

    throttlePressureSP: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Throttle pressure setpoint.
            '''

        })
    '''
    Throttle pressure setpoint.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DrumBoiler(FossilSteamSupply):
    '''
    Drum boiler.
    '''

    drumBoilerRating: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rating of drum boiler in steam units.
            '''

        })
    '''
    Rating of drum boiler in steam units.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class HeatRecoveryBoiler(FossilSteamSupply):
    '''
    The heat recovery system associated with combustion turbines in order to
    produce steam for combined cycle plants.
    '''

    steamSupplyRating2: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The steam supply rating in kilopounds per hour, if dual pressure boiler.
            '''

        })
    '''
    The steam supply rating in kilopounds per hour, if dual pressure boiler.
    '''

    CombustionTurbines: list[CombustionTurbine] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CombustionTurbine.HeatRecoveryBoiler',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A combustion turbine may have a heat recovery boiler for making steam.
            '''

        })
    '''
    A combustion turbine may have a heat recovery boiler for making steam.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Subcritical(FossilSteamSupply):
    '''
    Once-through subcritical boiler.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Supercritical(FossilSteamSupply):
    '''
    Once-through supercritical boiler.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PWRSteamSupply(SteamSupply):
    '''
    Pressurized water reactor used as a steam supply to a steam turbine.
    '''

    coldLegFBLagTC: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg feedback lag time constant.
            '''

        })
    '''
    Cold leg feedback lag time constant.
    '''

    coldLegFBLeadTC1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg feedback lead time constant.
            '''

        })
    '''
    Cold leg feedback lead time constant.
    '''

    coldLegFBLeadTC2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg feedback lead time constant.
            '''

        })
    '''
    Cold leg feedback lead time constant.
    '''

    coldLegFG1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg feedback gain 1.
            '''

        })
    '''
    Cold leg feedback gain 1.
    '''

    coldLegFG2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg feedback gain 2.
            '''

        })
    '''
    Cold leg feedback gain 2.
    '''

    coldLegLagTC: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cold leg lag time constant.
            '''

        })
    '''
    Cold leg lag time constant.
    '''

    coreHTLagTC1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Core heat transfer lag time constant.
            '''

        })
    '''
    Core heat transfer lag time constant.
    '''

    coreHTLagTC2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Core heat transfer lag time constant.
            '''

        })
    '''
    Core heat transfer lag time constant.
    '''

    coreNeutronicsEffTC: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Core neutronics effective time constant.
            '''

        })
    '''
    Core neutronics effective time constant.
    '''

    coreNeutronicsHT: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Core neutronics and heat transfer.
            '''

        })
    '''
    Core neutronics and heat transfer.
    '''

    feedbackFactor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Feedback factor.
            '''

        })
    '''
    Feedback factor.
    '''

    hotLegLagTC: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hot leg lag time constant.
            '''

        })
    '''
    Hot leg lag time constant.
    '''

    hotLegSteamGain: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hot leg steam gain.
            '''

        })
    '''
    Hot leg steam gain.
    '''

    hotLegToColdLegGain: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hot leg to cold leg gain.
            '''

        })
    '''
    Hot leg to cold leg gain.
    '''

    pressureCG: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pressure control gain.
            '''

        })
    '''
    Pressure control gain.
    '''

    steamFlowFG: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam flow feedback gain.
            '''

        })
    '''
    Steam flow feedback gain.
    '''

    steamPressureDropLagTC: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam pressure drop lag time constant.
            '''

        })
    '''
    Steam pressure drop lag time constant.
    '''

    steamPressureFG: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Steam pressure feedback gain.
            '''

        })
    '''
    Steam pressure feedback gain.
    '''

    throttlePressureFactor: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Throttle pressure factor.
            '''

        })
    '''
    Throttle pressure factor.
    '''

    throttlePressureSP: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Throttle pressure setpoint.
            '''

        })
    '''
    Throttle pressure setpoint.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'GenerationTrainingSimulation'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class SubControlArea(PowerSystemResource):
    '''
    An area defined for the purpose of tracking interchange with surrounding
    areas via tie points; may or may not serve as a control area.
    '''

    areaShortName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market area short name, which is the regulation zone. It references AGC
            regulation zone name.
            '''

        })
    '''
    Market area short name, which is the regulation zone. It references
    AGC regulation zone name.
    '''

    constantCoefficient: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss estimate constant coefficient
            '''

        })
    '''
    Loss estimate constant coefficient
    '''

    linearCoefficient: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss estimate linear coefficient
            '''

        })
    '''
    Loss estimate linear coefficient
    '''

    maxSelfSchedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum amount of self schedule MWs allowed for an embedded control area.
            '''

        })
    '''
    Maximum amount of self schedule MWs allowed for an embedded control
    area.
    '''

    minSelfSchedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum amount of self schedule MW allowed for an embedded control area.
            '''

        })
    '''
    Minimum amount of self schedule MW allowed for an embedded control
    area.
    '''

    quadraticCoefficient: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss estimate quadratic coefficient
            '''

        })
    '''
    Loss estimate quadratic coefficient
    '''

    embeddedControlArea: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used in conjunction with the InternalCA flag. If the InternalCA flag is
            YES, this flag does not apply. If the InternaCA flag is NO, this flag provides
            an indication of AdjacentCA (NO) or Embedded CA (YES).
            '''

        })
    '''
    Used in conjunction with the InternalCA flag. If the InternalCA flag
    is YES, this flag does not apply. If the InternaCA flag is NO, this
    flag provides an indication of AdjacentCA (NO) or Embedded CA (YES).
    '''

    internalCA: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A Yes/No indication that this control area is contained internal to the
            system.
            '''

        })
    '''
    A Yes/No indication that this control area is contained internal to
    the system.
    '''

    localCA: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that this control area is the local control area.
            '''

        })
    '''
    Indication that this control area is the local control area.
    '''

    AdjacentCASet: Optional[AdjacentCASet] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AdjacentCASet.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AreaReserveSpecification: Optional[AreaReserveSpec] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AreaReserveSpec.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.SubControlAreas',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The interchange area may operate as a control area
            '''

        })
    '''
    The interchange area may operate as a control area
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSelfSched: list[BidSelfSched] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidSelfSched.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CnodeDistributionFactor: list[CnodeDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CnodeDistributionFactor.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Receive_DynamicSchedules: list[DynamicSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DynamicSchedule.Receive_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A control area can receive dynamic schedules from other control areas
            '''

        })
    '''
    A control area can receive dynamic schedules from other control areas
    '''

    Send_DynamicSchedules: list[DynamicSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DynamicSchedule.Send_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A control area can send dynamic schedules to other control areas
            '''

        })
    '''
    A control area can send dynamic schedules to other control areas
    '''

    Export_EnergyTransactions: list[EnergyTransaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyTransaction.Export_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Energy is transferred between interchange areas
            '''

        })
    '''
    Energy is transferred between interchange areas
    '''

    Import_EnergyTransactions: list[EnergyTransaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnergyTransaction.Import_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Energy is transferred between interchange areas
            '''

        })
    '''
    Energy is transferred between interchange areas
    '''

    ExPostLossResults: list[ExPostLossResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ExPostLossResults.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    From_Flowgate: list[Flowgate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Flowgate.From_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    To_Flowgate: list[Flowgate] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Flowgate.To_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeneralClearingResults: list[GeneralClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'GeneralClearingResults.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InadvertentAccount: list[InadvertentAccount] = field(
        default_factory=list,
        metadata={
        'type': 'informative AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InadvertentAccount.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A control area can have one or more net inadvertent interchange accounts
            '''

        })
    '''
    A control area can have one or more net inadvertent interchange accounts
    '''

    LossClearingResults: list[LossClearingResults] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LossClearingResults.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: list[Pnode] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Pnode.SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SideA_TieLines: list[TieLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieLine.SideA_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The SubControlArea is on the A side of a collection of metered points which
            define the SubControlArea's boundary for a ControlAreaOperator or CustomerConsumer.
            '''

        })
    '''
    The SubControlArea is on the A side of a collection of metered points
    which define the SubControlArea's boundary for a ControlAreaOperator
    or CustomerConsumer.
    '''

    SideB_TieLines: list[TieLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TieLine.SideB_SubControlArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The SubControlArea is on the B side of a collection of metered points which
            define the SubControlArea's boundary for a ControlAreaOperator or CustomerConsumer.
            '''

        })
    '''
    The SubControlArea is on the B side of a collection of metered points
    which define the SubControlArea's boundary for a ControlAreaOperator
    or CustomerConsumer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phaseSide1: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    Switch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchPhase',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switch of the switch phase.
            '''

        })
    '''
    The switch of the switch phase.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    highStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    step: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The tap step state associated with the tap changer.
            '''

        })
    '''
    The tap step state associated with the tap changer.
    '''

    TapChangerControl: Optional[TapChangerControl] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TapChangerControl.TapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The regulating control scheme in which this tap changer participates.
            '''

        })
    '''
    The regulating control scheme in which this tap changer participates.
    '''

    SvTapStep: Optional[SvTapStep] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SvTapStep.TapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A TapChanger can have TapSchedules.
            '''

        })
    '''
    A TapChanger can have TapSchedules.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MktTapChanger(TapChanger):
    '''
    Subclass of IEC 61970:Wires:TapChanger.
    '''

    TapChangerDynamicData: list[TapChangerDynamicData] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TapChangerDynamicData.MktTapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.PhaseTapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    xMin: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reactance depends on the tap position according to a "u" shaped curve.
            The minimum reactance (xMin) appears at the mid tap position. PowerTransformerEnd.x
            shall be consistent with PhaseTapChangerLinear.xMin and PhaseTapChangerNonLinear.xMin.
            In case of inconsistency, PowerTransformerEnd.x shall be used.
            '''

        })
    '''
    The reactance depends on the tap position according to a "u" shaped
    curve. The minimum reactance (xMin) appears at the mid tap position.
    PowerTransformerEnd.x shall be consistent with PhaseTapChangerLinear.xMin
    and PhaseTapChangerNonLinear.xMin. In case of inconsistency, PowerTransformerEnd.x
    shall be used.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    xMin: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reactance depend on the tap position according to a "u" shaped curve.
            The minimum reactance (xMin) appear at the mid tap position. PowerTransformerEnd.x
            shall be consistent with PhaseTapChangerLinear.xMin and PhaseTapChangerNonLinear.xMin.
            In case of inconsistency, PowerTransformerEnd.x shall be used.
            '''

        })
    '''
    The reactance depend on the tap position according to a "u" shaped
    curve. The minimum reactance (xMin) appear at the mid tap position.
    PowerTransformerEnd.x shall be consistent with PhaseTapChangerLinear.xMin
    and PhaseTapChangerNonLinear.xMin. In case of inconsistency, PowerTransformerEnd.x
    shall be used.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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.
    '''

    tculControlMode: Optional[ TransformerControlMode ] = field(
        default=None,
        metadata={
        'type': 'enumeration deprecated Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the regulation control mode (voltage or reactive) of the RatioTapChanger.
            '''

        })
    '''
    Specifies the regulation control mode (voltage or reactive) of the
    RatioTapChanger.
    '''

    RatioTapChangerTable: Optional[RatioTapChangerTable] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RatioTapChangerTable.RatioTapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.RatioTapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transformer end to which this ratio tap changer belongs.
            '''

        })
    '''
    Transformer end to which this ratio tap changer belongs.
    '''

    TransformerEnd: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.RatioTapChanger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TransmissionCorridor(PowerSystemResource):
    '''
    A corridor containing one or more rights of way
    '''

    ContainedIn: list[TransmissionPath] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionPath.For',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A TransmissionPath is contained in a TransmissionCorridor.
            '''

        })
    '''
    A TransmissionPath is contained in a TransmissionCorridor.
    '''

    TransmissionRightOfWays: list[TransmissionRightOfWay] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionRightOfWay.TransmissionCorridor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A transmission right-of-way is a member of a transmission corridor
            '''

        })
    '''
    A transmission right-of-way is a member of a transmission corridor
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @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.
    '''

    TransmissionCorridor: Optional[TransmissionCorridor] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransmissionCorridor.TransmissionRightOfWays',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A transmission right-of-way is a member of a transmission corridor
            '''

        })
    '''
    A transmission right-of-way is a member of a transmission corridor
    '''

    MktLine: list[MktLine] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktLine.TransmissionRightOfWay',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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': '1',
        'maxOccurs': '1',
        'inverse': 'BusbarSection.VoltageControlZone',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WeatherStation(PowerSystemResource):
    '''
    This represents a source of ambient temperature.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'WireSegment.WireSegmentPhases',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Process(IdentifiedObject):
    '''
    The formal specification of a set of business transactions having the same
    business goal.
    '''

    classificationType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The classification mechanism used to group a set of objects together within
            a business process. The grouping may be of a detailed or a summary nature.
            '''

        })
    '''
    The classification mechanism used to group a set of objects together
    within a business process. The grouping may be of a detailed or a summary
    nature.
    '''

    processType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The kind of business process.
            '''

        })
    '''
    The kind of business process.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ProductAssetModel(IdentifiedObject):
    '''
    Asset model by a specific manufacturer.
    '''

    catalogueNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Catalogue number for asset model.
            '''

        })
    '''
    Catalogue number for asset model.
    '''

    drawingNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Drawing number for asset model.
            '''

        })
    '''
    Drawing number for asset model.
    '''

    instructionManual: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference manual or instruction book for this asset model.
            '''

        })
    '''
    Reference manual or instruction book for this asset model.
    '''

    modelNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Manufacturer's model number.
            '''

        })
    '''
    Manufacturer's model number.
    '''

    modelVersion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Version number for product model, which indicates vintage of the product.
            '''

        })
    '''
    Version number for product model, which indicates vintage of the product.
    '''

    styleNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Style number of asset model.
            '''

        })
    '''
    Style number of asset model.
    '''

    corporateStandardKind: Optional[ CorporateStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of corporate standard for this asset model.
            '''

        })
    '''
    Kind of corporate standard for this asset model.
    '''

    overallLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overall length of this asset model.
            '''

        })
    '''
    Overall length of this asset model.
    '''

    usageKind: Optional[ AssetModelUsageKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Intended usage for this asset model.
            '''

        })
    '''
    Intended usage for this asset model.
    '''

    weightTotal: Optional[ float | Mass ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total manufactured weight of asset.
            '''

        })
    '''
    Total manufactured weight of asset.
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ProductAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset information (nameplate) for this product asset model.
            '''

        })
    '''
    Asset information (nameplate) for this product asset model.
    '''

    CatalogAssetType: Optional[CatalogAssetType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CatalogAssetType.ProductAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Catalog asset type to which this product asset model conforms.
            '''

        })
    '''
    Catalog asset type to which this product asset model conforms.
    '''

    Manufacturer: Optional[Manufacturer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Manufacturer.ProductAssetModels',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Manufacturer of this asset model.
            '''

        })
    '''
    Manufacturer of this asset model.
    '''

    Asset: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.ProductAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An asset of this model.
            '''

        })
    '''
    An asset of this model.
    '''

    AssetInfo: Optional[AssetInfo] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetInfo.ProductAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Asset information (nameplate) for this product asset model.
            '''

        })
    '''
    Asset information (nameplate) for this product asset model.
    '''

    AssetModelCatalogueItems: list[AssetModelCatalogueItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetModelCatalogueItem.AssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    OperationalRestrictions: list[OperationalRestriction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OperationalRestriction.ProductAssetModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All operational restrictions applying to this asset model.
            '''

        })
    '''
    All operational restrictions applying to this asset model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProductBid(IdentifiedObject):
    '''
    Component of a bid that pertains to one market product.
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Bid.ProductBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A bid comprises one or more product bids of market products
            '''

        })
    '''
    A bid comprises one or more product bids of market products
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.ProductBids',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidDistributionFactor: list[BidDistributionFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidDistributionFactor.ProductBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidHourlyProductSchedule: list[BidHourlyProductSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidHourlyProductSchedule.ProductBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSchedule: list[BidPriceSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidPriceSchedule.ProductBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidSelfSched: list[BidSelfSched] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BidSelfSched.ProductBid',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Profile(IdentifiedObject):
    '''
    A profile is a simpler curve type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class ChargeProfile(Profile):
    '''
    A type of profile for financial charges.
    '''

    frequency: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The calculation frequency, daily or monthly.
            '''

        })
    '''
    The calculation frequency, daily or monthly.
    '''

    numberInterval: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The number of intervals in the profile data.
            '''

        })
    '''
    The number of intervals in the profile data.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of profile. It could be amount, price, or quantity.
            '''

        })
    '''
    The type of profile. It could be amount, price, or quantity.
    '''

    unitOfMeasure: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure applied to the value attribute of the profile data.
            '''

        })
    '''
    The unit of measure applied to the value attribute of the profile data.
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bid.ChargeProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BillDeterminant: Optional[BillDeterminant] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BillDeterminant.ChargeProfile',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PassTroughBill: Optional[PassThroughBill] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PassThroughBill.ChargeProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BillDeterminant: Optional[BillDeterminant] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BillDeterminant.ChargeProfile',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChargeProfileData: list[ChargeProfileData] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ChargeProfileData.ChargeProfile',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CurtailmentProfile(Profile):
    '''
    Curtailing entity must be providing at least one service to the EnergyTransaction.
    The CurtailmentProfile must be completely contained within the EnergyProfile
    timeframe for this EnergyTransaction.
    '''

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.CurtailmentProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An EnergyTransaction may be curtailed by any of the participating entities.
            '''

        })
    '''
    An EnergyTransaction may be curtailed by any of the participating entities.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class EnergyProfile(Profile):
    '''
    Specifies the start time, stop time, level for an EnergyTransaction.
    '''

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.EnergyProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An EnergyTransaction shall have at least one EnergyProfile.
            '''

        })
    '''
    An EnergyTransaction shall have at least one EnergyProfile.
    '''

    TransactionBid: Optional[TransactionBid] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransactionBid.EnergyProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LossProfile(Profile):
    '''
    LossProfile is associated with an EnerrgyTransaction and must be completely
    contained within the time frame of the EnergyProfile associated with this
    EnergyTransaction.
    '''

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.LossProfiles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An EnergyTransaction may have a LossProfile.
            '''

        })
    '''
    An EnergyTransaction may have a LossProfile.
    '''

    HasLoss_: Optional[TransmissionProvider] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransmissionProvider.For',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of the LossProfile for an EnergyTransaction may be a loss for a TransmissionProvider.
            If so, the TransmissionProvider must be one of the participating entities
            in the EnergyTransaction.
            '''

        })
    '''
    Part of the LossProfile for an EnergyTransaction may be a loss for
    a TransmissionProvider. If so, the TransmissionProvider must be one
    of the participating entities in the EnergyTransaction.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectiveAction(IdentifiedObject):
    '''
    A protective action for supporting the integrity of the power system.
    '''

    enabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The status of the class set by operation or by signal. Optional field that
            will override other status fields.
            '''

        })
    '''
    The status of the class set by operation or by signal. Optional field
    that will override other status fields.
    '''

    normalEnabled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The default/normal value used when other active signal/values are missing.
            '''

        })
    '''
    The default/normal value used when other active signal/values are missing.
    '''

    GateComCondition: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.ProtectiveActionCom',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GateEnabledCondition: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.ProtectiveActionEnabled',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Association to a Gate that through a gate logic and input pin defines enabling
            of the ProtectiveAction.
            '''

        })
    '''
    Association to a Gate that through a gate logic and input pin defines
    enabling of the ProtectiveAction.
    '''

    ProtectionEquipment: Optional[ProtectionEquipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ProtectionEquipment.ProtectiveAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ProtectiveActionCollection: Optional[ProtectiveActionCollection] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProtectiveActionCollection.ProtectiveAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectiveActionAdjustment(ProtectiveAction):
    '''
    Protective actions on non-switching equipment. The operating condition
    is adjusted.
    '''

    byValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The adjustment is given in value of the active value.
            '''

        })
    '''
    The adjustment is given in value of the active value.
    '''

    reduce: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the adjusted value is an reduction. Other wise it is an increase
            in the value.
            '''

        })
    '''
    If true, the adjusted value is an reduction. Other wise it is an increase
    in the value.
    '''

    setValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The adjustment is given by a new active value.
            '''

        })
    '''
    The adjustment is given by a new active value.
    '''

    byPercentage: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The adjustment is given in percent of the active value.
            '''

        })
    '''
    The adjustment is given in percent of the active value.
    '''

    kind: Optional[ ProtectiveActionAdjustmentKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Defines the kind of adjustment that should be done. With this value the
            correct attribute containing the value needs to be used.
            '''

        })
    '''
    Defines the kind of adjustment that should be done. With this value
    the correct attribute containing the value needs to be used.
    '''

    ConductingEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.ProtectiveActionAdjustment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ConductingEquipment whose operating condition is changed when this protective
            action adjustment gets activated.
            '''

        })
    '''
    ConductingEquipment whose operating condition is changed when this
    protective action adjustment gets activated.
    '''

    DCConductingEquipment: Optional[DCConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DCConductingEquipment.ProtectiveActionAdjustment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The operating condition to the Conducting Equipment is changed when protective
            action adjustment is activated.
            '''

        })
    '''
    The operating condition to the Conducting Equipment is changed when
    protective action adjustment is activated.
    '''

    Measurement: Optional[Measurement] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Measurement.ProtectiveActionAdjustment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The measurement is used to control the operation of an equipment.
            '''

        })
    '''
    The measurement is used to control the operation of an equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectiveActionEquipment(ProtectiveAction):
    '''
    Protective action to put an Equipment in-service/out-of-service.
    '''

    inService: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true the equipment is put in-service, otherwise out-of-service.
            '''

        })
    '''
    If true the equipment is put in-service, otherwise out-of-service.
    '''

    Equipment: Optional[Equipment] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Equipment.ProtectiveActionEquipment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProtectiveActionRegulation(ProtectiveAction):
    '''
    Protective action to change regulation to Equipment.
    '''

    isRegulating: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true the regulator is put in-service, otherwise out-of-service (no regulation).
            '''

        })
    '''
    If true the regulator is put in-service, otherwise out-of-service (no
    regulation).
    '''

    targetValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The target value specified the new case input for the regulator. The value
            has the units appropriate to the mode attribute. The protective action
            does not change the mode attribute.
            '''

        })
    '''
    The target value specified the new case input for the regulator. The
    value has the units appropriate to the mode attribute. The protective
    action does not change the mode attribute.
    '''

    RegulatingControl: Optional[RegulatingControl] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegulatingControl.ProtectiveActionRegulation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ProtectiveActionCollection(IdentifiedObject):
    '''
    A collection of protective actions to protect the integrity of the power
    system.
    '''

    ProtectiveAction: list[ProtectiveAction] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ProtectiveAction.ProtectiveActionCollection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Set of ProtectiveAction belonging to a ProtectiveActionCollection.
            '''

        })
    '''
    Set of ProtectiveAction belonging to a ProtectiveActionCollection.
    '''

    StageTrigger: list[StageTrigger] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StageTrigger.ProtectiveActionCollection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            When condition to the StageTrigger is met, the actions in the ProtectiveActionCollection
            are activated/triggered.
            '''

        })
    '''
    When condition to the StageTrigger is met, the actions in the ProtectiveActionCollection
    are activated/triggered.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProvidedBilateralPoint(IdentifiedObject):
    '''
    Allows declaration of ICCP points to be provided through a Bilateral Table
    agreement.
    '''

    BilateralExchangeActor: Optional[BilateralExchangeActor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'BilateralExchangeActor.ProvidedBilateralIOPoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote peer that will receive ICCP information in a Bilateral table.
            '''

        })
    '''
    Remote peer that will receive ICCP information in a Bilateral table.
    '''

    IOPoint: Optional[IOPoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IOPoint.BilateralToIOPoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Measurement or control for the bilateral ICCP point.
            '''

        })
    '''
    Measurement or control for the bilateral ICCP point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ICCPProvidedPoint(ProvidedBilateralPoint):
    '''
    The IdentifiedObject.name attribute must have a value. The name attribute
    shall be used as the DataValue name used for the exchange.
    '''

    accessPriviledge: Optional[ ICCPAccessPrivilegeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides information regarding the access privileges allowed to the ICCP
            Point.
            '''

        })
    '''
    Provides information regarding the access privileges allowed to the
    ICCP Point.
    '''

    pointQuality: Optional[ ICCPQualityKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specifies the type of ICCP quality that will be conveyed as part of the
            ICCP Point.
            '''

        })
    '''
    Specifies the type of ICCP quality that will be conveyed as part of
    the ICCP Point.
    '''

    pointType: Optional[ ICCPPointKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the ICCP Point type that is to be conveyed.
            A CIM AccumlatorValue shall be mapped to an ICCP real.
            A CIM AnalogValue shall be mapped to an ICCP real.
            A CIM DiscreteValue shall be mapped to either an ICCP real, state, stateSupplemental,
            or either protection event type.
            A CIM StringMeasurementValue does not have a standardized mapping.
            '''

        })
    '''
    Indicates the ICCP Point type that is to be conveyed.
    A CIM AccumlatorValue shall be mapped to an ICCP real.
    A CIM AnalogValue shall be mapped to an ICCP real.
    A CIM DiscreteValue shall be mapped to either an ICCP real, state,
    stateSupplemental, or either protection event type.
    A CIM StringMeasurementValue does not have a standardized mapping.
    '''

    scope: Optional[ ICCPScopeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if the Point is global scoped (e.g. VCC) or accessible only to
            the Bilateral table peer (e.g. ICC).
            '''

        })
    '''
    Indicates if the Point is global scoped (e.g. VCC) or accessible only
    to the Bilateral table peer (e.g. ICC).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Points of this table.
            '''

        })
    '''
    Points of this table.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReadingQualityType(IdentifiedObject):
    '''
    Detailed description for a quality of a reading value, produced by an end
    device or a system. Values in attributes allow for creation of the recommended
    codes to be used for identifying reading value quality codes as follows:
    <systemId>.<category>.<subCategory>.
    '''

    category: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            High-level nature of the reading value quality.
            '''

        })
    '''
    High-level nature of the reading value quality.
    '''

    subCategory: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            More specific nature of the reading value quality, as a further sub-categorisation
            of 'category'.
            '''

        })
    '''
    More specific nature of the reading value quality, as a further sub-categorisation
    of 'category'.
    '''

    systemId: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identification of the system which has declared the issue with the data
            or provided commentary on the data.
            '''

        })
    '''
    Identification of the system which has declared the issue with the
    data or provided commentary on the data.
    '''

    ReadingQualities: list[ReadingQuality] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ReadingQuality.ReadingQualityType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All reading qualities of this type.
            '''

        })
    '''
    All reading qualities of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReadingType(IdentifiedObject):
    '''
    Detailed description for a type of a reading value. Values in attributes
    allow for the creation of recommended codes to be used for identifying
    reading value types as follows: <macroPeriod>.<aggregate>.<measuringPeriod>.<accumulation>.<flowDirection>.<commodity>.<measurementKind>.<interharmonic.numerator>.<interharmonic.denominator>.<argument.numerator>.<argument.denominator>.<tou>.<cpp>.<consumptionTier>.<phases>.<multiplier>.<unit>.<currency>.
    '''

    consumptionTier: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            In case of common flat-rate pricing for power, in which all purchases are
            at a given rate, 'consumptionTier'=0. Otherwise, the value indicates the
            consumption tier, which can be used in conjunction with TOU or CPP pricing.
            Consumption tier pricing refers to the method of billing in which a certain
            "block" of energy is purchased/sold at one price, after which the next
            block of energy is purchased at another price, and so on, all throughout
            a defined period. At the start of the defined period, consumption is initially
            zero, and any usage is measured against the first consumption tier ('consumptionTier'=1).
            If this block of energy is consumed before the end of the period, energy
            consumption moves to be reconed against the second consumption tier ('consumptionTier'=2),
            and so on. At the end of the defined period, the consumption accumulator
            is reset, and usage within the 'consumptionTier'=1 restarts.
            '''

        })
    '''
    In case of common flat-rate pricing for power, in which all purchases
    are at a given rate, 'consumptionTier'=0. Otherwise, the value indicates
    the consumption tier, which can be used in conjunction with TOU or
    CPP pricing.
    Consumption tier pricing refers to the method of billing in which a
    certain "block" of energy is purchased/sold at one price, after which
    the next block of energy is purchased at another price, and so on,
    all throughout a defined period. At the start of the defined period,
    consumption is initially zero, and any usage is measured against the
    first consumption tier ('consumptionTier'=1). If this block of energy
    is consumed before the end of the period, energy consumption moves
    to be reconed against the second consumption tier ('consumptionTier'=2),
    and so on. At the end of the defined period, the consumption accumulator
    is reset, and usage within the 'consumptionTier'=1 restarts.
    '''

    cpp: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Critical peak period (CPP) bucket the reading value is attributed to. Value
            0 means not applicable. Even though CPP is usually considered a specialised
            form of time of use 'tou', this attribute is defined explicitly for flexibility.
            '''

        })
    '''
    Critical peak period (CPP) bucket the reading value is attributed to.
    Value 0 means not applicable. Even though CPP is usually considered
    a specialised form of time of use 'tou', this attribute is defined
    explicitly for flexibility.
    '''

    tou: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time of use (TOU) bucket the reading value is attributed to. Value 0 means
            not applicable.
            '''

        })
    '''
    Time of use (TOU) bucket the reading value is attributed to. Value
    0 means not applicable.
    '''

    accumulation: Optional[ AccumulationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Accumulation behaviour of a reading over time, usually 'measuringPeriod',
            to be used with individual endpoints (as opposed to 'macroPeriod' and 'aggregate'
            that are used to describe aggregations of data from individual endpoints).
            '''

        })
    '''
    Accumulation behaviour of a reading over time, usually 'measuringPeriod',
    to be used with individual endpoints (as opposed to 'macroPeriod' and
    'aggregate' that are used to describe aggregations of data from individual
    endpoints).
    '''

    aggregate: Optional[ AggregateKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Salient attribute of the reading data aggregated from individual endpoints.
            This is mainly used to define a mathematical operation carried out over
            'macroPeriod', but may also be used to describe an attribute of the data
            when the 'macroPeriod' is not defined.
            '''

        })
    '''
    Salient attribute of the reading data aggregated from individual endpoints.
    This is mainly used to define a mathematical operation carried out
    over 'macroPeriod', but may also be used to describe an attribute of
    the data when the 'macroPeriod' is not defined.
    '''

    commodity: Optional[ CommodityKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Commodity being measured.
            '''

        })
    '''
    Commodity being measured.
    '''

    currency: Optional[ Currency ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Metering-specific currency.
            '''

        })
    '''
    Metering-specific currency.
    '''

    flowDirection: Optional[ FlowDirectionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flow direction for a reading where the direction of flow of the commodity
            is important (for electricity measurements this includes current, energy,
            power, and demand).
            '''

        })
    '''
    Flow direction for a reading where the direction of flow of the commodity
    is important (for electricity measurements this includes current, energy,
    power, and demand).
    '''

    macroPeriod: Optional[ MacroPeriodKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time period of interest that reflects how the reading is viewed or captured
            over a long period of time.
            '''

        })
    '''
    Time period of interest that reflects how the reading is viewed or
    captured over a long period of time.
    '''

    measurementKind: Optional[ MeasurementKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifies "what" is being measured, as refinement of 'commodity'. When
            combined with 'unit', it provides detail to the unit of measure. For example,
            'energy' with a unit of measure of 'kWh' indicates to the user that active
            energy is being measured, while with 'kVAh' or 'kVArh', it indicates apparent
            energy and reactive energy, respectively. 'power' can be combined in a
            similar way with various power units of measure: Distortion power ('distortionVoltAmperes')
            with 'kVA' is different from 'power' with 'kVA'.
            '''

        })
    '''
    Identifies "what" is being measured, as refinement of 'commodity'.
    When combined with 'unit', it provides detail to the unit of measure.
    For example, 'energy' with a unit of measure of 'kWh' indicates to
    the user that active energy is being measured, while with 'kVAh' or
    'kVArh', it indicates apparent energy and reactive energy, respectively.
    'power' can be combined in a similar way with various power units of
    measure: Distortion power ('distortionVoltAmperes') with 'kVA' is different
    from 'power' with 'kVA'.
    '''

    measuringPeriod: Optional[ MeasuringPeriodKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time attribute inherent or fundamental to the reading value (as opposed
            to 'macroPeriod' that supplies an "adjective" to describe aspects of a
            time period with regard to the measurement). It refers to the way the value
            was originally measured and not to the frequency at which it is reported
            or presented. For example, an hourly interval of consumption data would
            have value 'hourly' as an attribute. However in the case of an hourly sampled
            voltage value, the meterReadings schema would carry the 'hourly' interval
            size information.
            It is common for meters to report demand in a form that is measured over
            the course of a portion of an hour, while enterprise applications however
            commonly assume the demand (in kW or kVAr) normalised to 1 hour. The system
            that receives readings directly from the meter therefore shall perform
            this transformation before publishing readings for use by the other enterprise
            systems. The scalar used is chosen based on the block size (not any sub-interval
            size).
            '''

        })
    '''
    Time attribute inherent or fundamental to the reading value (as opposed
    to 'macroPeriod' that supplies an "adjective" to describe aspects of
    a time period with regard to the measurement). It refers to the way
    the value was originally measured and not to the frequency at which
    it is reported or presented. For example, an hourly interval of consumption
    data would have value 'hourly' as an attribute. However in the case
    of an hourly sampled voltage value, the meterReadings schema would
    carry the 'hourly' interval size information.
    It is common for meters to report demand in a form that is measured
    over the course of a portion of an hour, while enterprise applications
    however commonly assume the demand (in kW or kVAr) normalised to 1
    hour. The system that receives readings directly from the meter therefore
    shall perform this transformation before publishing readings for use
    by the other enterprise systems. The scalar used is chosen based on
    the block size (not any sub-interval size).
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Metering-specific multiplier.
            '''

        })
    '''
    Metering-specific multiplier.
    '''

    phases: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Metering-specific phase code.
            '''

        })
    '''
    Metering-specific phase code.
    '''

    unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Metering-specific unit.
            '''

        })
    '''
    Metering-specific unit.
    '''

    Channel: Optional[Channel] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Channel.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Channel reporting/collecting register values with this type information.
            '''

        })
    '''
    Channel reporting/collecting register values with this type information.
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule for which the reading type applies
            '''

        })
    '''
    Meter read schedule for which the reading type applies
    '''

    PendingCalculation: Optional[PendingCalculation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PendingCalculation.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pending calculation that produced this reading type.
            '''

        })
    '''
    Pending calculation that produced this reading type.
    '''

    Channel: Optional[Channel] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Channel.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Channel reporting/collecting register values with this type information.
            '''

        })
    '''
    Channel reporting/collecting register values with this type information.
    '''

    ConsumptionTariffIntervals: list[ConsumptionTariffInterval] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConsumptionTariffInterval.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All tariff intervals with consumption described by this reading type.
            '''

        })
    '''
    All tariff intervals with consumption described by this reading type.
    '''

    IntervalBlocks: list[IntervalBlock] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IntervalBlock.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All blocks containing interval reading values with this type information.
            '''

        })
    '''
    All blocks containing interval reading values with this type information.
    '''

    PendingCalculation: Optional[PendingCalculation] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PendingCalculation.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Pending calculation that produced this reading type.
            '''

        })
    '''
    Pending calculation that produced this reading type.
    '''

    Readings: list[Reading] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Reading.ReadingType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All reading values with this type information.
            '''

        })
    '''
    All reading values with this type information.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Receipt(IdentifiedObject):
    '''
    Record of total receipted payment from customer.
    '''

    isBankable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if this receipted payment is manually bankable, otherwise it is an
            electronic funds transfer.
            '''

        })
    '''
    True if this receipted payment is manually bankable, otherwise it is
    an electronic funds transfer.
    '''

    CashierShift: Optional[CashierShift] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CashierShift.Receipts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cashier shift during which this receipt was recorded.
            '''

        })
    '''
    Cashier shift during which this receipt was recorded.
    '''

    VendorShift: Optional[VendorShift] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VendorShift.Receipts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Vendor shift during which this receipt was recorded.
            '''

        })
    '''
    Vendor shift during which this receipt was recorded.
    '''

    Tenders: list[Tender] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Tender.Receipt',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All payments received in the form of tenders recorded by this receipt.
            '''

        })
    '''
    All payments received in the form of tenders recorded by this receipt.
    '''

    Transactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.Receipt',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transactions recorded for this receipted payment.
            '''

        })
    '''
    All transactions recorded for this receipted payment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RecloseSequence(IdentifiedObject):
    '''
    A reclose sequence (open and close) is defined for each possible reclosure
    of a breaker.
    '''

    recloseStep: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the ordinal position of the reclose step relative to other steps
            in the sequence.
            '''

        })
    '''
    Indicates the ordinal position of the reclose step relative to other
    steps in the sequence.
    '''

    recloseDelay: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates the time lapse before the reclose step will execute a reclose.
            '''

        })
    '''
    Indicates the time lapse before the reclose step will execute a reclose.
    '''

    ProtectedSwitch: Optional[ProtectedSwitch] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProtectedSwitch.RecloseSequences',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A breaker may have zero or more automatic reclosures after a trip occurs.
            '''

        })
    '''
    A breaker may have zero or more automatic reclosures after a trip occurs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Protection'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Reconditioning(IdentifiedObject):
    '''
    Reconditioning information for an asset.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this reconditioning (or a major overhaul) has been performed.
            '''

        })
    '''
    Date and time this reconditioning (or a major overhaul) has been performed.
    '''

    Asset: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.Reconditionings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransformerObservations: list[TransformerObservation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerObservation.Reconditioning',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RedLine(IdentifiedObject):
    '''
    This class is used for handling the accompanying annotations, time stamp,
    author, etc. of designs, drawings and maps. A red line can be associated
    with any Location object.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Register(IdentifiedObject):
    '''
    A device that indicates or records units of the commodity or other quantity
    measured.
    '''

    isVirtual: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the data it produces is calculated or measured by a device other
            than a physical end device/meter. Otherwise, any data streams it produces
            are measured by the hardware of the end device/meter itself.
            '''

        })
    '''
    If true, the data it produces is calculated or measured by a device
    other than a physical end device/meter. Otherwise, any data streams
    it produces are measured by the hardware of the end device/meter itself.
    '''

    leftDigitCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of digits (dials on a mechanical meter) to the left of the decimal
            place; default is normally 5.
            '''

        })
    '''
    Number of digits (dials on a mechanical meter) to the left of the decimal
    place; default is normally 5.
    '''

    rightDigitCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of digits (dials on a mechanical meter) to the right of the decimal
            place.
            '''

        })
    '''
    Number of digits (dials on a mechanical meter) to the right of the
    decimal place.
    '''

    touTierName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name used for the time of use tier (also known as bin or bucket). For example,
            "peak", "off-peak", "TOU Category A", etc.
            '''

        })
    '''
    Name used for the time of use tier (also known as bin or bucket). For
    example, "peak", "off-peak", "TOU Category A", etc.
    '''

    EndDeviceFunction: Optional[EndDeviceFunction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EndDeviceFunction.Registers',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End device function metering quantities displayed by this register.
            '''

        })
    '''
    End device function metering quantities displayed by this register.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.Register',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage Point, when metered, has these registers.
            '''

        })
    '''
    Usage Point, when metered, has these registers.
    '''

    Channels: list[Channel] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Channel.Register',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All channels that collect/report values from this register.
            '''

        })
    '''
    All channels that collect/report values from this register.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegulatingLimit(IdentifiedObject):
    '''
    This class represents the physical characteristic of a generator regarding
    the regulating limit.
    '''

    highLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    lowLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RegulatingLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.RegulatingLimit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReliabilityInfo(IdentifiedObject):
    '''
    Information regarding the experienced and expected reliability of a specific
    asset, type of asset, or asset model.
    '''

    momFailureRate: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Momentary failure rate (temporary failures/kft-year).
            '''

        })
    '''
    Momentary failure rate (temporary failures/kft-year).
    '''

    mTTR: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mean time to repair (MTTR - hours).
            '''

        })
    '''
    Mean time to repair (MTTR - hours).
    '''

    Specification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.ReliabilityInfos',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemoteInputSignal(IdentifiedObject):
    '''
    Supports connection to a terminal associated with a remote bus from which
    an input signal of a specific type is coming.
    '''

    remoteSignalType: Optional[ RemoteSignalKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of input signal.
            '''

        })
    '''
    Type of input signal.
    '''

    DiscontinuousExcitationControlDynamics: Optional[DiscontinuousExcitationControlDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscontinuousExcitationControlDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Discontinuous excitation control model using this remote input signal.
            '''

        })
    '''
    Discontinuous excitation control model using this remote input signal.
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power factor or VAr controller type 1 model using this remote input signal.
            '''

        })
    '''
    Power factor or VAr controller type 1 model using this remote input
    signal.
    '''

    PowerSystemStabilizerDynamics: Optional[PowerSystemStabilizerDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemStabilizerDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power system stabilizer model using this remote input signal.
            '''

        })
    '''
    Power system stabilizer model using this remote input signal.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote terminal with which this input signal is associated.
            '''

        })
    '''
    Remote terminal with which this input signal is associated.
    '''

    UnderexcitationLimiterDynamics: Optional[UnderexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnderexcitationLimiterDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Underexcitation limiter model using this remote input signal.
            '''

        })
    '''
    Underexcitation limiter model using this remote input signal.
    '''

    VoltageCompensatorDynamics: Optional[VoltageCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageCompensatorDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage compensator model using this remote input signal.
            '''

        })
    '''
    Voltage compensator model using this remote input signal.
    '''

    WindPlantDynamics: Optional[WindPlantDynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The wind plant using the remote signal.
            '''

        })
    '''
    The wind plant using the remote signal.
    '''

    WindTurbineType1or2Dynamics: Optional[WindTurbineType1or2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 1 or type 2 model using this remote input signal.
            '''

        })
    '''
    Wind generator type 1 or type 2 model using this remote input signal.
    '''

    WindTurbineType3or4Dynamics: Optional[WindTurbineType3or4Dynamics] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 or type 4 models using this remote input signal.
            '''

        })
    '''
    Wind turbine type 3 or type 4 models using this remote input signal.
    '''

    DiscontinuousExcitationControlDynamics: Optional[DiscontinuousExcitationControlDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscontinuousExcitationControlDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Discontinuous excitation control model using this remote input signal.
            '''

        })
    '''
    Discontinuous excitation control model using this remote input signal.
    '''

    PFVArControllerType1Dynamics: Optional[PFVArControllerType1Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Power factor or VAr controller type 1 model using this remote input signal.
            '''

        })
    '''
    Power factor or VAr controller type 1 model using this remote input
    signal.
    '''

    UnderexcitationLimiterDynamics: Optional[UnderexcitationLimiterDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnderexcitationLimiterDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Underexcitation limiter model using this remote input signal.
            '''

        })
    '''
    Underexcitation limiter model using this remote input signal.
    '''

    VoltageCompensatorDynamics: Optional[VoltageCompensatorDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageCompensatorDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Voltage compensator model using this remote input signal.
            '''

        })
    '''
    Voltage compensator model using this remote input signal.
    '''

    WindPlantDynamics: Optional[WindPlantDynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantDynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind plant using the remote signal.
            '''

        })
    '''
    The wind plant using the remote signal.
    '''

    WindTurbineType1or2Dynamics: Optional[WindTurbineType1or2Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 1 or type 2 model using this remote input signal.
            '''

        })
    '''
    Wind generator type 1 or type 2 model using this remote input signal.
    '''

    WindTurbineType3or4Dynamics: Optional[WindTurbineType3or4Dynamics] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4Dynamics.RemoteInputSignal',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 or type 4 models using this remote input signal.
            '''

        })
    '''
    Wind turbine type 3 or type 4 models using this remote input signal.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StandardInterconnections'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemotePoint(IdentifiedObject):
    '''
    For an RTU, remote points correspond to telemetered values or control outputs.
    Other units (e.g. control centres) usually also contain calculated values.
    '''

    RemoteUnit: Optional[RemoteUnit] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RemoteUnit.RemotePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remote unit this point belongs to.
            '''

        })
    '''
    Remote unit this point belongs to.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemoteControl(RemotePoint):
    '''
    Remote controls are outputs that are sent by the remote unit to actuators
    in the process.
    '''

    actuatorMaximum: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum set point value accepted by the remote control point.
            '''

        })
    '''
    The maximum set point value accepted by the remote control point.
    '''

    actuatorMinimum: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum set point value accepted by the remote control point.
            '''

        })
    '''
    The minimum set point value accepted by the remote control point.
    '''

    remoteControlled: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Set to true if the actuator is remotely controlled.
            '''

        })
    '''
    Set to true if the actuator is remotely controlled.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Control.RemoteControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Control for the RemoteControl point.
            '''

        })
    '''
    The Control for the RemoteControl point.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Control.RemoteControl',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The Control for the RemoteControl point.
            '''

        })
    '''
    The Control for the RemoteControl point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RemoteSource(RemotePoint):
    '''
    Remote sources are state variables that are telemetered or calculated within
    the remote unit.
    '''

    deadband: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The smallest change in value to be reported.
            '''

        })
    '''
    The smallest change in value to be reported.
    '''

    sensorMaximum: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum value the telemetry item can return.
            '''

        })
    '''
    The maximum value the telemetry item can return.
    '''

    sensorMinimum: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum value the telemetry item can return.
            '''

        })
    '''
    The minimum value the telemetry item can return.
    '''

    scanInterval: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The time interval between scans.
            '''

        })
    '''
    The time interval between scans.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.RemoteSource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Link to the physical telemetered point associated with this measurement.
            '''

        })
    '''
    Link to the physical telemetered point associated with this measurement.
    '''

    MeasurementValue: Optional[MeasurementValue] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.RemoteSource',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ResourceGroup(IdentifiedObject):
    '''
    A logical grouping of resources that are used to model location of types
    of requirements for ancillary services such as spinning reserve zones,
    regulation zones, etc.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this group.
            '''

        })
    '''
    Type of this group.
    '''

    ResourceGroupReqs: list[ResourceGroupReq] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceGroupReq.ResourceGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceGroupReq(IdentifiedObject):
    '''
    Ancillary service requirements for a market.
    '''

    ResourceGroup: Optional[ResourceGroup] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ResourceGroup.ResourceGroupReqs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class ReserveReq(ResourceGroupReq):
    '''
    Requirements for minimum amount of reserve and/or regulation to be supplied
    by a set of qualified resources.
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.ReserveReqs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market product associated with reserve requirement must be a reserve or
            regulation product.
            '''

        })
    '''
    Market product associated with reserve requirement must be a reserve
    or regulation product.
    '''

    ReserveReqCurve: Optional[ReserveReqCurve] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ReserveReqCurve.ReserveReq',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SensitivityPriceCurve: Optional[SensitivityPriceCurve] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SensitivityPriceCurve.ReserveReq',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ReserveReqCurve: Optional[ReserveReqCurve] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReserveReqCurve.ReserveReq',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SensitivityPriceCurve: Optional[SensitivityPriceCurve] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SensitivityPriceCurve.ReserveReq',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourcePerformanceEvaluation(IdentifiedObject):
    '''
    Represents an the performance evaluation of a resource deployment. Every
    resource deployment may have many performance evaluations, using different
    evaluation metrics or algorithms, or produced by different evaluation authorities.
    '''

    effectiveEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    effectiveStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    evaluationDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the performance evaluation, e.g. the rating classification
            used (any is allowed), why the evaluation was performed, anything that
            describes the demand response performance evaluation.
            '''

        })
    '''
    Description of the performance evaluation, e.g. the rating classification
    used (any is allowed), why the evaluation was performed, anything that
    describes the demand response performance evaluation.
    '''

    evaluationValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value of the performance. as a String, any rating scheme is supported
            (e.g. "1","2","3" or "low", "medium", "high"). The rating scheme is described
            in the performanceValueDescription attribute.
            '''

        })
    '''
    The value of the performance. as a String, any rating scheme is supported
    (e.g. "1","2","3" or "low", "medium", "high"). The rating scheme is
    described in the performanceValueDescription attribute.
    '''

    DemandResponseActualEvent: Optional[DistributedResourceActualEvent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'DistributedResourceActualEvent.ResourcePerformanceEvaluations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourcePerformanceTimeSeriesFactors: list[ResourcePerformanceTimeSeriesFactor] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourcePerformanceTimeSeriesFactor.ResourcePerformanceEvaluation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourcePerformanceGlobalFactor(IdentifiedObject):
    '''
    Global factors are property/value pairs that are used to adjust resource
    performance values. Example include scale factors (e.g. scale a baseline
    up or down), adders (positive or negative), etc.
    '''

    factorDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description (name) of the property (factor).
            '''

        })
    '''
    Description (name) of the property (factor).
    '''

    factorValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of the property (factor).
            '''

        })
    '''
    Value of the property (factor).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourcePerformanceRating(IdentifiedObject):
    '''
    Rating of a resource for its demand response performance. e.g. given a
    set on monthly resource demand response performance evaluations, the resource
    may be rated with excellent, average, or poor performance for the sample
    set.
    '''

    effectiveEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            starting date time that the rating is valid for
            '''

        })
    '''
    starting date time that the rating is valid for
    '''

    effectiveStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ending date time that the rating is valid for
            '''

        })
    '''
    ending date time that the rating is valid for
    '''

    ratingDescription: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the resource's demand response rating description
            '''

        })
    '''
    the resource's demand response rating description
    '''

    ratingType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the type of performance rating, e.g. which market or product the rating
            is for
            '''

        })
    '''
    the type of performance rating, e.g. which market or product the rating
    is for
    '''

    ratingValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the resource's demand response rating
            '''

        })
    '''
    the resource's demand response rating
    '''

    RegisteredResource: Optional[RegisteredDistributedResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredDistributedResource.ResourcePerformanceRatings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResponseMethod(IdentifiedObject):
    '''
    Specifies a category of energy usage that the demand response applies for;
    e.g. energy from lighting, HVAC, other.
    '''

    activePower: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The active power value for the demand adjustment type. This supports requests
            to be made to a resource for some amount of active power provided by a
            particular response method, as specified by the method attribute (e.g.
            lighting, HVAC, wall mounted air conditioners, etc.).
            '''

        })
    '''
    The active power value for the demand adjustment type. This supports
    requests to be made to a resource for some amount of active power provided
    by a particular response method, as specified by the method attribute
    (e.g. lighting, HVAC, wall mounted air conditioners, etc.).
    '''

    activePowerUOM: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The unit of measure of active power, e.g. kiloWatts (kW), megaWatts (mW),
            etc.
            '''

        })
    '''
    The unit of measure of active power, e.g. kiloWatts (kW), megaWatts
    (mW), etc.
    '''

    method: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The response method (e.g. lighting, HVAC, wall mounted air conditioners,
            etc.).
            '''

        })
    '''
    The response method (e.g. lighting, HVAC, wall mounted air conditioners,
    etc.).
    '''

    siteMultiplier: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This value provides for scaling of a response method's active power. For
            example, a response method of air conditioning could utilize a small amount
            of active power from each air conditioning unit (e.g. 0.1 kiloWatt), but
            the site multiplier could be used to produce a the total active power adjustment
            by multiplying the response method active power by this value (e.g. a building
            with 100 window air conditioning units, so 100 * 0.1 kW = 10 kW).
            '''

        })
    '''
    This value provides for scaling of a response method's active power.
    For example, a response method of air conditioning could utilize a
    small amount of active power from each air conditioning unit (e.g.
    0.1 kiloWatt), but the site multiplier could be used to produce a the
    total active power adjustment by multiplying the response method active
    power by this value (e.g. a building with 100 window air conditioning
    units, so 100 * 0.1 kW = 10 kW).
    '''

    RegisteredResource: Optional[RegisteredDistributedResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredDistributedResource.ResponseMethods',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Role(IdentifiedObject):
    '''
    Enumeration of potential roles that might be played by one object relative
    to another.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of role.
            '''

        })
    '''
    Type of role.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PersonPropertyRole(Role):
    '''
    The role of a person relative to a given piece of property. Examples of
    roles include: owner, renter, contractor, etc.
    '''

    LandProperty: Optional[LandProperty] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'LandProperty.ErpPersonRoles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Person: Optional[OldPerson] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'OldPerson.LandPropertyRoles',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Route(IdentifiedObject):
    '''
    Route that is followed, for example by service crews.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's work management standards and practices.
            '''

        })
    '''
    Classification by utility's work management standards and practices.
    '''

    Crews: list[OldCrew] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldCrew.Route',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Specification for this scheduled event.
            '''

        })
    '''
    Specification for this scheduled event.
    '''

    Assets: list[Asset] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Asset.ScheduledEvents',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Assets associated with the scheduled event.
            '''

        })
    '''
    Assets associated with the scheduled event.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledLimitValue(IdentifiedObject):
    '''
    A limit that is applicable during a scheduled time period.
    '''

    ScheduledLimitDependency: Optional[ScheduledLimitDependency] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ScheduledLimitDependency.ScheduledLimitValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Season: Optional[Season] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Season.ScheduledLimits',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The season for which the scheduled limits applies. If not specified, then
            applicable ot any season.
            '''

        })
    '''
    The season for which the scheduled limits applies. If not specified,
    then applicable ot any season.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledActivePowerLimitValue(ScheduledLimitValue):
    '''
    '''

    value: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledApparentPowerLimitValue(ScheduledLimitValue):
    '''
    A time scheduled value for apparent power limit.
    '''

    value: Optional[ float | ApparentPower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The apparent power limit value for the scheduled time.
            '''

        })
    '''
    The apparent power limit value for the scheduled time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledCurrentLimitValue(ScheduledLimitValue):
    '''
    A current limit that is scheduled.
    '''

    value: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The current flow limit value applicable at the scheduled time.
            '''

        })
    '''
    The current flow limit value applicable at the scheduled time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledVoltageLimitValue(ScheduledLimitValue):
    '''
    A voltage limit value for a scheduled time.
    '''

    value: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The voltage limit value for the scheduled time.
            '''

        })
    '''
    The voltage limit value for the scheduled time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SchedulingPoint(IdentifiedObject):
    '''
    Connection to other organizations at the boundary of the ISO/RTO.
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.InterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterchangeSchedule: list[InterchangeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'InterchangeSchedule.InterTie',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Seal(IdentifiedObject):
    '''
    Physically controls access to AssetContainers.
    '''

    appliedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time this seal has been applied.
            '''

        })
    '''
    Date and time this seal has been applied.
    '''

    sealNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (reserved word) Seal number.
            '''

        })
    '''
    (reserved word) Seal number.
    '''

    condition: Optional[ SealConditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Condition of seal.
            '''

        })
    '''
    Condition of seal.
    '''

    kind: Optional[ SealKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of seal.
            '''

        })
    '''
    Kind of seal.
    '''

    AssetContainer: Optional[AssetContainer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetContainer.Seals',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Asset container to which this seal is applied.
            '''

        })
    '''
    Asset container to which this seal is applied.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 Season(IdentifiedObject):
    '''
    A specified time period of the year.
    '''

    endDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date season ends.
            '''

        })
    '''
    Date season ends.
    '''

    startDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date season starts.
            '''

        })
    '''
    Date season starts.
    '''

    ScheduledLimits: list[ScheduledLimitValue] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ScheduledLimitValue.Season',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The scheduled limits associated with the season.
            '''

        })
    '''
    The scheduled limits associated with the season.
    '''

    SeasonDayTypeSchedules: list[SeasonDayTypeSchedule] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SeasonDayTypeSchedule.Season',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Schedules that use this Season.
            '''

        })
    '''
    Schedules that use this Season.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadModel'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SecurityConstraints(IdentifiedObject):
    '''
    Typical for regional transmission operators (RTOs), these constraints include
    transmission as well as generation group constraints identified in both
    base case and critical contingency cases.
    '''

    actualMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual branch or group of branches MW flow (only for transmission constraints)
            '''

        })
    '''
    Actual branch or group of branches MW flow (only for transmission constraints)
    '''

    maxMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum MW limit
            '''

        })
    '''
    Maximum MW limit
    '''

    minMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum MW limit (only for transmission constraints).
            '''

        })
    '''
    Minimum MW limit (only for transmission constraints).
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.SecurityConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GeneratingBid: Optional[GeneratingBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GeneratingBid.SecurityConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RTO.SecurityConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.SecurityConstraints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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.
    '''

    kind: Optional[ ServiceKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of service.
            '''

        })
    '''
    Kind of service.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedServiceCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this service category.
            '''

        })
    '''
    All configuration events created for this service category.
    '''

    CustomerAgreements: list[CustomerAgreement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CustomerAgreement.ServiceCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All customer agreements with this service category.
            '''

        })
    '''
    All customer agreements with this service category.
    '''

    PricingStructures: list[PricingStructure] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'PricingStructure.ServiceCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All pricing structures applicable to this service category.
            '''

        })
    '''
    All pricing structures applicable to this service category.
    '''

    UsagePoints: list[UsagePoint] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UsagePoint.ServiceCategory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All usage points that deliver this category of service.
            '''

        })
    '''
    All usage points that deliver this category of service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServiceMultiplier(IdentifiedObject):
    '''
    Multiplier applied at the usage point.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiplier value.
            '''

        })
    '''
    Multiplier value.
    '''

    kind: Optional[ ServiceMultiplierKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of multiplier.
            '''

        })
    '''
    Kind of multiplier.
    '''

    UsagePoint: Optional[UsagePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePoint.ServiceMultipliers',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Usage point applying this multiplier.
            '''

        })
    '''
    Usage point applying this multiplier.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ServicePoint(IdentifiedObject):
    '''
    The defined termination points of a transmission path. Service points are
    defined from the viewpoint of the transmission service. Each service point
    is contained within (or on the boundary of) an interchange area. A service
    point is source or destination of a transaction.
    '''

    PODTransmissionPath: list[TransmissionPath] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionPath.DeliveryPoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A transmission path has a "point-of-delivery" service point
            '''

        })
    '''
    A transmission path has a "point-of-delivery" service point
    '''

    PORTransmissionPath: list[TransmissionPath] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionPath.PointOfReceipt',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A transmission path has a "point-of-receipt" service point
            '''

        })
    '''
    A transmission path has a "point-of-receipt" service point
    '''

    SinkReservation: list[TransmissionReservation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionReservation.Sink',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SourceReservation: list[TransmissionReservation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionReservation.Source',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Shift(IdentifiedObject):
    '''
    Generally referring to a period of operation or work performed. Whether
    the shift is open/closed can be derived from attributes 'activityInterval.start'
    and 'activityInterval.end'.
    The grand total for receipts (i.e., cumulative total of all actual receipted
    amounts during this shift; bankable + non-bankable; excludes rounding error
    totals) can be derived from receipt:
    =sum('Receipt.receiptAmount'); includes bankable and non-bankable receipts.
    It also has to be reconciled against:
    =sum('receiptsGrandTotalBankable' + 'receiptsGrandTotalNonBankable')
    and against receipt summary:
    =sum('ReceiptSummary.receiptsTotal').
    The attributes with "GrandTotal" defined in this class may need to be used
    when the source data is periodically flushed from the system and then these
    cannot be derived.
    '''

    receiptsGrandTotalBankable: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total of amounts receipted during this shift that can be manually banked
            (cash and cheques for example). Values are obtained from Receipt attributes:
            =sum(Receipt.receiptAmount) for all Receipt.bankable = true.
            '''

        })
    '''
    Total of amounts receipted during this shift that can be manually banked
    (cash and cheques for example). Values are obtained from Receipt attributes:
    =sum(Receipt.receiptAmount) for all Receipt.bankable = true.
    '''

    receiptsGrandTotalNonBankable: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total of amounts receipted during this shift that cannot be manually banked
            (card payments for example). Values are obtained from Receipt attributes:
            =sum(Receipt.receiptAmount) for all Receipt.bankable = false.
            '''

        })
    '''
    Total of amounts receipted during this shift that cannot be manually
    banked (card payments for example). Values are obtained from Receipt
    attributes:
    =sum(Receipt.receiptAmount) for all Receipt.bankable = false.
    '''

    receiptsGrandTotalRounding: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cumulative amount in error due to process rounding not reflected in receiptsGrandTotal.
            Values are obtained from Receipt attributes:
            =sum(Receipt.receiptRounding).
            '''

        })
    '''
    Cumulative amount in error due to process rounding not reflected in
    receiptsGrandTotal. Values are obtained from Receipt attributes:
    =sum(Receipt.receiptRounding).
    '''

    transactionsGrandTotal: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cumulative total of transacted amounts during this shift. Values are obtained
            from transaction:
            =sum('Transaction.transactionAmount'). It also has to be reconciled against
            transaction summary:
            =sum('TransactionSummary.transactionsTotal').
            '''

        })
    '''
    Cumulative total of transacted amounts during this shift. Values are
    obtained from transaction:
    =sum('Transaction.transactionAmount'). It also has to be reconciled
    against transaction summary:
    =sum('TransactionSummary.transactionsTotal').
    '''

    transactionsGrandTotalRounding: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cumulative amount in error due to process rounding not reflected in transactionsGandTotal.
            Values are obtained from Transaction attributes:
            =sum(Transaction.transactionRounding).
            '''

        })
    '''
    Cumulative amount in error due to process rounding not reflected in
    transactionsGandTotal. Values are obtained from Transaction attributes:
    =sum(Transaction.transactionRounding).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CashierShift(Shift):
    '''
    The operating shift for a cashier, during which the cashier may transact
    against the cashier shift, subject to vendor shift being open.
    '''

    cashFloat: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount of cash that the cashier brings to start the shift and that
            will be taken away at the end of the shift; i.e. the cash float does not
            get banked.
            '''

        })
    '''
    The amount of cash that the cashier brings to start the shift and that
    will be taken away at the end of the shift; i.e. the cash float does
    not get banked.
    '''

    Cashier: Optional[Cashier] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cashier.CashierShifts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cashier operating this shift.
            '''

        })
    '''
    Cashier operating this shift.
    '''

    PointOfSale: Optional[PointOfSale] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PointOfSale.CashierShifts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Point of sale that is in operation during this shift.
            '''

        })
    '''
    Point of sale that is in operation during this shift.
    '''

    Receipts: list[Receipt] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Receipt.CashierShift',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All Receipts recorded for this Shift.
            '''

        })
    '''
    All Receipts recorded for this Shift.
    '''

    Transactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.CashierShift',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transactions recorded during this cashier shift.
            '''

        })
    '''
    All transactions recorded during this cashier shift.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VendorShift(Shift):
    '''
    The operating shift for a vendor during which the vendor may transact against
    the merchant's account. It aggregates transactions and receipts during
    the shift and periodically debits a merchant account. The totals in vendor
    shift should always be the sum of totals aggregated in all cashier shifts
    that were open under the particular vendor shift.
    '''

    posted: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, merchantDebitAmount has been debited from MerchantAccount; typically
            happens at the end of VendorShift when it closes.
            '''

        })
    '''
    If true, merchantDebitAmount has been debited from MerchantAccount;
    typically happens at the end of VendorShift when it closes.
    '''

    merchantDebitAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount that is to be debited from the merchant account for this vendor
            shift. This amount reflects the sum(PaymentTransaction.transactionAmount).
            '''

        })
    '''
    The amount that is to be debited from the merchant account for this
    vendor shift. This amount reflects the sum(PaymentTransaction.transactionAmount).
    '''

    MerchantAccount: Optional[MerchantAccount] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MerchantAccount.VendorShifts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Merchant account this vendor shift periodically debits (based on aggregated
            transactions).
            '''

        })
    '''
    Merchant account this vendor shift periodically debits (based on aggregated
    transactions).
    '''

    Vendor: Optional[Vendor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Vendor.VendorShifts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Vendor that opens and owns this vendor shift.
            '''

        })
    '''
    Vendor that opens and owns this vendor shift.
    '''

    Receipts: list[Receipt] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Receipt.VendorShift',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All receipts recorded during this vendor shift.
            '''

        })
    '''
    All receipts recorded during this vendor shift.
    '''

    Transactions: list[Transaction] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Transaction.VendorShift',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All transactions recorded during this vendor shift.
            '''

        })
    '''
    All transactions recorded during this vendor shift.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Specimen(IdentifiedObject):
    '''
    Sample or specimen of a material (fluid or solid).
    '''

    specimenID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifier of specimen used in inspection or test.
            '''

        })
    '''
    Identifier of specimen used in inspection or test.
    '''

    specimenSampleDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time sample specimen taken.
            '''

        })
    '''
    Date and time sample specimen taken.
    '''

    specimenToLabDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the specimen was received by the lab.
            '''

        })
    '''
    Date and time the specimen was received by the lab.
    '''

    ambientTemperatureAtSampling: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating ambient temperature (in �C).
            '''

        })
    '''
    Operating ambient temperature (in �C).
    '''

    humidityAtSampling: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating ambient humidity (in percent).
            '''

        })
    '''
    Operating ambient humidity (in percent).
    '''

    AssetTestSampleTaker: Optional[AssetTestSampleTaker] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AssetTestSampleTaker.Specimen',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Test sampler taker who gathered this specimen.
            '''

        })
    '''
    Test sampler taker who gathered this specimen.
    '''

    LabTestDataSet: list[LabTestDataSet] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'LabTestDataSet.Specimen',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Results from lab testing done on specimen.
            '''

        })
    '''
    Results from lab testing done on specimen.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilSpecimen(Specimen):
    '''
    '''

    oilSampleTakenFrom: Optional[ OilSampleLocation ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location from which oil sample taken.
            '''

        })
    '''
    Location from which oil sample taken.
    '''

    oilSampleTemperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Oil sample temperature.
            '''

        })
    '''
    Oil sample temperature.
    '''

    oilTemperatureSource: Optional[ OilTemperatureSource ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Source of oil temperature.
            '''

        })
    '''
    Source of oil temperature.
    '''

    sampleContainer: Optional[ SampleContainerType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of sample container.
            '''

        })
    '''
    Type of sample container.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Stage(IdentifiedObject):
    '''
    Stage of a remedial action scheme.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The priority of the stage. 0 = don t care (default) 1 = highest priority.
            2 is less than 1 and so on. A stage with higher priority needs be activated
            before a lower stage can be activated.
            '''

        })
    '''
    The priority of the stage. 0 = don t care (default) 1 = highest priority.
    2 is less than 1 and so on. A stage with higher priority needs be activated
    before a lower stage can be activated.
    '''

    RemedialActionScheme: Optional[RemedialActionScheme] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RemedialActionScheme.Stage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    StageTrigger: list[StageTrigger] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'StageTrigger.Stage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A Stage consist of one or more StageTrigger.
            '''

        })
    '''
    A Stage consist of one or more StageTrigger.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StageTrigger(IdentifiedObject):
    '''
    Condition that is triggered either by TriggerCondition of by gate condition
    within a stage and has remedial action-s.
    '''

    armed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The status of the class set by operation or by signal. Optional field that
            will override other status fields.
            '''

        })
    '''
    The status of the class set by operation or by signal. Optional field
    that will override other status fields.
    '''

    normalArmed: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The default/normal value used when other active signal/values are missing.
            '''

        })
    '''
    The default/normal value used when other active signal/values are missing.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority of trigger. 0 = don t care (default) 1 = highest priority. 2 is
            less than 1 and so on. A trigger with the highest priority will trigger
            first.
            '''

        })
    '''
    Priority of trigger. 0 = don t care (default) 1 = highest priority.
    2 is less than 1 and so on. A trigger with the highest priority will
    trigger first.
    '''

    GateArmed: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.StageTriggerArmed',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Association to a Gate that through a gate logic and input pin defines arming
            of the StageTrigger.
            '''

        })
    '''
    Association to a Gate that through a gate logic and input pin defines
    arming of the StageTrigger.
    '''

    GateComCondition: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.StageTriggerCom',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For the StageTrigger to active the set of protective actions the condition
            for communication needs to be met (true).
            '''

        })
    '''
    For the StageTrigger to active the set of protective actions the condition
    for communication needs to be met (true).
    '''

    GateTrigger: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Gate.StageTrigger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Gate result that trigger the StageTrigger and thereby executing the
            a set of protective actions.
            '''

        })
    '''
    The Gate result that trigger the StageTrigger and thereby executing
    the a set of protective actions.
    '''

    ProtectiveActionCollection: Optional[ProtectiveActionCollection] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ProtectiveActionCollection.StageTrigger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Stage: Optional[Stage] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Stage.StageTrigger',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.AggregateOf)
@stereotype(CIMStereotype.OfAggregate)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ThermalGeneratingUnit.StartupModel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Production'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StatisticalCalculation(IdentifiedObject):
    '''
    Description of statistical calculation performed.
    '''

    calculationMode: Optional[ CalculationModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Calculation mode.
            '''

        })
    '''
    Calculation mode.
    '''

    calculationTechnique: Optional[ CalculationTechniqueKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of statistical calculation, specifying how the measurement value is
            calculated.
            '''

        })
    '''
    Kind of statistical calculation, specifying how the measurement value
    is calculated.
    '''

    CalculationMethodOrder: list[CalculationMethodOrder] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CalculationMethodOrder.StatisicalCalculation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The order in which this statistical calculation is done.
            '''

        })
    '''
    The order in which this statistical calculation is done.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PeriodicStatisticalCalculation(StatisticalCalculation):
    '''
    Description of period for which calculation is performed.
    '''

    calculationIntervalMagnitude: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of units (of calculationIntervalUnit) in the calculation interval.
            '''

        })
    '''
    Number of units (of calculationIntervalUnit) in the calculation interval.
    '''

    calculationIntervalUnit: Optional[ CalculationIntervalUnitKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit in which calculation interval is defined.
            '''

        })
    '''
    Unit in which calculation interval is defined.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The substations in this sub-geographical region.
            '''

        })
    '''
    The substations in this sub-geographical region.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchOperationSummary(IdentifiedObject):
    '''
    Up-to-date, of-record summary of switch operation information, distilled
    from a variety of sources (real-time data or real-time data historian,
    field inspections, etc.) of use to asset health analytics.
    '''

    lifetimeFaultOperations: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total breaker fault operations to date.
            '''

        })
    '''
    Total breaker fault operations to date.
    '''

    lifetimeMotorStarts: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total motor starts to date.
            '''

        })
    '''
    Total motor starts to date.
    '''

    lifetimeTotalOperations: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total breaker operations to date (including fault and non-fault).
            '''

        })
    '''
    Total breaker operations to date (including fault and non-fault).
    '''

    mostRecentFaultOperationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of most recent breaker fault operation.
            '''

        })
    '''
    Date of most recent breaker fault operation.
    '''

    mostRecentMotorStartDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of most recent motor start.
            '''

        })
    '''
    Date of most recent motor start.
    '''

    mostRecentOperationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of most recent breaker operation (fault or non-fault).
            '''

        })
    '''
    Date of most recent breaker operation (fault or non-fault).
    '''

    Breaker: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Asset.BreakerOperation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Breaker asset to which this operation information applies.
            '''

        })
    '''
    Breaker asset to which this operation information applies.
    '''

    Breaker: Optional[Asset] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Asset.BreakerOperation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Breaker asset to which this operation information applies.
            '''

        })
    '''
    Breaker asset to which this operation information applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingAction(IdentifiedObject):
    '''
    Atomic switching action.
    '''

    executedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual date and time of this switching step.
            '''

        })
    '''
    Actual date and time of this switching step.
    '''

    issuedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time when the crew was given the instruction to execute the action;
            not applicable if the action is performed by operator remote control.
            '''

        })
    '''
    Date and time when the crew was given the instruction to execute the
    action; not applicable if the action is performed by operator remote
    control.
    '''

    plannedDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned date and time of this switching step.
            '''

        })
    '''
    Planned date and time of this switching step.
    '''

    phases: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phases of the Switching Action
            '''

        })
    '''
    Phases of the Switching Action
    '''

    Operator: Optional[Operator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Operator.SwitchingSteps',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operator responsible for this switching step.
            '''

        })
    '''
    Operator responsible for this switching step.
    '''

    SwitchingEvent: Optional[SwitchingEvent] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingEvent.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching event that the switching action is performed on
            '''

        })
    '''
    The switching event that the switching action is performed on
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching plan that is associated with the switching actions.
            '''

        })
    '''
    The switching plan that is associated with the switching actions.
    '''

    SwitchingStep: Optional[SwitchingStep] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingStep.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching step that is associated to the switching action.
            '''

        })
    '''
    The switching step that is associated to the switching action.
    '''

    Crew: list[Crew] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Crew.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The crew that is assigned to the switching action.
            '''

        })
    '''
    The crew that is assigned to the switching action.
    '''

    SwitchingEvent: Optional[SwitchingEvent] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingEvent.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching event that the switching action is performed on
            '''

        })
    '''
    The switching event that the switching action is performed on
    '''

    SwitchingStep: Optional[SwitchingStep] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingStep.SwitchingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching step that is associated to the switching action.
            '''

        })
    '''
    The switching step that is associated to the switching action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform
            '''

        })
    '''
    Switching action to perform
    '''

    Clamp: Optional[Clamp] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Clamp.ClampAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The clamp that the clamp action is performed on
            '''

        })
    '''
    The clamp that the clamp action is performed on
    '''

    Clamp: Optional[Clamp] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Clamp.ClampAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The clamp that the clamp action is performed on
            '''

        })
    '''
    The clamp that the clamp action is performed on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ClearanceAction(SwitchingAction):
    '''
    Action on clearance document as a switching step.
    '''

    kind: Optional[ ClearanceActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Clearance action to perform.
            '''

        })
    '''
    Clearance action to perform.
    '''

    Clearance: Optional[ClearanceDocument] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClearanceDocument.ClearanceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Clearance associated with this clearance action.
            '''

        })
    '''
    Clearance associated with this clearance action.
    '''

    Clearance: Optional[ClearanceDocument] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ClearanceDocument.ClearanceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Clearance associated with this clearance action.
            '''

        })
    '''
    Clearance associated with this clearance action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    analogValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The analog value used for the analog control, the raise/lower control and
            the set point control
            '''

        })
    '''
    The analog value used for the analog control, the raise/lower control
    and the set point control
    '''

    discreteValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The integer value used for the command or the accumulator reset.
            '''

        })
    '''
    The integer value used for the command or the accumulator reset.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Control.ControlAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The control that the control action is performed on.
            '''

        })
    '''
    The control that the control action is performed on.
    '''

    Control: Optional[Control] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Control.ControlAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The control that the control action is performed on.
            '''

        })
    '''
    The control that the control action is performed on.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform.
            '''

        })
    '''
    Switching action to perform.
    '''

    Cut: Optional[Cut] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cut.CutAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cut on which this action is taken.
            '''

        })
    '''
    Cut on which this action is taken.
    '''

    Cut: Optional[Cut] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cut.CutAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Cut on which this action is taken.
            '''

        })
    '''
    Cut on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform
            '''

        })
    '''
    Switching action to perform
    '''

    EnergyConsumer: Optional[EnergyConsumer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumer.EnergyConsumerAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The energy consumer that the energy consumer action is performed on
            '''

        })
    '''
    The energy consumer that the energy consumer action is performed on
    '''

    EnergyConsumer: Optional[EnergyConsumer] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyConsumer.EnergyConsumerAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The energy consumer that the energy consumer action is performed on
            '''

        })
    '''
    The energy consumer that the energy consumer action is performed on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform.
            '''

        })
    '''
    Switching action to perform.
    '''

    EnergySource: Optional[EnergySource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySource.EnergySourceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy source on which this action is taken.
            '''

        })
    '''
    Energy source on which this action is taken.
    '''

    EnergySource: Optional[EnergySource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergySource.EnergySourceAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class GenericAction(SwitchingAction):
    '''
    An arbitrary switching step.
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.GenericAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The power system resource that the generic action is performed on
            '''

        })
    '''
    The power system resource that the generic action is performed on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform.
            '''

        })
    '''
    Switching action to perform.
    '''

    AlongACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineGroundingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        '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.
    '''

    Ground: Optional[Ground] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Ground.GroundAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ground on which this action is taken.
            '''

        })
    '''
    Ground on which this action is taken.
    '''

    GroundedEquipment: Optional[ConductingEquipment] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.GroundingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        '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.
    '''

    AlongACLineSegment: Optional[ACLineSegment] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ACLineSegment.LineGroundingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Ground on which this action is taken.
            '''

        })
    '''
    Ground on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform.
            '''

        })
    '''
    Switching action to perform.
    '''

    Clamp: Optional[Clamp] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Clamp.JumperAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Clamp on which this action is taken.
            '''

        })
    '''
    Clamp on which this action is taken.
    '''

    Jumper: Optional[Jumper] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Jumper.JumperAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Jumper on which this action is taken.
            '''

        })
    '''
    Jumper on which this action is taken.
    '''

    ACLineSegments: list[ACLineSegment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ACLineSegment.LineJumpingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Clamp on which this action is taken.
            '''

        })
    '''
    Clamp on which this action is taken.
    '''

    JumpedEquipments: list[ConductingEquipment] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConductingEquipment.JumpingAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Jumper on which this action is taken.
            '''

        })
    '''
    Jumper on which this action is taken.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Measurement.MeasurementAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The measurement that the measurement action is performed on
            '''

        })
    '''
    The measurement that the measurement action is performed on
    '''

    Measurement: Optional[Measurement] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Measurement.MeasurementAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The measurement that the measurement action is performed on
            '''

        })
    '''
    The measurement that the measurement action is performed on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorAction(SwitchingAction):
    '''
    '''

    kind: Optional[ TempEquipActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform
            '''

        })
    '''
    Switching action to perform
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The shunt compensator that the shunt compensator action is performed on
            '''

        })
    '''
    The shunt compensator that the shunt compensator action is performed
    on
    '''

    ShuntCompensator: Optional[ShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.ShuntCompensatorAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The shunt compensator that the shunt compensator action is performed on
            '''

        })
    '''
    The shunt compensator that the shunt compensator action is performed
    on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    kind: Optional[ SwitchActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching action to perform.
            '''

        })
    '''
    Switching action to perform.
    '''

    OperatedSwitch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switch that is the object of this switch action.
            '''

        })
    '''
    Switch that is the object of this switch action.
    '''

    PlannedOutage: Optional[Outage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Outage.PlannedSwitchActions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Planned outage for whose scope this switch action applies.
            '''

        })
    '''
    Planned outage for whose scope this switch action applies.
    '''

    OperatedSwitch: Optional[Switch] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Switch.SwitchAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TagAction(SwitchingAction):
    '''
    Action on operation tag as a switching step.
    '''

    kind: Optional[ TagActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of tag action.
            '''

        })
    '''
    Kind of tag action.
    '''

    OperationalTag: Optional[OperationalTag] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalTag.TagAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tag associated with this tag action.
            '''

        })
    '''
    Tag associated with this tag action.
    '''

    OperationalTag: Optional[OperationalTag] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalTag.TagAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Tag associated with this tag action.
            '''

        })
    '''
    Tag associated with this tag action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VerificationAction(SwitchingAction):
    '''
    Verification of a switch position or other condition as a switching step
    '''

    verificationCondition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            freeform description of the condition to be verified
            '''

        })
    '''
    freeform description of the condition to be verified
    '''

    PowerSystemResource: Optional[PowerSystemResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.VerificationAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The power system resource that the verification action is performed on
            '''

        })
    '''
    The power system resource that the verification action is performed
    on
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TACArea(IdentifiedObject):
    '''
    Transmission Access Charge Area. Charges assessed, on behalf of the Participating
    Transmission Owner, to parties who require access to the controlled grid.
    '''

    AreaLoadCurve: list[AreaLoadCurve] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AreaLoadCurve.TACArea',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Tender(IdentifiedObject):
    '''
    Tender is what is "offered" by the customer towards making a payment and
    is often more than the required payment (hence the need for 'change').
    The payment is thus that part of the Tender that goes towards settlement
    of a particular transaction.
    Tender is modelled as an aggregation of Cheque and Card. Both these tender
    types can exist in a single tender bid thus 'accountHolderName' has to
    exist separately in each of Cheque and Card as each could have a different
    account holder name.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount tendered by customer.
            '''

        })
    '''
    Amount tendered by customer.
    '''

    change: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Difference between amount tendered by customer and the amount charged by
            point of sale.
            '''

        })
    '''
    Difference between amount tendered by customer and the amount charged
    by point of sale.
    '''

    kind: Optional[ TenderKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of tender from customer.
            '''

        })
    '''
    Kind of tender from customer.
    '''

    Card: Optional[Card] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Card.Tender',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Card used to tender payment.
            '''

        })
    '''
    Card used to tender payment.
    '''

    Cheque: Optional[Cheque] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cheque.Tender',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cheque used to tender payment.
            '''

        })
    '''
    Cheque used to tender payment.
    '''

    Receipt: Optional[Receipt] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Receipt.Tenders',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Receipt that recorded this receiving of a payment in the form of tenders.
            '''

        })
    '''
    Receipt that recorded this receiving of a payment in the form of tenders.
    '''

    Card: Optional[Card] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Card.Tender',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Card used to tender payment.
            '''

        })
    '''
    Card used to tender payment.
    '''

    Cheque: Optional[Cheque] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Cheque.Tender',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Cheque used to tender payment.
            '''

        })
    '''
    Cheque used to tender payment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TestStandard(IdentifiedObject):
    '''
    The precise standard used in executing a lab test, including the standard,
    and standard version, test method and variant, if needed.
    '''

    testMethod: Optional[ TestMethod ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identification of test method used if multiple methods specified by test
            standard.
            '''

        })
    '''
    Identification of test method used if multiple methods specified by
    test standard.
    '''

    testVariant: Optional[ TestVariantKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identification of variant of test method or standard if one is specified
            by the standard.
            '''

        })
    '''
    Identification of variant of test method or standard if one is specified
    by the standard.
    '''

    AssetAnalog: list[AssetAnalog] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetAnalog.TestStandard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An asset health analog related to this lab test standard.
            '''

        })
    '''
    An asset health analog related to this lab test standard.
    '''

    AssetDiscrete: list[AssetDiscrete] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetDiscrete.TestStandard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An asset health discrete related to this lab test standard.
            '''

        })
    '''
    An asset health discrete related to this lab test standard.
    '''

    AssetString: list[AssetStringMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AssetStringMeasurement.TestStandard',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            An asset health string related to this lab test standard.
            '''

        })
    '''
    An asset health string related to this lab test standard.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ControlArea.TieFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.TieFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The terminal to which this tie flow belongs.
            '''

        })
    '''
    The terminal to which this tie flow belongs.
    '''

    AltTieMeas: list[AltTieMeas] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AltTieMeas.TieFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ControlArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TieLine(IdentifiedObject):
    '''
    '''

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.TieLines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A dynamic energy transaction can act as a pseudo tie line.
            '''

        })
    '''
    A dynamic energy transaction can act as a pseudo tie line.
    '''

    ParentOfB: Optional[CustomerConsumer] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerConsumer.CustChildOf',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A CustomerConsumer may ring its perimeter with metering, which can create
            a unique SubControlArea at the collection of metering points, called a
            TieLine.
            '''

        })
    '''
    A CustomerConsumer may ring its perimeter with metering, which can
    create a unique SubControlArea at the collection of metering points,
    called a TieLine.
    '''

    SideA_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.SideA_TieLines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The SubControlArea is on the A side of a collection of metered points which
            define the SubControlArea's boundary for a ControlAreaOperator or CustomerConsumer.
            '''

        })
    '''
    The SubControlArea is on the A side of a collection of metered points
    which define the SubControlArea's boundary for a ControlAreaOperator
    or CustomerConsumer.
    '''

    SideB_SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.SideB_TieLines',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The SubControlArea is on the B side of a collection of metered points which
            define the SubControlArea's boundary for a ControlAreaOperator or CustomerConsumer.
            '''

        })
    '''
    The SubControlArea is on the B side of a collection of metered points
    which define the SubControlArea's boundary for a ControlAreaOperator
    or CustomerConsumer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @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.
    '''

    tiePointMWRating: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The MW rating of the tie point.
            '''

        })
    '''
    The MW rating of the tie point.
    '''

    ByMktMeasurement: list[MktMeasurement] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MktMeasurement.ByTiePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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'.
    '''

    TimeSchedule: Optional[TimeSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TimeSchedule.TimePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time schedule owning this time point.
            '''

        })
    '''
    Time schedule owning this time point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TimeSeries(IdentifiedObject):
    '''
    A set of regular time-ordered measurements or values of quantitative nature
    of an individual or collective phenomenon taken at successive, in most
    cases equidistant, periods / points of time.
    '''

    businessType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The identification of the nature of the time series.
            '''

        })
    '''
    The identification of the nature of the time series.
    '''

    cancelledTS: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An indicator stating that the TimeSeries, identified by the mRID, is cancelled
            as well as all the values sent in a previous version of the TimeSeries
            in a previous document.
            '''

        })
    '''
    An indicator stating that the TimeSeries, identified by the mRID, is
    cancelled as well as all the values sent in a previous version of the
    TimeSeries in a previous document.
    '''

    curveType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded representation of the type of curve being described.
            '''

        })
    '''
    The coded representation of the type of curve being described.
    '''

    objectAggregation: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identification of the object that is the common denominator used to aggregate
            a time series.
            '''

        })
    '''
    Identification of the object that is the common denominator used to
    aggregate a time series.
    '''

    product: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the product such as Power, energy, reactive power, transport
            capacity that is the subject of the time series.
            '''

        })
    '''
    The type of the product such as Power, energy, reactive power, transport
    capacity that is the subject of the time series.
    '''

    version: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Version of the time series.
            '''

        })
    '''
    Version of the time series.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class BidTimeSeries(TimeSeries):
    '''
    The formal specification of specific characteristics related to a bid.
    '''

    blockBid: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that the values in the period are considered as a whole. They
            cannot be changed or subdivided.
            '''

        })
    '''
    Indication that the values in the period are considered as a whole.
    They cannot be changed or subdivided.
    '''

    direction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded identification of the energy flow.
            '''

        })
    '''
    The coded identification of the energy flow.
    '''

    divisible: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An indication whether or not each element of the bid may be partially accepted
            or not.
            '''

        })
    '''
    An indication whether or not each element of the bid may be partially
    accepted or not.
    '''

    exclusiveBidsIdentification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identification associated with all linked tenders.
            The identification of a set of tenders that are linked together signifying
            that only one can be accepted.
            This identification is defined by the tenderer and must be unique for a
            given auction.
            '''

        })
    '''
    Unique identification associated with all linked tenders.
    The identification of a set of tenders that are linked together signifying
    that only one can be accepted.
    This identification is defined by the tenderer and must be unique for
    a given auction.
    '''

    linkedBidsIdentification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique identification associated with all linked bids.
            '''

        })
    '''
    Unique identification associated with all linked bids.
    '''

    minimumActivationQuantity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum quantity of energy that can be activated at a given time interval.
            '''

        })
    '''
    The minimum quantity of energy that can be activated at a given time
    interval.
    '''

    priority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The numeric local priority given to a bid. Lower numeric values will have
            higher priority.
            '''

        })
    '''
    The numeric local priority given to a bid. Lower numeric values will
    have higher priority.
    '''

    status: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The information about the status of the bid, such as "shared", "restricted",
            ...
            '''

        })
    '''
    The information about the status of the bid, such as "shared", "restricted",
    ...
    '''

    stepIncrementQuantity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum increment that can be applied for an increase in an activation
            request.
            '''

        })
    '''
    The minimum increment that can be applied for an increase in an activation
    request.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Series(TimeSeries):
    '''
    A set of similar physical or conceptual objects defined for the same period
    or point of time.
    '''

    lastUpdateDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date of the last update related to this market object.
            '''

        })
    '''
    The date of the last update related to this market object.
    '''

    methodType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of method used in the business process related to this Series, e.g.
            metering method.
            '''

        })
    '''
    Type of method used in the business process related to this Series,
    e.g. metering method.
    '''

    registrationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For a market object, the date of registration of a contract, e.g. the date
            of change of supplier for a customer.
            '''

        })
    '''
    For a market object, the date of registration of a contract, e.g. the
    date of change of supplier for a customer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Topology'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Trade(IdentifiedObject):
    '''
    Inter Scheduling Coordinator Trades to model financial trades which may
    impact settlement.
    '''

    adjustedTradeQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The validated and current market accepted trade amount of a physical energy
            trade.
            '''

        })
    '''
    The validated and current market accepted trade amount of a physical
    energy trade.
    '''

    counterTradeQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW quantity submitted by counter SC for the same trade
            '''

        })
    '''
    MW quantity submitted by counter SC for the same trade
    '''

    dependOnTradeName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Depend On IST Name points to the unique IST Name in the chain of physical
            energy trades.
            '''

        })
    '''
    The Depend On IST Name points to the unique IST Name in the chain of
    physical energy trades.
    '''

    lastModified: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time and date the trade was last modified.
            '''

        })
    '''
    Time and date the trade was last modified.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time and date for which trade applies.
            '''

        })
    '''
    Start time and date for which trade applies.
    '''

    stopTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stop time and date for which trade is applicable.
            '''

        })
    '''
    Stop time and date for which trade is applicable.
    '''

    submitFromTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp of submittal of submit From Scheduling Coordinator Trade to Market
            Participant Bid Submittal
            '''

        })
    '''
    Timestamp of submittal of submit From Scheduling Coordinator Trade
    to Market Participant Bid Submittal
    '''

    submitFromUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Userid of the submit From Scheduling Coordinator trade
            '''

        })
    '''
    Userid of the submit From Scheduling Coordinator trade
    '''

    submitToTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp of submittal of submit To Scheduling Coordinator Trade to Market
            Participant Bid Submittal
            '''

        })
    '''
    Timestamp of submittal of submit To Scheduling Coordinator Trade to
    Market Participant Bid Submittal
    '''

    submitToUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Userid of the submit To Scheduling Coordinator trade
            '''

        })
    '''
    Userid of the submit To Scheduling Coordinator trade
    '''

    tradeQuantity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            tradeQuantity:
            If tradeType = IST, The amount of an Energy Trade.
            If tradeType = AST, The amount of an Ancillary Service Obligation Trade.
            If tradeType = UCT, The amount of a Unit Commitment Obligation Trade.
            '''

        })
    '''
    tradeQuantity:
    If tradeType = IST, The amount of an Energy Trade.
    If tradeType = AST, The amount of an Ancillary Service Obligation Trade.
    If tradeType = UCT, The amount of a Unit Commitment Obligation Trade.
    '''

    tradeStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resulting status of the trade following the rule engine processing.
            '''

        })
    '''
    Resulting status of the trade following the rule engine processing.
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ActionRequest: Optional[ActionRequest] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ActionRequest.Trade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    From_SC: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.FromSCTrade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.Trade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredGenerator: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.Trade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    submitFromSchedulingCoordinator: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.SubmitFromSCTrade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    submitToSchedulingCoordinator: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.SubmitToSCTrade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    To_SC: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.ToSCTrade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TradeProduct: Optional[TradeProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TradeProduct.Trade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TradeError: list[TradeError] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TradeError.Trade',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TradeError(IdentifiedObject):
    '''
    Trade error and warning messages associated with the rule engine processing
    of the submitted trade.
    '''

    endTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            hour wihthin the trade for which the error applies
            '''

        })
    '''
    hour wihthin the trade for which the error applies
    '''

    errMessage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            error message
            '''

        })
    '''
    error message
    '''

    errPriority: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority number for the error message
            '''

        })
    '''
    Priority number for the error message
    '''

    logTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Timestamp of logged error/warning message
            '''

        })
    '''
    Timestamp of logged error/warning message
    '''

    ruleID: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rule identifier which triggered the error/warning message
            '''

        })
    '''
    Rule identifier which triggered the error/warning message
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            hour wihthin the trade for which the error applies
            '''

        })
    '''
    hour wihthin the trade for which the error applies
    '''

    Trade: Optional[Trade] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Trade.TradeError',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @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.
    '''

    diverseReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Formal reference for use with diverse payment (traffic fine for example).
            '''

        })
    '''
    Formal reference for use with diverse payment (traffic fine for example).
    '''

    donorReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference to the entity that is the source of 'amount' (for example: customer
            for token purchase; or supplier for free issue token).
            '''

        })
    '''
    Reference to the entity that is the source of 'amount' (for example:
    customer for token purchase; or supplier for free issue token).
    '''

    receiverReference: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reference to the entity that is the recipient of 'amount' (for example,
            supplier for service charge payment; or tax receiver for VAT).
            '''

        })
    '''
    Reference to the entity that is the recipient of 'amount' (for example,
    supplier for service charge payment; or tax receiver for VAT).
    '''

    reversedId: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if 'kind' is transactionReversal) Reference to the original transaction
            that is being reversed by this transaction.
            '''

        })
    '''
    (if 'kind' is transactionReversal) Reference to the original transaction
    that is being reversed by this transaction.
    '''

    kind: Optional[ TransactionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of transaction.
            '''

        })
    '''
    Kind of transaction.
    '''

    serviceUnitsEnergy: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Actual amount of service units that is being paid for.
            '''

        })
    '''
    Actual amount of service units that is being paid for.
    '''

    serviceUnitsError: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of service units not reflected in 'serviceUnitsEnergy' due to process
            rounding or truncating errors.
            '''

        })
    '''
    Number of service units not reflected in 'serviceUnitsEnergy' due to
    process rounding or truncating errors.
    '''

    AuxiliaryAccount: Optional[AuxiliaryAccount] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AuxiliaryAccount.PaymentTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Auxiliary account for this payment transaction.
            '''

        })
    '''
    Auxiliary account for this payment transaction.
    '''

    CashierShift: Optional[CashierShift] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CashierShift.Transactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cashier shift during which this transaction was recorded.
            '''

        })
    '''
    Cashier shift during which this transaction was recorded.
    '''

    CustomerAccount: Optional[CustomerAccount] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAccount.PaymentTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer account for this payment transaction.
            '''

        })
    '''
    Customer account for this payment transaction.
    '''

    Meter: Optional[Meter] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Meter.VendingTransactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter for this vending transaction.
            '''

        })
    '''
    Meter for this vending transaction.
    '''

    PricingStructure: Optional[PricingStructure] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PricingStructure.Transactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pricing structure applicable for this transaction.
            '''

        })
    '''
    Pricing structure applicable for this transaction.
    '''

    Receipt: Optional[Receipt] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Receipt.Transactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The receipted payment for which this transaction has been recorded.
            '''

        })
    '''
    The receipted payment for which this transaction has been recorded.
    '''

    VendorShift: Optional[VendorShift] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VendorShift.Transactions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Vendor shift during which this transaction was recorded.
            '''

        })
    '''
    Vendor shift during which this transaction was recorded.
    '''

    UserAttributes: list[UserAttribute] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UserAttribute.Transaction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransactionBidResults(IdentifiedObject):
    '''
    Contains the cleared results for each TransactionBid submitted to and accepted
    by the market.
    '''

    clearedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The market transaction megawatt
            '''

        })
    '''
    The market transaction megawatt
    '''

    clearedPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The price of the market transaction
            '''

        })
    '''
    The price of the market transaction
    '''

    TransactionBid: Optional[TransactionBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransactionBid.TransactionBidResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransactionBidClearing: Optional[TransactionBidClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransactionBidClearing.TransactionBidResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Transactor(IdentifiedObject):
    '''
    The entity that ultimately executes the transaction and which is in control
    of the process; typically this is embodied in secure software running on
    a server that may employ secure hardware encryption devices for secure
    transaction processing.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransferInterface(IdentifiedObject):
    '''
    A Transfer Interface is made up of branches such as transmission lines
    and transformers.
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.TransferInterface',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterfaceSolution: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.TransferInterface',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterfaceSolution: Optional[TransferInterfaceSolution] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterfaceSolution.TransferInterface',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (for Yn and Zn connections) True if the neutral is solidly grounded.
            '''

        })
    '''
    (for Yn and Zn connections) True if the neutral is solidly grounded.
    '''

    bmagSat: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (for Yn and Zn connections) Resistance part of neutral impedance where
            'grounded' is true.
            '''

        })
    '''
    (for Yn and Zn connections) Resistance part of neutral impedance where
    'grounded' is true.
    '''

    xground: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (for Yn and Zn connections) Reactive part of neutral impedance where 'grounded'
            is true.
            '''

        })
    '''
    (for Yn and Zn connections) Reactive part of neutral impedance where
    'grounded' is true.
    '''

    BaseVoltage: Optional[BaseVoltage] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseVoltage.TransformerEnds',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    FromWindingInsulations: list[WindingInsulation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindingInsulation.FromWinding',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ToWindingInsulations: list[WindingInsulation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindingInsulation.ToWinding',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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) for a two Terminal PowerTransformer the high voltage (TransformerEnd.endNumber=1)
    PowerTransformerEnd has non zero values on r, r0, x, and x0 while the low
    voltage (TransformerEnd.endNumber=2) PowerTransformerEnd has zero values
    for r, r0, x, and x0. Parameters are always provided, even if the PowerTransformerEnds
    have the same rated voltage. In this case, the parameters are provided
    at the PowerTransformerEnd which has TransformerEnd.endNumber equal to
    1.
    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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence magnetizing branch susceptance.
            '''

        })
    '''
    Zero sequence magnetizing branch susceptance.
    '''

    connectionKind: Optional[ WindingConnection ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of connection.
            '''

        })
    '''
    Kind of connection.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence series reactance of the transformer end.
            '''

        })
    '''
    Zero sequence series reactance of the transformer end.
    '''

    PowerTransformer: Optional[PowerTransformer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerTransformer.PowerTransformerEnd',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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).
    '''

    phases: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transformer this winding belongs to.
            '''

        })
    '''
    Transformer this winding belongs to.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.FromMeshImpedance',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All transformer ends this mesh impedance is connected to.
            '''

        })
    '''
    All transformer ends this mesh impedance is connected to.
    '''

    ToTransformerEndInfos: list[TransformerEndInfo] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransformerEndInfo.ToMeshImpedances',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            All 'to' transformer end datasheets this mesh impedance for 'from' transformer
            end is calculated from.
            '''

        })
    '''
    All 'to' transformer end datasheets this mesh impedance for 'from'
    transformer end is calculated from.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerObservation(IdentifiedObject):
    '''
    Common information captured during transformer inspections and/or diagnostics.
    Note that some properties may be measured through other means and therefore
    have measurement values in addition to the observed values recorded here.
    '''

    dga: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dissolved Gas Analysis. Typical values are: Acceptable, Overheating, Corona,
            Sparking, Arcing.
            '''

        })
    '''
    Dissolved Gas Analysis. Typical values are: Acceptable, Overheating,
    Corona, Sparking, Arcing.
    '''

    freqResp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Frequency Response Analysis. Typical values are: acceptable, slight movement,
            significant movement, failed, near failure. A graphic of the response diagram,
            which is a type of document, may be associated with this analysis through
            the recursive document relationship of the ProcedureDataSet.
            '''

        })
    '''
    Frequency Response Analysis. Typical values are: acceptable, slight
    movement, significant movement, failed, near failure. A graphic of
    the response diagram, which is a type of document, may be associated
    with this analysis through the recursive document relationship of the
    ProcedureDataSet.
    '''

    furfuralDP: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overall measure of furfural in oil and mechanical strength of paper. DP,
            the degree of polymerization, is the strength of the paper. Furfural is
            a measure of furfural compounds, often expressed in parts per million.
            '''

        })
    '''
    Overall measure of furfural in oil and mechanical strength of paper.
    DP, the degree of polymerization, is the strength of the paper. Furfural
    is a measure of furfural compounds, often expressed in parts per million.
    '''

    oilColor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Oil Quality Analysis-Color.
            '''

        })
    '''
    Oil Quality Analysis-Color.
    '''

    oilIFT: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Oil Quality Analysis- inter facial tension (IFT) - number-Dynes/CM.
            '''

        })
    '''
    Oil Quality Analysis- inter facial tension (IFT) - number-Dynes/CM.
    '''

    oilLevel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The level of oil in the transformer.
            '''

        })
    '''
    The level of oil in the transformer.
    '''

    oilNeutralizationNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Oil Quality Analysis-Neutralization Number - Number - Mg KOH.
            '''

        })
    '''
    Oil Quality Analysis-Neutralization Number - Number - Mg KOH.
    '''

    pumpVibration: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pump vibration, with typical values being: nominal, high.
            '''

        })
    '''
    Pump vibration, with typical values being: nominal, high.
    '''

    waterContent: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Water Content expressed in parts per million.
            '''

        })
    '''
    Water Content expressed in parts per million.
    '''

    bushingTemp: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bushing temperature.
            '''

        })
    '''
    Bushing temperature.
    '''

    hotSpotTemp: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Hotspot oil temperature.
            '''

        })
    '''
    Hotspot oil temperature.
    '''

    oilDielectricStrength: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Oil Quality Analysis-Dielectric Strength.
            '''

        })
    '''
    Oil Quality Analysis-Dielectric Strength.
    '''

    topOilTemp: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Top oil temperature.
            '''

        })
    '''
    Top oil temperature.
    '''

    Reconditioning: Optional[Reconditioning] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Reconditioning.TransformerObservations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Transformer: Optional[TransformerTank] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerTank.TransformerObservations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BushingInsultationPFs: list[BushingInsulationPF] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'BushingInsulationPF.TransformerObservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WindingInsulationPFs: list[WindingInsulation] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindingInsulation.TransformerObservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Temperature at which the test is conducted.
            '''

        })
    '''
    Temperature at which the test is conducted.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.EnergisedEndOpenCircuitTests',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.OpenEndOpenCircuitTests',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Short circuit voltage..
            '''

        })
    '''
    Short circuit voltage..
    '''

    EnergisedEnd: Optional[TransformerEndInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEndInfo.EnergisedEndShortCircuitTests',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransmissionPath(IdentifiedObject):
    '''
    An electrical connection, link, or line consisting of one or more parallel
    transmission elements between two areas of the interconnected electric
    systems, or portions thereof. TransmissionCorridor and TransmissionRightOfWay
    refer to legal aspects. The TransmissionPath refers to the segments between
    a TransmissionProvider's ServicePoints.
    '''

    parallelPathFlag: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Flag which indicates if the transmission path is also a designated interconnection
            "parallel path".
            '''

        })
    '''
    Flag which indicates if the transmission path is also a designated
    interconnection "parallel path".
    '''

    availTransferCapability: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The available transmission capability of a transmission path for the reference
            direction.
            '''

        })
    '''
    The available transmission capability of a transmission path for the
    reference direction.
    '''

    totalTransferCapability: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The total transmission capability of a transmission path in the reference
            direction.
            '''

        })
    '''
    The total transmission capability of a transmission path in the reference
    direction.
    '''

    DeliveryPoint: Optional[ServicePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ServicePoint.PODTransmissionPath',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A transmission path has a "point-of-delivery" service point
            '''

        })
    '''
    A transmission path has a "point-of-delivery" service point
    '''

    For: Optional[TransmissionCorridor] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransmissionCorridor.ContainedIn',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A TransmissionPath is contained in a TransmissionCorridor.
            '''

        })
    '''
    A TransmissionPath is contained in a TransmissionCorridor.
    '''

    PointOfReceipt: Optional[ServicePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ServicePoint.PORTransmissionPath',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A transmission path has a "point-of-receipt" service point
            '''

        })
    '''
    A transmission path has a "point-of-receipt" service point
    '''

    TransmissionReservation: list[TransmissionReservation] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TransmissionReservation.TransmissionPath',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransmissionProduct(IdentifiedObject):
    '''
    '''

    transmissionProductType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of the transmission product. This could be a transmission service
            class (firm, total transmission capability, or non-firm), transmission
            service period (on-peak, full-period, off-peak), transmission service increments
            (yearly extended, hourly fixed, monthly sliding, etc.), transmission service
            type (network, available transmission capability, or point-to-point, or
            a transmission service window (fixed hourly, sliding weekly, extended monthly,
            etc.).
            '''

        })
    '''
    Type of the transmission product. This could be a transmission service
    class (firm, total transmission capability, or non-firm), transmission
    service period (on-peak, full-period, off-peak), transmission service
    increments (yearly extended, hourly fixed, monthly sliding, etc.),
    transmission service type (network, available transmission capability,
    or point-to-point, or a transmission service window (fixed hourly,
    sliding weekly, extended monthly, etc.).
    '''

    TransmissionProvider: Optional[TransmissionProvider] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransmissionProvider.TransmissionProducts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A TransmissionProvider offers a TransmissionProduct.
            '''

        })
    '''
    A TransmissionProvider offers a TransmissionProduct.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfFinancial'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransmissionRightChain(IdentifiedObject):
    '''
    Allows chaining of TransmissionContractRights. Many individual contract
    rights can be included in the definition of a TransmissionRightChain. A
    TransmissionRightChain is also defined as a TransmissionContractRight itself.
    '''

    Chain_ContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ContractRight.Chain_TransmissionRightChain',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RTO: Optional[RTO] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RTO.TransmissionRightChain',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Chain_ContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContractRight.Chain_TransmissionRightChain',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Ind_ContractRight: list[ContractRight] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ContractRight.Ind_TransmissionRightChain',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TriggerCondition(IdentifiedObject):
    '''
    A conditions that can trigger remedial actions.
    '''

    GateTrigger: Optional[Gate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Gate.TriggerCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The resulting Gate that is the condition for the Trigger.
            '''

        })
    '''
    The resulting Gate that is the condition for the Trigger.
    '''

    RemedialActionScheme: Optional[RemedialActionScheme] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RemedialActionScheme.TriggerCondition',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class TypeAssetCatalogue(IdentifiedObject):
    '''
    Catalogue of generic types of assets (TypeAsset) that may be used for design
    purposes. It is not associated with a particular manufacturer.
    '''

    TypeAssets: list[CatalogAssetType] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CatalogAssetType.TypeAssetCatalogue',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfTypeAsset'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnavailabilityScheduleDependency(IdentifiedObject):
    '''
    '''

    UnavailabilityScheduleDependsOn: Optional[UnavailablitySchedule] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'UnavailablitySchedule.Impacts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    UnavailabilityScheduleImpacts: Optional[UnavailablitySchedule] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'UnavailablitySchedule.DependsOn',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAvailabilityPlans'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnavailabilitySwitchAction(IdentifiedObject):
    '''
    Relevant switching action for supporting the availability (or unavailability)
    plans. This could open or close a switch that is not directly connected
    to the unavailable equipment .
    '''

    open: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switch is to be open during the scheduled period.
            '''

        })
    '''
    The switch is to be open during the scheduled period.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAvailabilityPlans'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class UnavailablitySchedule(IdentifiedObject):
    '''
    A schedule of unavailability for one or more specified equipment that need
    to follow the same scheduling periods.
    '''

    Impacts: list[UnavailabilityScheduleDependency] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UnavailabilityScheduleDependency.UnavailabilityScheduleDependsOn',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    DependsOn: list[UnavailabilityScheduleDependency] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'UnavailabilityScheduleDependency.UnavailabilityScheduleImpacts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAvailabilityPlans'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UnitInitialConditions(IdentifiedObject):
    '''
    Resource status at the end of a given clearing period.
    '''

    cumStatusChanges: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cumulative number of status changes of the resource.
            '''

        })
    '''
    Cumulative number of status changes of the resource.
    '''

    numberOfStartups: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of start ups in the Operating Day until the end of previous hour.
            '''

        })
    '''
    Number of start ups in the Operating Day until the end of previous
    hour.
    '''

    onlineStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            'true' if the GeneratingUnit is currently On-Line
            '''

        })
    '''
    'true' if the GeneratingUnit is currently On-Line
    '''

    resourceStatus: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource status at the end of previous clearing period:
            0 - off-line
            1 - on-line production
            2 - in shutdown process
            3 - in startup process
            '''

        })
    '''
    Resource status at the end of previous clearing period:
    0 - off-line
    1 - on-line production
    2 - in shutdown process
    3 - in startup process
    '''

    statusDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time and date for resourceStatus
            '''

        })
    '''
    Time and date for resourceStatus
    '''

    timeInStatus: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time in market trading intervals the resource is in the state as of the
            end of the previous clearing period.
            '''

        })
    '''
    Time in market trading intervals the resource is in the state as of
    the end of the previous clearing period.
    '''

    timeInterval: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time interval
            '''

        })
    '''
    Time interval
    '''

    cumEnergy: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cumulative energy production over trading period.
            '''

        })
    '''
    Cumulative energy production over trading period.
    '''

    resourceMW: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource MW output at the end of previous clearing period.
            '''

        })
    '''
    Resource MW output at the end of previous clearing period.
    '''

    GeneratingUnit: Optional[RegisteredGenerator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredGenerator.UnitInitialConditions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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.
    '''

    checkBilling: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if as a result of an inspection or otherwise, there is a reason to
            suspect that a previous billing may have been performed with erroneous
            data. Value should be reset once this potential discrepancy has been resolved.
            '''

        })
    '''
    True if as a result of an inspection or otherwise, there is a reason
    to suspect that a previous billing may have been performed with erroneous
    data. Value should be reset once this potential discrepancy has been
    resolved.
    '''

    connectionCategory: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A code used to specify the connection category, e.g., low voltage or low
            pressure, where the usage point is defined.
            '''

        })
    '''
    A code used to specify the connection category, e.g., low voltage or
    low pressure, where the usage point is defined.
    '''

    disconnectionMethod: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is an indication of how the usage point is physically connected or disconnected.
            '''

        })
    '''
    Is an indication of how the usage point is physically connected or
    disconnected.
    '''

    grounded: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if grounded.
            '''

        })
    '''
    True if grounded.
    '''

    isSdp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this usage point is a service delivery point, i.e., a usage point
            where the ownership of the service changes hands.
            '''

        })
    '''
    If true, this usage point is a service delivery point, i.e., a usage
    point where the ownership of the service changes hands.
    '''

    isVirtual: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, this usage point is virtual, i.e., no physical location exists
            in the network where a meter could be located to collect the meter readings.
            For example, one may define a virtual usage point to serve as an aggregation
            of usage for all of a company's premises distributed widely across the
            distribution territory. Otherwise, the usage point is physical, i.e., there
            is a logical point in the network where a meter could be located to collect
            meter readings.
            '''

        })
    '''
    If true, this usage point is virtual, i.e., no physical location exists
    in the network where a meter could be located to collect the meter
    readings. For example, one may define a virtual usage point to serve
    as an aggregation of usage for all of a company's premises distributed
    widely across the distribution territory. Otherwise, the usage point
    is physical, i.e., there is a logical point in the network where a
    meter could be located to collect meter readings.
    '''

    minimalUsageExpected: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, minimal or zero usage is expected at this usage point for situations
            such as premises vacancy, logical or physical disconnect. It is used for
            readings validation and estimation.
            '''

        })
    '''
    If true, minimal or zero usage is expected at this usage point for
    situations such as premises vacancy, logical or physical disconnect.
    It is used for readings validation and estimation.
    '''

    outageRegion: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Outage region in which this usage point is located.
            '''

        })
    '''
    Outage region in which this usage point is located.
    '''

    phaseCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of potential phases the Usage Point supports, typically 0, 1 or
            3.
            '''

        })
    '''
    Number of potential phases the Usage Point supports, typically 0, 1
    or 3.
    '''

    readCycle: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cycle day on which the meter for this usage point will normally be read.
            Usually correlated with the billing cycle.
            '''

        })
    '''
    Cycle day on which the meter for this usage point will normally be
    read. Usually correlated with the billing cycle.
    '''

    readRoute: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifier of the route to which this usage point is assigned for purposes
            of meter reading. Typically used to configure hand held meter reading systems
            prior to collection of reads.
            '''

        })
    '''
    Identifier of the route to which this usage point is assigned for purposes
    of meter reading. Typically used to configure hand held meter reading
    systems prior to collection of reads.
    '''

    serviceDeliveryRemark: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Remarks about this usage point, for example the reason for it being rated
            with a non-nominal priority.
            '''

        })
    '''
    Remarks about this usage point, for example the reason for it being
    rated with a non-nominal priority.
    '''

    servicePriority: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Priority of service for this usage point. Note that usage points at the
            same service location can have different priorities.
            '''

        })
    '''
    Priority of service for this usage point. Note that usage points at
    the same service location can have different priorities.
    '''

    amiBillingReady: Optional[ AmiBillingReadyKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tracks the lifecycle of the metering installation at a usage point with
            respect to readiness for billing via advanced metering infrastructure reads.
            '''

        })
    '''
    Tracks the lifecycle of the metering installation at a usage point
    with respect to readiness for billing via advanced metering infrastructure
    reads.
    '''

    connectionState: Optional[ UsagePointConnectedKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            State of the usage point with respect to connection to the network.
            '''

        })
    '''
    State of the usage point with respect to connection to the network.
    '''

    estimatedLoad: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated load.
            '''

        })
    '''
    Estimated load.
    '''

    nominalServiceVoltage: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Nominal service voltage.
            '''

        })
    '''
    Nominal service voltage.
    '''

    phaseCode: Optional[ PhaseCode ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    ratedCurrent: Optional[ float | CurrentFlow ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current flow that this usage point is configured to deliver.
            '''

        })
    '''
    Current flow that this usage point is configured to deliver.
    '''

    ratedPower: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active power that this usage point is configured to deliver.
            '''

        })
    '''
    Active power that this usage point is configured to deliver.
    '''

    CustomerAgreement: Optional[CustomerAgreement] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CustomerAgreement.UsagePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Customer agreement regulating this service delivery point.
            '''

        })
    '''
    Customer agreement regulating this service delivery point.
    '''

    EnvironmentalMonitoringStation: Optional[EnvironmentalMonitoringStation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalMonitoringStation.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the usage point
            '''

        })
    '''
    Meter read schedule that applies to the usage point
    '''

    ServiceCategory: Optional[ServiceCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceCategory.UsagePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service category delivered by this usage point.
            '''

        })
    '''
    Service category delivered by this usage point.
    '''

    ServiceLocation: Optional[ServiceLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceLocation.UsagePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Service location where the service delivered by this usage point is consumed.
            '''

        })
    '''
    Service location where the service delivered by this usage point is
    consumed.
    '''

    ServiceSupplier: Optional[ServiceSupplier] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServiceSupplier.UsagePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ServiceSupplier (utility) utilising this usage point to deliver a service.
            '''

        })
    '''
    ServiceSupplier (utility) utilising this usage point to deliver a service.
    '''

    UsagePointLocation: Optional[UsagePointLocation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UsagePointLocation.UsagePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location of this usage point.
            '''

        })
    '''
    Location of this usage point.
    '''

    ConfigurationEvents: list[ConfigurationEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ConfigurationEvent.ChangedUsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All configuration events created for this usage point.
            '''

        })
    '''
    All configuration events created for this usage point.
    '''

    EndDevices: list[EndDevice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDevice.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end devices at this usage point.
            '''

        })
    '''
    All end devices at this usage point.
    '''

    EndDeviceEvents: list[EndDeviceEvent] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EndDeviceEvent.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All end device events reported for this usage point.
            '''

        })
    '''
    All end device events reported for this usage point.
    '''

    MeterReadings: list[MeterReading] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterReading.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All meter readings obtained from this usage point.
            '''

        })
    '''
    All meter readings obtained from this usage point.
    '''

    MeterServiceWorkTasks: list[MeterWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MeterWorkTask.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All meter service work tasks at this usage point.
            '''

        })
    '''
    All meter service work tasks at this usage point.
    '''

    Register: list[Register] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Register.Usage_Point',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All registers for quantities metered at this Usage Point.
            '''

        })
    '''
    All registers for quantities metered at this Usage Point.
    '''

    ServiceMultipliers: list[ServiceMultiplier] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ServiceMultiplier.UsagePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All multipliers applied at this usage point.
            '''

        })
    '''
    All multipliers applied at this usage point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketEvaluationPoint(UsagePoint):
    '''
    The identification of an entity where energy products are measured or computed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class UsagePointGroup(IdentifiedObject):
    '''
    Abstraction for management of group communications within a two-way AMR
    system or the data for a group of related usage points. Commands can be
    issued to all of the usage points that belong to a usage point group using
    a defined group address and the underlying AMR communication infrastructure.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this group.
            '''

        })
    '''
    Type of this group.
    '''

    MeterReadSchedule: Optional[MeterReadSchedule] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReadSchedule.UsagePointGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter read schedule that applies to the usage point group
            '''

        })
    '''
    Meter read schedule that applies to the usage point group
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ValueToAlias.ValueAliasSet',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The ValueToAlias mappings included in the set.
            '''

        })
    '''
    The ValueToAlias mappings included in the set.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The value that is mapped.
            '''

        })
    '''
    The value that is mapped.
    '''

    ValueAliasSet: Optional[ValueAliasSet] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ValueAliasSet.Values',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The ValueAliasSet having the ValueToAlias mappings.
            '''

        })
    '''
    The ValueAliasSet having the ValueToAlias mappings.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Vendor(IdentifiedObject):
    '''
    The entity that owns the point of sale and contracts with the cashier to
    receipt payments and vend tokens using the payment system. The vendor has
    a private contract with and is managed by the merchant which is a type
    of organisation. The vendor is accountable to the merchant for revenue
    collected, and the merchant is in turn accountable to the supplier.
    '''

    VendorShifts: list[VendorShift] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'VendorShift.Vendor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All vendor shifts opened and owned by this vendor.
            '''

        })
    '''
    All vendor shifts opened and owned by this vendor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DiagramLayout'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WheelingCounterParty(IdentifiedObject):
    '''
    Counter party in a wheeling transaction.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindAeroConstIEC(IdentifiedObject):
    '''
    Constant aerodynamic torque model which assumes that the aerodynamic torque
    is constant.
    Reference: IEC 61400-27-1:2015, 5.6.1.1.
    '''

    WindGenTurbineType1aIEC: Optional[WindGenTurbineType1aIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType1aIEC.WindAeroConstIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 1A model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 1A model with which this wind aerodynamic model is
    associated.
    '''

    WindGenTurbineType1aIEC: Optional[WindGenTurbineType1aIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType1aIEC.WindAeroConstIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 1A model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 1A model with which this wind aerodynamic model is
    associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindAeroOneDimIEC(IdentifiedObject):
    '''
    One-dimensional aerodynamic model.
    Reference: IEC 61400-27-1:2015, 5.6.1.2.
    '''

    ka: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aerodynamic gain (<i>k</i><i><sub>a</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Aerodynamic gain (<i>k</i><i><sub>a</sub></i>). It is a type-dependent
    parameter.
    '''

    thetaomega: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Initial pitch angle (<i>theta</i><i><sub>omega0</sub></i>). It is a case-dependent
            parameter.
            '''

        })
    '''
    Initial pitch angle (<i>theta</i><i><sub>omega0</sub></i>). It is a
    case-dependent parameter.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindAeroOneDimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind aerodynamic model is
    associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindAeroOneDimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind aerodynamic model is
    associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindAeroTwoDimIEC(IdentifiedObject):
    '''
    Two-dimensional aerodynamic model.
    Reference: IEC 61400-27-1:2015, 5.6.1.3.
    '''

    dpomega: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Partial derivative of aerodynamic power with respect to changes in WTR
            speed (<i>dp</i><i><sub>omega</sub></i>). It is a type-dependent parameter.
            '''

        })
    '''
    Partial derivative of aerodynamic power with respect to changes in
    WTR speed (<i>dp</i><i><sub>omega</sub></i>). It is a type-dependent
    parameter.
    '''

    dptheta: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Partial derivative of aerodynamic power with respect to changes in pitch
            angle (<i>dp</i><i><sub>theta</sub></i>). It is a type-dependent parameter.
            '''

        })
    '''
    Partial derivative of aerodynamic power with respect to changes in
    pitch angle (<i>dp</i><i><sub>theta</sub></i>). It is a type-dependent
    parameter.
    '''

    dpv1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Partial derivative (<i>dp</i><i><sub>v1</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Partial derivative (<i>dp</i><i><sub>v1</sub></i>). It is a type-dependent
    parameter.
    '''

    omegazero: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rotor speed if the wind turbine is not derated (<i>omega</i><i><sub>0</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Rotor speed if the wind turbine is not derated (<i>omega</i><i><sub>0</sub></i>).
    It is a type-dependent parameter.
    '''

    pavail: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Available aerodynamic power (<i>p</i><i><sub>avail</sub></i><i>)</i>. It
            is a case-dependent parameter.
            '''

        })
    '''
    Available aerodynamic power (<i>p</i><i><sub>avail</sub></i><i>)</i>.
    It is a case-dependent parameter.
    '''

    thetav2: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Blade angle at twice rated wind speed (<i>theta</i><i><sub>v2</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Blade angle at twice rated wind speed (<i>theta</i><i><sub>v2</sub></i>).
    It is a type-dependent parameter.
    '''

    thetazero: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pitch angle if the wind turbine is not derated (<i>theta</i><i><sub>0</sub></i>).
            It is a case-dependent parameter.
            '''

        })
    '''
    Pitch angle if the wind turbine is not derated (<i>theta</i><i><sub>0</sub></i>).
    It is a case-dependent parameter.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindAeroTwoDimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind aerodynamic model is
    associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindAeroTwoDimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind aerodynamic model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind aerodynamic model is
    associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContCurrLimIEC(IdentifiedObject):
    '''
    Current limitation model. The current limitation model combines the physical
    limits and the control limits.
    Reference: IEC 61400-27-1:2015, 5.6.5.8.
    '''

    mdfslim: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limitation of type 3 stator current (<i>M</i><i><sub>DFSLim</sub></i>).
            <i>M</i><i><sub>DFSLim</sub></i><sub> </sub>= 1 for wind turbines type
            4. It is a type-dependent parameter.
            false= total current limitation (0 in the IEC model)
            true=stator current limitation (1 in the IEC model).
            '''

        })
    '''
    Limitation of type 3 stator current (<i>M</i><i><sub>DFSLim</sub></i>).
    <i>M</i><i><sub>DFSLim</sub></i><sub> </sub>= 1 for wind turbines type
    4. It is a type-dependent parameter.
    false= total current limitation (0 in the IEC model)
    true=stator current limitation (1 in the IEC model).
    '''

    mqpri: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Prioritisation of Q control during UVRT (<i>M</i><i><sub>qpri</sub></i>).
            It is a project-dependent parameter.
            true = reactive power priority (1 in the IEC model)
            false = active power priority (0 in the IEC model).
            '''

        })
    '''
    Prioritisation of Q control during UVRT (<i>M</i><i><sub>qpri</sub></i>).
    It is a project-dependent parameter.
    true = reactive power priority (1 in the IEC model)
    false = active power priority (0 in the IEC model).
    '''

    imax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum continuous current at the wind turbine terminals (<i>i</i><i><sub>max</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum continuous current at the wind turbine terminals (<i>i</i><i><sub>max</sub></i>).
    It is a type-dependent parameter.
    '''

    imaxdip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum current during voltage dip at the wind turbine terminals (<i>i</i><i><sub>maxdip</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum current during voltage dip at the wind turbine terminals (<i>i</i><i><sub>maxdip</sub></i>).
    It is a project-dependent parameter.
    '''

    kpqu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Partial derivative of reactive current limit (<i>K</i><i><sub>pqu</sub></i>)
            versus voltage. It is a type-dependent parameter.
            '''

        })
    '''
    Partial derivative of reactive current limit (<i>K</i><i><sub>pqu</sub></i>)
    versus voltage. It is a type-dependent parameter.
    '''

    tufiltcl: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement filter time constant (<i>T</i><i><sub>ufiltcl</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement filter time constant (<i>T</i><i><sub>ufiltcl</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    upqumax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine voltage in the operation point where zero reactive current
            can be delivered (<i>u</i><i><sub>pqumax</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Wind turbine voltage in the operation point where zero reactive current
    can be delivered (<i>u</i><i><sub>pqumax</sub></i>). It is a type-dependent
    parameter.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContCurrLimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this wind control current
            limitation model is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this wind control current
    limitation model is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindContCurrLimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this current control limitation
            model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this current control
    limitation model.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContCurrLimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this wind control current
            limitation model is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this wind control current
    limitation model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContPType3IEC(IdentifiedObject):
    '''
    P control model type 3.
    Reference: IEC 61400-27-1:2015, 5.6.5.4.
    '''

    mpuvrt: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Enable UVRT power control mode (<i>M</i><i><sub>pUVRT</sub></i><sub>)</sub>.
            It is a project-dependent parameter.
            true = voltage control (1 in the IEC model)
            false = reactive power control (0 in the IEC model).
            '''

        })
    '''
    Enable UVRT power control mode (<i>M</i><i><sub>pUVRT</sub></i><sub>)</sub>.
    It is a project-dependent parameter.
    true = voltage control (1 in the IEC model)
    false = reactive power control (0 in the IEC model).
    '''

    zeta: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Coefficient for active drive train damping (<i>zeta</i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Coefficient for active drive train damping (<i>zeta</i>). It is a type-dependent
    parameter.
    '''

    dpmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum wind turbine power ramp rate (<i>dp</i><i><sub>max</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum wind turbine power ramp rate (<i>dp</i><i><sub>max</sub></i>).
    It is a type-dependent parameter.
    '''

    dprefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum ramp rate of wind turbine reference power (<i>dp</i><i><sub>refmax</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum ramp rate of wind turbine reference power (<i>dp</i><i><sub>refmax</sub></i>).
    It is a project-dependent parameter.
    '''

    dprefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum ramp rate of wind turbine reference power (<i>dp</i><i><sub>refmin</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Minimum ramp rate of wind turbine reference power (<i>dp</i><i><sub>refmin</sub></i>).
    It is a project-dependent parameter.
    '''

    dthetamax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ramp limitation of torque, required in some grid codes (<i>dt</i><i><sub>max</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Ramp limitation of torque, required in some grid codes (<i>dt</i><i><sub>max</sub></i>).
    It is a project-dependent parameter.
    '''

    dthetamaxuvrt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limitation of torque rise rate during UVRT (<i>dtheta</i><i><sub>maxUVRT</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Limitation of torque rise rate during UVRT (<i>dtheta</i><i><sub>maxUVRT</sub></i>).
    It is a project-dependent parameter.
    '''

    kdtd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Gain for active drive train damping (<i>K</i><i><sub>DTD</sub></i>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Gain for active drive train damping (<i>K</i><i><sub>DTD</sub></i>).
    It is a type-dependent parameter.
    '''

    kip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller integration parameter (<i>K</i><sub>Ip</sub>). It is a type-dependent
            parameter.
            '''

        })
    '''
    PI controller integration parameter (<i>K</i><sub>Ip</sub>). It is
    a type-dependent parameter.
    '''

    kpp: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PI controller proportional gain (<i>K</i><sub>Pp</sub>). It is a type-dependent
            parameter.
            '''

        })
    '''
    PI controller proportional gain (<i>K</i><sub>Pp</sub>). It is a type-dependent
    parameter.
    '''

    omegadtd: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Active drive train damping frequency (<i>omega</i><i><sub>DTD</sub></i>).
            It can be calculated from two mass model parameters. It is a type-dependent
            parameter.
            '''

        })
    '''
    Active drive train damping frequency (<i>omega</i><i><sub>DTD</sub></i>).
    It can be calculated from two mass model parameters. It is a type-dependent
    parameter.
    '''

    omegaoffset: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Offset to reference value that limits controller action during rotor speed
            changes (<i>omega</i><i><sub>offset</sub></i>). It is a case-dependent
            parameter.
            '''

        })
    '''
    Offset to reference value that limits controller action during rotor
    speed changes (<i>omega</i><i><sub>offset</sub></i>). It is a case-dependent
    parameter.
    '''

    pdtdmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum active drive train damping power (<i>p</i><sub>DTDmax</sub>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Maximum active drive train damping power (<i>p</i><sub>DTDmax</sub>).
    It is a type-dependent parameter.
    '''

    tdvs: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time<sub> </sub>delay after deep voltage sags (<i>T</i><i><sub>DVS</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Time<sub> </sub>delay after deep voltage sags (<i>T</i><i><sub>DVS</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    thetaemin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum electrical generator torque (<i>t</i><sub>emin</sub>). It is a
            type-dependent parameter.
            '''

        })
    '''
    Minimum electrical generator torque (<i>t</i><sub>emin</sub>). It is
    a type-dependent parameter.
    '''

    thetauscale: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage scaling factor of reset-torque (<i>t</i><sub>uscale</sub>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Voltage scaling factor of reset-torque (<i>t</i><sub>uscale</sub>).
    It is a project-dependent parameter.
    '''

    tomegafiltp3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for generator speed measurement (<i>T</i><sub>omegafiltp3</sub>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Filter time constant for generator speed measurement (<i>T</i><sub>omegafiltp3</sub>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tomegaref: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in speed reference filter (<i>T</i><sub>omega,ref</sub>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant in speed reference filter (<i>T</i><sub>omega,ref</sub>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tpfiltp3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for power measurement (<i>T</i><sub>pfiltp3</sub>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Filter time constant for power measurement (<i>T</i><sub>pfiltp3</sub>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tpord: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in power order lag (<i>T</i><sub>pord</sub>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Time constant in power order lag (<i>T</i><sub>pord</sub>). It is a
    type-dependent parameter.
    '''

    tufiltp3: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for voltage measurement (<i>T</i><sub>ufiltp3</sub>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Filter time constant for voltage measurement (<i>T</i><sub>ufiltp3</sub>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    udvs: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage limit for hold UVRT status after deep voltage sags (<i>u</i><i><sub>DVS</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Voltage limit for hold UVRT status after deep voltage sags (<i>u</i><i><sub>DVS</sub></i>).
    It is a project-dependent parameter.
    '''

    updip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage dip threshold for P-control (<i>u</i><sub>Pdip</sub>). Part of
            turbine control, often different (e.g 0.8) from converter thresholds. It
            is a project-dependent parameter.
            '''

        })
    '''
    Voltage dip threshold for P-control (<i>u</i><sub>Pdip</sub>). Part
    of turbine control, often different (e.g 0.8) from converter thresholds.
    It is a project-dependent parameter.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindContPType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind control P type 3 model is
            associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind control P type 3 model
    is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindContPType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this P control type 3 model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this P control type
    3 model.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindContPType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind control P type 3 model is
            associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind control P type 3 model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContPType4aIEC(IdentifiedObject):
    '''
    P control model type 4A.
    Reference: IEC 61400-27-1:2015, 5.6.5.5.
    '''

    dpmaxp4a: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum wind turbine power ramp rate (<i>dp</i><i><sub>maxp4A</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum wind turbine power ramp rate (<i>dp</i><i><sub>maxp4A</sub></i>).
    It is a project-dependent parameter.
    '''

    tpordp4a: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in power order lag (<i>T</i><i><sub>pordp4A</sub></i>) (&gt;=
            0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant in power order lag (<i>T</i><i><sub>pordp4A</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tufiltp4a: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement filter time constant (<i>T</i><i><sub>ufiltp4A</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement filter time constant (<i>T</i><i><sub>ufiltp4A</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    WindTurbineType4aIEC: Optional[WindTurbineType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4aIEC.WindContPType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4A model with which this wind control P type 4A model
            is associated.
            '''

        })
    '''
    Wind turbine type 4A model with which this wind control P type 4A model
    is associated.
    '''

    WindTurbineType4aIEC: Optional[WindTurbineType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4aIEC.WindContPType4aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4A model with which this wind control P type 4A model
            is associated.
            '''

        })
    '''
    Wind turbine type 4A model with which this wind control P type 4A model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContPType4bIEC(IdentifiedObject):
    '''
    P control model type 4B.
    Reference: IEC 61400-27-1:2015, 5.6.5.6.
    '''

    dpmaxp4b: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum wind turbine power ramp rate (<i>dp</i><i><sub>maxp4B</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum wind turbine power ramp rate (<i>dp</i><i><sub>maxp4B</sub></i>).
    It is a project-dependent parameter.
    '''

    tpaero: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in aerodynamic power response (<i>T</i><i><sub>paero</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant in aerodynamic power response (<i>T</i><i><sub>paero</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tpordp4b: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in power order lag (<i>T</i><i><sub>pordp4B</sub></i>) (&gt;=
            0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant in power order lag (<i>T</i><i><sub>pordp4B</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tufiltp4b: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement filter time constant (<i>T</i><i><sub>ufiltp4B</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement filter time constant (<i>T</i><i><sub>ufiltp4B</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindContPType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind control P type 4B model
            is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind control P type 4B model
    is associated.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindContPType4bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind control P type 4B model
            is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind control P type 4B model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContPitchAngleIEC(IdentifiedObject):
    '''
    Pitch angle control model.
    Reference: IEC 61400-27-1:2015, 5.6.5.2.
    '''

    dthetamax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum pitch positive ramp rate (<i>dtheta</i><i><sub>max</sub></i>) (&gt;
            WindContPitchAngleIEC.dthetamin). It is a type-dependent parameter. Unit
            = degrees / s.
            '''

        })
    '''
    Maximum pitch positive ramp rate (<i>dtheta</i><i><sub>max</sub></i>)
    (&gt; WindContPitchAngleIEC.dthetamin). It is a type-dependent parameter.
    Unit = degrees / s.
    '''

    dthetamin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum pitch negative ramp rate (<i>dtheta</i><i><sub>min</sub></i><i>)</i>
            (&lt; WindContPitchAngleIEC.dthetamax). It is a type-dependent parameter.
            Unit = degrees / s.
            '''

        })
    '''
    Maximum pitch negative ramp rate (<i>dtheta</i><i><sub>min</sub></i><i>)</i>
    (&lt; WindContPitchAngleIEC.dthetamax). It is a type-dependent parameter.
    Unit = degrees / s.
    '''

    kic: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power PI controller integration gain (<i>K</i><i><sub>Ic</sub></i>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Power PI controller integration gain (<i>K</i><i><sub>Ic</sub></i>).
    It is a type-dependent parameter.
    '''

    kiomega: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed PI controller integration gain (<i>K</i><i><sub>Iomega</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Speed PI controller integration gain (<i>K</i><i><sub>Iomega</sub></i>).
    It is a type-dependent parameter.
    '''

    kpc: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power PI controller proportional gain (<i>K</i><i><sub>Pc</sub></i>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Power PI controller proportional gain (<i>K</i><i><sub>Pc</sub></i>).
    It is a type-dependent parameter.
    '''

    kpomega: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Speed PI controller proportional gain (<i>K</i><i><sub>Pomega</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Speed PI controller proportional gain (<i>K</i><i><sub>Pomega</sub></i>).
    It is a type-dependent parameter.
    '''

    kpx: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pitch cross coupling gain (<i>K</i><i><sub>PX</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Pitch cross coupling gain (<i>K</i><i><sub>PX</sub></i>). It is a type-dependent
    parameter.
    '''

    thetamax: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum pitch angle (<i>theta</i><i><sub>max</sub></i>) (&gt; WindContPitchAngleIEC.thetamin).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum pitch angle (<i>theta</i><i><sub>max</sub></i>) (&gt; WindContPitchAngleIEC.thetamin).
    It is a type-dependent parameter.
    '''

    thetamin: Optional[ float | AngleDegrees ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum pitch angle (<i>theta</i><i><sub>min</sub></i>) (&lt; WindContPitchAngleIEC.thetamax).
            It is a type-dependent parameter.
            '''

        })
    '''
    Minimum pitch angle (<i>theta</i><i><sub>min</sub></i>) (&lt; WindContPitchAngleIEC.thetamax).
    It is a type-dependent parameter.
    '''

    ttheta: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pitch time constant (<i>ttheta</i>) (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Pitch time constant (<i>ttheta</i>) (&gt;= 0). It is a type-dependent
    parameter.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindContPitchAngleIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this pitch control model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this pitch control model is associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindContPitchAngleIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this pitch control model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this pitch control model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContQIEC(IdentifiedObject):
    '''
    Q control model.
    Reference: IEC 61400-27-1:2015, 5.6.5.7.
    '''

    iqh1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive current injection during dip (<i>i</i><i><sub>qh1</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum reactive current injection during dip (<i>i</i><i><sub>qh1</sub></i>).
    It is a type-dependent parameter.
    '''

    iqmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive current injection (<i>i</i><i><sub>qmax</sub></i>) (&gt;
            WindContQIEC.iqmin). It is a type-dependent parameter.
            '''

        })
    '''
    Maximum reactive current injection (<i>i</i><i><sub>qmax</sub></i>)
    (&gt; WindContQIEC.iqmin). It is a type-dependent parameter.
    '''

    iqmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive current injection (<i>i</i><i><sub>qmin</sub></i>) (&lt;
            WindContQIEC.iqmax). It is a type-dependent parameter.
            '''

        })
    '''
    Minimum reactive current injection (<i>i</i><i><sub>qmin</sub></i>)
    (&lt; WindContQIEC.iqmax). It is a type-dependent parameter.
    '''

    iqpost: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Post fault reactive current injection (<i>i</i><i><sub>qpost</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Post fault reactive current injection (<i>i</i><i><sub>qpost</sub></i>).
    It is a project-dependent parameter.
    '''

    kiq: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power PI controller integration gain (<i>K</i><i><sub>I,q</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Reactive power PI controller integration gain (<i>K</i><i><sub>I,q</sub></i>).
    It is a type-dependent parameter.
    '''

    kiu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage PI controller integration gain (<i>K</i><i><sub>I,u</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Voltage PI controller integration gain (<i>K</i><i><sub>I,u</sub></i>).
    It is a type-dependent parameter.
    '''

    kpq: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power PI controller proportional gain (<i>K</i><i><sub>P,q</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Reactive power PI controller proportional gain (<i>K</i><i><sub>P,q</sub></i>).
    It is a type-dependent parameter.
    '''

    kpu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage PI controller proportional gain (<i>K</i><i><sub>P,u</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Voltage PI controller proportional gain (<i>K</i><i><sub>P,u</sub></i>).
    It is a type-dependent parameter.
    '''

    kqv: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage scaling factor for UVRT current (<i>K</i><i><sub>qv</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Voltage scaling factor for UVRT current (<i>K</i><i><sub>qv</sub></i>).
    It is a project-dependent parameter.
    '''

    rdroop: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistive component of voltage drop impedance (<i>r</i><i><sub>droop</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Resistive component of voltage drop impedance (<i>r</i><i><sub>droop</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    tpfiltq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power measurement filter time constant (<i>T</i><i><sub>pfiltq</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Power measurement filter time constant (<i>T</i><i><sub>pfiltq</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tpost: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Length of time period where post fault reactive power is injected (<i>T</i><i><sub>post</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Length of time period where post fault reactive power is injected (<i>T</i><i><sub>post</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    tqord: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant in reactive power order lag (<i>T</i><i><sub>qord</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant in reactive power order lag (<i>T</i><i><sub>qord</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tufiltq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement filter time constant (<i>T</i><i><sub>ufiltq</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement filter time constant (<i>T</i><i><sub>ufiltq</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    udb1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage deadband lower limit (<i>u</i><i><sub>db1</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Voltage deadband lower limit (<i>u</i><i><sub>db1</sub></i>). It is
    a type-dependent parameter.
    '''

    udb2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage deadband upper limit (<i>u</i><i><sub>db2</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Voltage deadband upper limit (<i>u</i><i><sub>db2</sub></i>). It is
    a type-dependent parameter.
    '''

    umax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum voltage in voltage PI controller integral term (<i>u</i><i><sub>max</sub></i>)
            (&gt; WindContQIEC.umin). It is a type-dependent parameter.
            '''

        })
    '''
    Maximum voltage in voltage PI controller integral term (<i>u</i><i><sub>max</sub></i>)
    (&gt; WindContQIEC.umin). It is a type-dependent parameter.
    '''

    umin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum voltage in voltage PI controller integral term (<i>u</i><i><sub>min</sub></i>)
            (&lt; WindContQIEC.umax). It is a type-dependent parameter.
            '''

        })
    '''
    Minimum voltage in voltage PI controller integral term (<i>u</i><i><sub>min</sub></i>)
    (&lt; WindContQIEC.umax). It is a type-dependent parameter.
    '''

    uqdip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage threshold for UVRT detection in Q control (<i>u</i><i><sub>qdip</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Voltage threshold for UVRT detection in Q control (<i>u</i><i><sub>qdip</sub></i>).
    It is a type-dependent parameter.
    '''

    uref0: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            User-defined bias in voltage reference (<i>u</i><i><sub>ref0</sub></i>).
            It is a case-dependent parameter.
            '''

        })
    '''
    User-defined bias in voltage reference (<i>u</i><i><sub>ref0</sub></i>).
    It is a case-dependent parameter.
    '''

    windQcontrolModesType: Optional[ WindQcontrolModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Types of general wind turbine Q control modes (<i>M</i><i><sub>qG</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Types of general wind turbine Q control modes (<i>M</i><i><sub>qG</sub></i>).
    It is a project-dependent parameter.
    '''

    windUVRTQcontrolModesType: Optional[ WindUVRTQcontrolModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Types of UVRT Q control modes (<i>M</i><i><sub>qUVRT</sub></i>). It is
            a project-dependent parameter.
            '''

        })
    '''
    Types of UVRT Q control modes (<i>M</i><i><sub>qUVRT</sub></i>). It
    is a project-dependent parameter.
    '''

    xdroop: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inductive component of voltage drop impedance (<i>x</i><i><sub>droop</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Inductive component of voltage drop impedance (<i>x</i><i><sub>droop</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WIndContQIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this reactive control model
            is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this reactive control
    model is associated.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WIndContQIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this reactive control model
            is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this reactive control
    model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContQLimIEC(IdentifiedObject):
    '''
    Constant Q limitation model.
    Reference: IEC 61400-27-1:2015, 5.6.5.9.
    '''

    qmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power (<i>q</i><i><sub>max</sub></i>) (&gt; WindContQLimIEC.qmin).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum reactive power (<i>q</i><i><sub>max</sub></i>) (&gt; WindContQLimIEC.qmin).
    It is a type-dependent parameter.
    '''

    qmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power (<i>q</i><i><sub>min</sub></i>) (&lt; WindContQLimIEC.qmax).
            It is a type-dependent parameter.
            '''

        })
    '''
    Minimum reactive power (<i>q</i><i><sub>min</sub></i>) (&lt; WindContQLimIEC.qmax).
    It is a type-dependent parameter.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContQLimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this constant Q limitation
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this constant Q limitation
    model is associated.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContQLimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this constant Q limitation
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this constant Q limitation
    model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContQPQULimIEC(IdentifiedObject):
    '''
    QP and QU limitation model.
    Reference: IEC 61400-27-1:2015, 5.6.5.10.
    '''

    tpfiltql: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power measurement filter time constant for Q capacity (<i>T</i><i><sub>pfiltql</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Power measurement filter time constant for Q capacity (<i>T</i><i><sub>pfiltql</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tufiltql: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement filter time constant for Q capacity (<i>T</i><i><sub>ufiltql</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement filter time constant for Q capacity (<i>T</i><i><sub>ufiltql</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContQPQULimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this QP and QU limitation
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this QP and QU limitation
    model is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindContQPQULimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this QP and QU limitation
            model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this QP and QU limitation
    model.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindContQPQULimIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this QP and QU limitation
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this QP and QU limitation
    model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindContRotorRIEC(IdentifiedObject):
    '''
    Rotor resistance control model.
    Reference: IEC 61400-27-1:2015, 5.6.5.3.
    '''

    komegafilt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter gain for generator speed measurement (<i>K</i><i><sub>omegafilt</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Filter gain for generator speed measurement (<i>K</i><i><sub>omegafilt</sub></i>).
    It is a type-dependent parameter.
    '''

    kpfilt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter gain for power measurement (<i>K</i><i><sub>pfilt</sub></i>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Filter gain for power measurement (<i>K</i><i><sub>pfilt</sub></i>).
    It is a type-dependent parameter.
    '''

    kirr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integral gain in rotor resistance PI controller (<i>K</i><i><sub>Irr</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Integral gain in rotor resistance PI controller (<i>K</i><i><sub>Irr</sub></i>).
    It is a type-dependent parameter.
    '''

    kprr: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proportional gain in rotor resistance PI controller (<i>K</i><i><sub>Prr</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Proportional gain in rotor resistance PI controller (<i>K</i><i><sub>Prr</sub></i>).
    It is a type-dependent parameter.
    '''

    rmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rotor resistance (<i>r</i><i><sub>max</sub></i>) (&gt; WindContRotorRIEC.rmin).
            It is a type-dependent parameter.
            '''

        })
    '''
    Maximum rotor resistance (<i>r</i><i><sub>max</sub></i>) (&gt; WindContRotorRIEC.rmin).
    It is a type-dependent parameter.
    '''

    rmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum rotor resistance (<i>r</i><i><sub>min</sub></i>) (&lt; WindContRotorRIEC.rmax).
            It is a type-dependent parameter.
            '''

        })
    '''
    Minimum rotor resistance (<i>r</i><i><sub>min</sub></i>) (&lt; WindContRotorRIEC.rmax).
    It is a type-dependent parameter.
    '''

    tomegafiltrr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for generator speed measurement (<i>T</i><i><sub>omegafiltrr</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Filter time constant for generator speed measurement (<i>T</i><i><sub>omegafiltrr</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    tpfiltrr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for power measurement (<i>T</i><i><sub>pfiltrr</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Filter time constant for power measurement (<i>T</i><i><sub>pfiltrr</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    WindGenTurbineType2IEC: Optional[WindGenTurbineType2IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType2IEC.WindContRotorRIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 2 model with whitch this wind control rotor resistance
            model is associated.
            '''

        })
    '''
    Wind turbine type 2 model with whitch this wind control rotor resistance
    model is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindContRotorRIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this rotor resistance control
            model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this rotor resistance
    control model.
    '''

    WindGenTurbineType2IEC: Optional[WindGenTurbineType2IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType2IEC.WindContRotorRIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 2 model with whitch this wind control rotor resistance
            model is associated.
            '''

        })
    '''
    Wind turbine type 2 model with whitch this wind control rotor resistance
    model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindDynamicsLookupTable(IdentifiedObject):
    '''
    Look up table for the purpose of wind standard models.
    '''

    input: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Input value (<i>x</i>) for the lookup table function.
            '''

        })
    '''
    Input value (<i>x</i>) for the lookup table function.
    '''

    output: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Output value (<i>y</i>) for the lookup table function.
            '''

        })
    '''
    Output value (<i>y</i>) for the lookup table function.
    '''

    sequence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sequence numbers of the pairs of the input (<i>x</i>) and the output (<i>y</i>)
            of the lookup table function.
            '''

        })
    '''
    Sequence numbers of the pairs of the input (<i>x</i>) and the output
    (<i>y</i>) of the lookup table function.
    '''

    lookupTableFunctionType: Optional[ WindLookupTableFunctionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of the lookup table function.
            '''

        })
    '''
    Type of the lookup table function.
    '''

    WindContCurrLimIEC: Optional[WindContCurrLimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContCurrLimIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The current control limitation model with which this wind dynamics lookup
            table is associated.
            '''

        })
    '''
    The current control limitation model with which this wind dynamics
    lookup table is associated.
    '''

    WindContPType3IEC: Optional[WindContPType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContPType3IEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The P control type 3 model with which this wind dynamics lookup table is
            associated.
            '''

        })
    '''
    The P control type 3 model with which this wind dynamics lookup table
    is associated.
    '''

    WindContQPQULimIEC: Optional[WindContQPQULimIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContQPQULimIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The QP and QU limitation model with which this wind dynamics lookup table
            is associated.
            '''

        })
    '''
    The QP and QU limitation model with which this wind dynamics lookup
    table is associated.
    '''

    WindContRotorRIEC: Optional[WindContRotorRIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindContRotorRIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The rotor resistance control model with which this wind dynamics lookup
            table is associated.
            '''

        })
    '''
    The rotor resistance control model with which this wind dynamics lookup
    table is associated.
    '''

    WindGenType3bIEC: Optional[WindGenType3bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenType3bIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The generator type 3B model with which this wind dynamics lookup table
            is associated.
            '''

        })
    '''
    The generator type 3B model with which this wind dynamics lookup table
    is associated.
    '''

    WindPitchContPowerIEC: Optional[WindPitchContPowerIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPitchContPowerIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The pitch control power model with which this wind dynamics lookup table
            is associated.
            '''

        })
    '''
    The pitch control power model with which this wind dynamics lookup
    table is associated.
    '''

    WindPlantFreqPcontrolIEC: Optional[WindPlantFreqPcontrolIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantFreqPcontrolIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The frequency and active power wind plant control model with which this
            wind dynamics lookup table is associated.
            '''

        })
    '''
    The frequency and active power wind plant control model with which
    this wind dynamics lookup table is associated.
    '''

    WindPlantReactiveControlIEC: Optional[WindPlantReactiveControlIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantReactiveControlIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The voltage and reactive power wind plant control model with which this
            wind dynamics lookup table is associated.
            '''

        })
    '''
    The voltage and reactive power wind plant control model with which
    this wind dynamics lookup table is associated.
    '''

    WindProtectionIEC: Optional[WindProtectionIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindProtectionIEC.WindDynamicsLookupTable',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The grid protection model with which this wind dynamics lookup table is
            associated.
            '''

        })
    '''
    The grid protection model with which this wind dynamics lookup table
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenType3IEC(IdentifiedObject):
    '''
    Parent class supporting relationships to IEC wind turbines type 3 generator
    models of IEC type 3A and 3B.
    '''

    dipmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum active current ramp rate (<i>di</i><i><sub>pmax</sub></i>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Maximum active current ramp rate (<i>di</i><i><sub>pmax</sub></i>).
    It is a project-dependent parameter.
    '''

    diqmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive current ramp rate (<i>di</i><i><sub>qmax</sub></i>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Maximum reactive current ramp rate (<i>di</i><i><sub>qmax</sub></i>).
    It is a project-dependent parameter.
    '''

    xs: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Electromagnetic transient reactance (<i>x</i><i><sub>S</sub></i>). It is
            a type-dependent parameter.
            '''

        })
    '''
    Electromagnetic transient reactance (<i>x</i><i><sub>S</sub></i>).
    It is a type-dependent parameter.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindGenType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind generator type 3 is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind generator type 3 is
    associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindGenType3IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind generator type 3 is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind generator type 3 is
    associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenType3aIEC(WindGenType3IEC):
    '''
    IEC type 3A generator set model.
    Reference: IEC 61400-27-1:2015, 5.6.3.2.
    '''

    kpc: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current PI controller proportional gain (<i>K</i><i><sub>Pc</sub></i>).
            It is a type-dependent parameter.
            '''

        })
    '''
    Current PI controller proportional gain (<i>K</i><i><sub>Pc</sub></i>).
    It is a type-dependent parameter.
    '''

    tic: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current PI controller integration time constant (<i>T</i><i><sub>Ic</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Current PI controller integration time constant (<i>T</i><i><sub>Ic</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    WindTurbineType4IEC: Optional[WindTurbineType4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4IEC.WindGenType3aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4 model with which this wind generator type 3A model
            is associated.
            '''

        })
    '''
    Wind turbine type 4 model with which this wind generator type 3A model
    is associated.
    '''

    WindTurbineType4IEC: Optional[WindTurbineType4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4IEC.WindGenType3aIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4 model with which this wind generator type 3A model
            is associated.
            '''

        })
    '''
    Wind turbine type 4 model with which this wind generator type 3A model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenType3bIEC(WindGenType3IEC):
    '''
    IEC type 3B generator set model.
    Reference: IEC 61400-27-1:2015, 5.6.3.3.
    '''

    mwtcwp: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Crowbar control mode (<i>M</i><i><sub>WTcwp</sub></i>). It is a case-dependent
            parameter.
            true = 1 in the IEC model
            false = 0 in the IEC model.
            '''

        })
    '''
    Crowbar control mode (<i>M</i><i><sub>WTcwp</sub></i>). It is a case-dependent
    parameter.
    true = 1 in the IEC model
    false = 0 in the IEC model.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current generation time constant (<i>T</i><i><sub>g</sub></i>) (&gt;= 0).
            It is a type-dependent parameter.
            '''

        })
    '''
    Current generation time constant (<i>T</i><i><sub>g</sub></i>) (&gt;=
    0). It is a type-dependent parameter.
    '''

    two: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant for crowbar washout filter (<i>T</i><i><sub>wo</sub></i>)
            (&gt;= 0). It is a case-dependent parameter.
            '''

        })
    '''
    Time constant for crowbar washout filter (<i>T</i><i><sub>wo</sub></i>)
    (&gt;= 0). It is a case-dependent parameter.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindGenType3bIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this generator type 3B model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this generator type
    3B model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindGenType4IEC(IdentifiedObject):
    '''
    IEC type 4 generator set model.
    Reference: IEC 61400-27-1:2015, 5.6.3.4.
    '''

    dipmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum active current ramp rate (<i>di</i><i><sub>pmax</sub></i>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Maximum active current ramp rate (<i>di</i><i><sub>pmax</sub></i>).
    It is a project-dependent parameter.
    '''

    diqmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive current ramp rate (<i>di</i><i><sub>qmax</sub></i>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Maximum reactive current ramp rate (<i>di</i><i><sub>qmax</sub></i>).
    It is a project-dependent parameter.
    '''

    diqmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive current ramp rate (<i>di</i><i><sub>qmin</sub></i>). It
            is a project-dependent parameter.
            '''

        })
    '''
    Minimum reactive current ramp rate (<i>di</i><i><sub>qmin</sub></i>).
    It is a project-dependent parameter.
    '''

    tg: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant (<i>T</i><i><sub>g</sub></i>) (&gt;= 0). It is a type-dependent
            parameter.
            '''

        })
    '''
    Time constant (<i>T</i><i><sub>g</sub></i>) (&gt;= 0). It is a type-dependent
    parameter.
    '''

    WindTurbineType4aIEC: Optional[WindTurbineType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4aIEC.WindGenType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4A model with which this wind generator type 4 model
            is associated.
            '''

        })
    '''
    Wind turbine type 4A model with which this wind generator type 4 model
    is associated.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindGenType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind generator type 4 model
            is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind generator type 4 model
    is associated.
    '''

    WindTurbineType4aIEC: Optional[WindTurbineType4aIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4aIEC.WindGenType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4A model with which this wind generator type 4 model
            is associated.
            '''

        })
    '''
    Wind turbine type 4A model with which this wind generator type 4 model
    is associated.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindGenType4IEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind generator type 4 model
            is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind generator type 4 model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindMechIEC(IdentifiedObject):
    '''
    Two mass model.
    Reference: IEC 61400-27-1:2015, 5.6.2.1.
    '''

    cdrt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Drive train damping (<i>c</i><i><sub>drt</sub></i><i>)</i>. It is a type-dependent
            parameter.
            '''

        })
    '''
    Drive train damping (<i>c</i><i><sub>drt</sub></i><i>)</i>. It is a
    type-dependent parameter.
    '''

    hgen: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inertia constant of generator (<i>H</i><i><sub>gen</sub></i>) (&gt;= 0).
            It is a type-dependent parameter.
            '''

        })
    '''
    Inertia constant of generator (<i>H</i><i><sub>gen</sub></i>) (&gt;=
    0). It is a type-dependent parameter.
    '''

    hwtr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Inertia constant of wind turbine rotor (<i>H</i><i><sub>WTR</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Inertia constant of wind turbine rotor (<i>H</i><i><sub>WTR</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    kdrt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Drive train stiffness (<i>k</i><i><sub>drt</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Drive train stiffness (<i>k</i><i><sub>drt</sub></i>). It is a type-dependent
    parameter.
    '''

    WindTurbineType1or2IEC: Optional[WindTurbineType1or2IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2IEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 1 or type 2 model with which this wind mechanical model
            is associated.
            '''

        })
    '''
    Wind generator type 1 or type 2 model with which this wind mechanical
    model is associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind mechanical model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind mechanical model is
    associated.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind mechanical model is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind mechanical model is
    associated.
    '''

    WindTurbineType1or2IEC: Optional[WindTurbineType1or2IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2IEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 1 or type 2 model with which this wind mechanical model
            is associated.
            '''

        })
    '''
    Wind generator type 1 or type 2 model with which this wind mechanical
    model is associated.
    '''

    WindTurbineType3IEC: Optional[WindTurbineType3IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3IEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 model with which this wind mechanical model is associated.
            '''

        })
    '''
    Wind turbine type 3 model with which this wind mechanical model is
    associated.
    '''

    WindTurbineType4bIEC: Optional[WindTurbineType4bIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType4bIEC.WindMechIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 4B model with which this wind mechanical model is associated.
            '''

        })
    '''
    Wind turbine type 4B model with which this wind mechanical model is
    associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPitchContPowerIEC(IdentifiedObject):
    '''
    Pitch control power model.
    Reference: IEC 61400-27-1:2015, 5.6.5.1.
    '''

    dpmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate limit for increasing power (<i>dp</i><i><sub>max</sub></i>) (&gt;
            WindPitchContPowerIEC.dpmin). It is a type-dependent parameter.
            '''

        })
    '''
    Rate limit for increasing power (<i>dp</i><i><sub>max</sub></i>) (&gt;
    WindPitchContPowerIEC.dpmin). It is a type-dependent parameter.
    '''

    dpmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Rate limit for decreasing power (<i>dp</i><i><sub>min</sub></i>) (&lt;
            WindPitchContPowerIEC.dpmax). It is a type-dependent parameter.
            '''

        })
    '''
    Rate limit for decreasing power (<i>dp</i><i><sub>min</sub></i>) (&lt;
    WindPitchContPowerIEC.dpmax). It is a type-dependent parameter.
    '''

    pmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum power setting (<i>p</i><i><sub>min</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Minimum power setting (<i>p</i><i><sub>min</sub></i>). It is a type-dependent
    parameter.
    '''

    pset: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If <i>p</i><i><sub>init</sub></i><sub> </sub>&lt; <i>p</i><i><sub>set</sub></i><sub>
            </sub>then power will be ramped down to <i>p</i><i><sub>min</sub></i>.
            It is (<i>p</i><i><sub>set</sub></i>) in the IEC 61400-27-1:2015. It is
            a type-dependent parameter.
            '''

        })
    '''
    If <i>p</i><i><sub>init</sub></i><sub> </sub>&lt; <i>p</i><i><sub>set</sub></i><sub>
    </sub>then power will be ramped down to <i>p</i><i><sub>min</sub></i>.
    It is (<i>p</i><i><sub>set</sub></i>) in the IEC 61400-27-1:2015. It
    is a type-dependent parameter.
    '''

    t1: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). It is a type-dependent
            parameter.
            '''

        })
    '''
    Lag time constant (<i>T</i><i><sub>1</sub></i>) (&gt;= 0). It is a
    type-dependent parameter.
    '''

    tr: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage measurement time constant (<i>T</i><i><sub>r</sub></i>) (&gt;=
            0). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage measurement time constant (<i>T</i><i><sub>r</sub></i>) (&gt;=
    0). It is a type-dependent parameter.
    '''

    uuvrt: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dip detection threshold (<i>u</i><i><sub>UVRT</sub></i>). It is a type-dependent
            parameter.
            '''

        })
    '''
    Dip detection threshold (<i>u</i><i><sub>UVRT</sub></i>). It is a type-dependent
    parameter.
    '''

    WindGenTurbineType1bIEC: Optional[WindGenTurbineType1bIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType1bIEC.WindPitchContPowerIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 1B model with which this pitch control power model is
            associated.
            '''

        })
    '''
    Wind turbine type 1B model with which this pitch control power model
    is associated.
    '''

    WindGenTurbineType2IEC: Optional[WindGenTurbineType2IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType2IEC.WindPitchContPowerIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 2 model with which this pitch control power model is
            associated.
            '''

        })
    '''
    Wind turbine type 2 model with which this pitch control power model
    is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindPitchContPowerIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this pitch control power
            model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this pitch control power
    model.
    '''

    WindGenTurbineType1bIEC: Optional[WindGenTurbineType1bIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType1bIEC.WindPitchContPowerIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 1B model with which this pitch control power model is
            associated.
            '''

        })
    '''
    Wind turbine type 1B model with which this pitch control power model
    is associated.
    '''

    WindGenTurbineType2IEC: Optional[WindGenTurbineType2IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindGenTurbineType2IEC.WindPitchContPowerIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 2 model with which this pitch control power model is
            associated.
            '''

        })
    '''
    Wind turbine type 2 model with which this pitch control power model
    is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPlantFreqPcontrolIEC(IdentifiedObject):
    '''
    Frequency and active power controller model.
    Reference: IEC 61400-27-1:2015, Annex D.
    '''

    kiwpp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Plant P controller integral gain (<i>K</i><i><sub>IWPp</sub></i>). It is
            a project-dependent parameter.
            '''

        })
    '''
    Plant P controller integral gain (<i>K</i><i><sub>IWPp</sub></i>).
    It is a project-dependent parameter.
    '''

    kpwpp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Plant P controller proportional gain (<i>K</i><i><sub>PWPp</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Plant P controller proportional gain (<i>K</i><i><sub>PWPp</sub></i>).
    It is a project-dependent parameter.
    '''

    dprefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum ramp rate of <i>p</i><i><sub>WTref</sub></i> request from the plant
            controller to the wind turbines (<i>dp</i><i><sub>refmax</sub></i>) (&gt;
            WindPlantFreqPcontrolIEC.dprefmin). It is a case-dependent parameter.
            '''

        })
    '''
    Maximum ramp rate of <i>p</i><i><sub>WTref</sub></i> request from the
    plant controller to the wind turbines (<i>dp</i><i><sub>refmax</sub></i>)
    (&gt; WindPlantFreqPcontrolIEC.dprefmin). It is a case-dependent parameter.
    '''

    dprefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum (negative) ramp rate of <i>p</i><i><sub>WTref</sub></i> request
            from the plant controller to the wind turbines (<i>dp</i><i><sub>refmin</sub></i>)
            (&lt; WindPlantFreqPcontrolIEC.dprefmax). It is a project-dependent parameter.
            '''

        })
    '''
    Minimum (negative) ramp rate of <i>p</i><i><sub>WTref</sub></i> request
    from the plant controller to the wind turbines (<i>dp</i><i><sub>refmin</sub></i>)
    (&lt; WindPlantFreqPcontrolIEC.dprefmax). It is a project-dependent
    parameter.
    '''

    dpwprefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum positive ramp rate for wind plant power reference (<i>dp</i><i><sub>WPrefmax</sub></i>)
            (&gt; WindPlantFreqPcontrolIEC.dpwprefmin). It is a project-dependent parameter.
            '''

        })
    '''
    Maximum positive ramp rate for wind plant power reference (<i>dp</i><i><sub>WPrefmax</sub></i>)
    (&gt; WindPlantFreqPcontrolIEC.dpwprefmin). It is a project-dependent
    parameter.
    '''

    dpwprefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum negative ramp rate for wind plant power reference (<i>dp</i><i><sub>WPrefmin</sub></i>)
            (&lt; WindPlantFreqPcontrolIEC.dpwprefmax). It is a project-dependent parameter.
            '''

        })
    '''
    Maximum negative ramp rate for wind plant power reference (<i>dp</i><i><sub>WPrefmin</sub></i>)
    (&lt; WindPlantFreqPcontrolIEC.dpwprefmax). It is a project-dependent
    parameter.
    '''

    kiwppmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum PI integrator term (<i>K</i><i><sub>IWPpmax</sub></i>) (&gt; WindPlantFreqPcontrolIEC.kiwppmin).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum PI integrator term (<i>K</i><i><sub>IWPpmax</sub></i>) (&gt;
    WindPlantFreqPcontrolIEC.kiwppmin). It is a project-dependent parameter.
    '''

    kiwppmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum PI integrator term (<i>K</i><i><sub>IWPpmin</sub></i>) (&lt; WindPlantFreqPcontrolIEC.kiwppmax).
            It is a project-dependent parameter.
            '''

        })
    '''
    Minimum PI integrator term (<i>K</i><i><sub>IWPpmin</sub></i>) (&lt;
    WindPlantFreqPcontrolIEC.kiwppmax). It is a project-dependent parameter.
    '''

    kwppref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Power reference gain (<i>K</i><i><sub>WPpref</sub></i>). It is a project-dependent
            parameter.
            '''

        })
    '''
    Power reference gain (<i>K</i><i><sub>WPpref</sub></i>). It is a project-dependent
    parameter.
    '''

    prefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum <i>p</i><i><sub>WTref</sub></i> request from the plant controller
            to the wind turbines (<i>p</i><i><sub>refmax</sub></i>) (&gt; WindPlantFreqPcontrolIEC.prefmin).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum <i>p</i><i><sub>WTref</sub></i> request from the plant controller
    to the wind turbines (<i>p</i><i><sub>refmax</sub></i>) (&gt; WindPlantFreqPcontrolIEC.prefmin).
    It is a project-dependent parameter.
    '''

    prefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum <i>p</i><i><sub>WTref</sub></i> request from the plant controller
            to the wind turbines (<i>p</i><i><sub>refmin</sub></i>) (&lt; WindPlantFreqPcontrolIEC.prefmax).
            It is a project-dependent parameter.
            '''

        })
    '''
    Minimum <i>p</i><i><sub>WTref</sub></i> request from the plant controller
    to the wind turbines (<i>p</i><i><sub>refmin</sub></i>) (&lt; WindPlantFreqPcontrolIEC.prefmax).
    It is a project-dependent parameter.
    '''

    tpft: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant in reference value transfer function (<i>T</i><i><sub>pft</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Lead time constant in reference value transfer function (<i>T</i><i><sub>pft</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    tpfv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant in reference value transfer function (<i>T</i><i><sub>pfv</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Lag time constant in reference value transfer function (<i>T</i><i><sub>pfv</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    twpffiltp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for frequency measurement (<i>T</i><i><sub>WPffiltp</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for frequency measurement (<i>T</i><i><sub>WPffiltp</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    twppfiltp: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for active power measurement (<i>T</i><i><sub>WPpfiltp</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for active power measurement (<i>T</i><i><sub>WPpfiltp</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    WindPlantIEC: Optional[WindPlantIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPlantIEC.WindPlantFreqPcontrolIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind plant model with which this wind plant frequency and active power
            control is associated.
            '''

        })
    '''
    Wind plant model with which this wind plant frequency and active power
    control is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindPlantFreqPcontrolIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this frequency and active
            power wind plant model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this frequency and active
    power wind plant model.
    '''

    WindPlantIEC: Optional[WindPlantIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantIEC.WindPlantFreqPcontrolIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind plant model with which this wind plant frequency and active power
            control is associated.
            '''

        })
    '''
    Wind plant model with which this wind plant frequency and active power
    control is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindPlantReactiveControlIEC(IdentifiedObject):
    '''
    Simplified plant voltage and reactive power control model for use with
    type 3 and type 4 wind turbine models.
    Reference: IEC 61400-27-1:2015, Annex D.
    '''

    kiwpx: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Plant Q controller integral gain (<i>K</i><i><sub>IWPx</sub></i>). It is
            a project-dependent parameter.
            '''

        })
    '''
    Plant Q controller integral gain (<i>K</i><i><sub>IWPx</sub></i>).
    It is a project-dependent parameter.
    '''

    kpwpx: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Plant Q controller proportional gain (<i>K</i><i><sub>PWPx</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Plant Q controller proportional gain (<i>K</i><i><sub>PWPx</sub></i>).
    It is a project-dependent parameter.
    '''

    dxrefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum positive ramp rate for wind turbine reactive power/voltage reference
            (<i>dx</i><i><sub>refmax</sub></i>) (&gt; WindPlantReactiveControlIEC.dxrefmin).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum positive ramp rate for wind turbine reactive power/voltage
    reference (<i>dx</i><i><sub>refmax</sub></i>) (&gt; WindPlantReactiveControlIEC.dxrefmin).
    It is a project-dependent parameter.
    '''

    dxrefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum negative ramp rate for wind turbine reactive power/voltage reference
            (<i>dx</i><i><sub>refmin</sub></i>) (&lt; WindPlantReactiveControlIEC.dxrefmax).
            It is a project-dependent parameter.
            '''

        })
    '''
    Maximum negative ramp rate for wind turbine reactive power/voltage
    reference (<i>dx</i><i><sub>refmin</sub></i>) (&lt; WindPlantReactiveControlIEC.dxrefmax).
    It is a project-dependent parameter.
    '''

    kiwpxmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum reactive power/voltage reference from integration (<i>K</i><i><sub>IWPxmax</sub></i>)
            (&gt; WindPlantReactiveControlIEC.kiwpxmin). It is a project-dependent
            parameter.
            '''

        })
    '''
    Maximum reactive power/voltage reference from integration (<i>K</i><i><sub>IWPxmax</sub></i>)
    (&gt; WindPlantReactiveControlIEC.kiwpxmin). It is a project-dependent
    parameter.
    '''

    kiwpxmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum reactive power/voltage reference from integration (<i>K</i><i><sub>IWPxmin</sub></i>)
            (&lt; WindPlantReactiveControlIEC.kiwpxmax). It is a project-dependent
            parameter.
            '''

        })
    '''
    Minimum reactive power/voltage reference from integration (<i>K</i><i><sub>IWPxmin</sub></i>)
    (&lt; WindPlantReactiveControlIEC.kiwpxmax). It is a project-dependent
    parameter.
    '''

    kwpqref: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power reference gain (<i>K</i><i><sub>WPqref</sub></i>). It is
            a project-dependent parameter.
            '''

        })
    '''
    Reactive power reference gain (<i>K</i><i><sub>WPqref</sub></i>). It
    is a project-dependent parameter.
    '''

    kwpqu: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Plant voltage control droop (<i>K</i><i><sub>WPqu</sub></i>). It is a project-dependent
            parameter.
            '''

        })
    '''
    Plant voltage control droop (<i>K</i><i><sub>WPqu</sub></i>). It is
    a project-dependent parameter.
    '''

    tuqfilt: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for voltage-dependent reactive power (<i>T</i><i><sub>uqfilt</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for voltage-dependent reactive power (<i>T</i><i><sub>uqfilt</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    twppfiltq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for active power measurement (<i>T</i><i><sub>WPpfiltq</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for active power measurement (<i>T</i><i><sub>WPpfiltq</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    twpqfiltq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for reactive power measurement (<i>T</i><i><sub>WPqfiltq</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for reactive power measurement (<i>T</i><i><sub>WPqfiltq</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    twpufiltq: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Filter time constant for voltage measurement (<i>T</i><i><sub>WPufiltq</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Filter time constant for voltage measurement (<i>T</i><i><sub>WPufiltq</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    txft: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lead time constant in reference value transfer function (<i>T</i><i><sub>xft</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Lead time constant in reference value transfer function (<i>T</i><i><sub>xft</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    txfv: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Lag time constant in reference value transfer function (<i>T</i><i><sub>xfv</sub></i>)
            (&gt;= 0). It is a project-dependent parameter.
            '''

        })
    '''
    Lag time constant in reference value transfer function (<i>T</i><i><sub>xfv</sub></i>)
    (&gt;= 0). It is a project-dependent parameter.
    '''

    uwpqdip: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage threshold for UVRT detection in Q control (<i>u</i><i><sub>WPqdip</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Voltage threshold for UVRT detection in Q control (<i>u</i><i><sub>WPqdip</sub></i>).
    It is a project-dependent parameter.
    '''

    windPlantQcontrolModesType: Optional[ WindPlantQcontrolModeKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power/voltage controller mode (<i>M</i><i><sub>WPqmode</sub></i>).
            It is a case-dependent parameter.
            '''

        })
    '''
    Reactive power/voltage controller mode (<i>M</i><i><sub>WPqmode</sub></i>).
    It is a case-dependent parameter.
    '''

    xrefmax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum <i>x</i><sub>WTref</sub> (<i>q</i><i><sub>WTref</sub></i> or delta<i>
            u</i><i><sub>WTref</sub></i>) request from the plant controller (<i>x</i><i><sub>refmax</sub></i>)
            (&gt; WindPlantReactiveControlIEC.xrefmin). It is a case-dependent parameter.
            '''

        })
    '''
    Maximum <i>x</i><sub>WTref</sub> (<i>q</i><i><sub>WTref</sub></i> or
    delta<i> u</i><i><sub>WTref</sub></i>) request from the plant controller
    (<i>x</i><i><sub>refmax</sub></i>) (&gt; WindPlantReactiveControlIEC.xrefmin).
    It is a case-dependent parameter.
    '''

    xrefmin: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum <i>x</i><i><sub>WTref</sub></i> (<i>q</i><i><sub>WTref</sub></i>
            or delta <i>u</i><i><sub>WTref</sub></i>) request from the plant controller
            (<i>x</i><i><sub>refmin</sub></i>) (&lt; WindPlantReactiveControlIEC.xrefmax).
            It is a project-dependent parameter.
            '''

        })
    '''
    Minimum <i>x</i><i><sub>WTref</sub></i> (<i>q</i><i><sub>WTref</sub></i>
    or delta <i>u</i><i><sub>WTref</sub></i>) request from the plant controller
    (<i>x</i><i><sub>refmin</sub></i>) (&lt; WindPlantReactiveControlIEC.xrefmax).
    It is a project-dependent parameter.
    '''

    WindPlantIEC: Optional[WindPlantIEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindPlantIEC.WindPlantReactiveControlIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind plant reactive control model associated with this wind plant.
            '''

        })
    '''
    Wind plant reactive control model associated with this wind plant.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindPlantReactiveControlIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this voltage and reactive
            power wind plant model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this voltage and reactive
    power wind plant model.
    '''

    WindPlantIEC: Optional[WindPlantIEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantIEC.WindPlantReactiveControlIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind plant reactive control model associated with this wind plant.
            '''

        })
    '''
    Wind plant reactive control model associated with this wind plant.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindProtectionIEC(IdentifiedObject):
    '''
    The grid protection model includes protection against over- and under-voltage,
    and against over- and under-frequency.
    Reference: IEC 61400-27-1:2015, 5.6.6.
    '''

    mzc: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero crossing measurement mode (<i>Mzc</i>). It is a type-dependent parameter.
            true = WT protection system uses zero crossings to detect frequency (1
            in the IEC model)
            false = WT protection system does not use zero crossings to detect frequency
            (0 in the IEC model).
            '''

        })
    '''
    Zero crossing measurement mode (<i>Mzc</i>). It is a type-dependent
    parameter.
    true = WT protection system uses zero crossings to detect frequency
    (1 in the IEC model)
    false = WT protection system does not use zero crossings to detect
    frequency (0 in the IEC model).
    '''

    dfimax: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum rate of change of frequency (<i>dF</i><i><sub>max</sub></i>). It
            is a type-dependent parameter.
            '''

        })
    '''
    Maximum rate of change of frequency (<i>dF</i><i><sub>max</sub></i>).
    It is a type-dependent parameter.
    '''

    fover: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine over frequency protection activation threshold (<i>f</i><i><sub>over</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Wind turbine over frequency protection activation threshold (<i>f</i><i><sub>over</sub></i>).
    It is a project-dependent parameter.
    '''

    funder: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine under frequency protection activation threshold (<i>f</i><i><sub>under</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Wind turbine under frequency protection activation threshold (<i>f</i><i><sub>under</sub></i>).
    It is a project-dependent parameter.
    '''

    tfma: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time interval of moving average window (<i>TfMA</i>) (&gt;= 0). It is a
            type-dependent parameter.
            '''

        })
    '''
    Time interval of moving average window (<i>TfMA</i>) (&gt;= 0). It
    is a type-dependent parameter.
    '''

    uover: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine over voltage protection activation threshold (<i>u</i><i><sub>over</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Wind turbine over voltage protection activation threshold (<i>u</i><i><sub>over</sub></i>).
    It is a project-dependent parameter.
    '''

    uunder: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine under voltage protection activation threshold (<i>u</i><i><sub>under</sub></i>).
            It is a project-dependent parameter.
            '''

        })
    '''
    Wind turbine under voltage protection activation threshold (<i>u</i><i><sub>under</sub></i>).
    It is a project-dependent parameter.
    '''

    WindTurbineType1or2IEC: Optional[WindTurbineType1or2IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2IEC.WindProtectionIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 1 or type 2 model with which this wind turbine protection
            model is associated.
            '''

        })
    '''
    Wind generator type 1 or type 2 model with which this wind turbine
    protection model is associated.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindProtectionIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this wind turbine protection
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this wind turbine
    protection model is associated.
    '''

    WindDynamicsLookupTable: list[WindDynamicsLookupTable] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WindDynamicsLookupTable.WindProtectionIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The wind dynamics lookup table associated with this grid protection model.
            '''

        })
    '''
    The wind dynamics lookup table associated with this grid protection
    model.
    '''

    WindTurbineType1or2IEC: Optional[WindTurbineType1or2IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType1or2IEC.WindProtectionIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 1 or type 2 model with which this wind turbine protection
            model is associated.
            '''

        })
    '''
    Wind generator type 1 or type 2 model with which this wind turbine
    protection model is associated.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindProtectionIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind generator type 3 or type 4 model with which this wind turbine protection
            model is associated.
            '''

        })
    '''
    Wind generator type 3 or type 4 model with which this wind turbine
    protection model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindRefFrameRotIEC(IdentifiedObject):
    '''
    Reference frame rotation model.
    Reference: IEC 61400-27-1:2015, 5.6.3.5.
    '''

    tpll: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time constant for PLL first order filter model (<i>T</i><i><sub>PLL</sub></i>)
            (&gt;= 0). It is a type-dependent parameter.
            '''

        })
    '''
    Time constant for PLL first order filter model (<i>T</i><i><sub>PLL</sub></i>)
    (&gt;= 0). It is a type-dependent parameter.
    '''

    upll1: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage below which the angle of the voltage is filtered and possibly also
            frozen (<i>u</i><i><sub>PLL1</sub></i>). It is a type-dependent parameter.
            '''

        })
    '''
    Voltage below which the angle of the voltage is filtered and possibly
    also frozen (<i>u</i><i><sub>PLL1</sub></i>). It is a type-dependent
    parameter.
    '''

    upll2: Optional[ float | PU ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage (<i>u</i><i><sub>PLL2</sub></i>) below which the angle of the voltage
            is frozen if <i>u</i><i><sub>PLL2</sub></i><sub> </sub>is smaller or equal
            to <i>u</i><i><sub>PLL1</sub></i> . It is a type-dependent parameter.
            '''

        })
    '''
    Voltage (<i>u</i><i><sub>PLL2</sub></i>) below which the angle of the
    voltage is frozen if <i>u</i><i><sub>PLL2</sub></i><sub> </sub>is smaller
    or equal to <i>u</i><i><sub>PLL1</sub></i> . It is a type-dependent
    parameter.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindRefFrameRotIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this reference frame rotation
            model is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this reference frame
    rotation model is associated.
    '''

    WindTurbineType3or4IEC: Optional[WindTurbineType3or4IEC] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindTurbineType3or4IEC.WindRefFrameRotIEC',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wind turbine type 3 or type 4 model with which this reference frame rotation
            model is associated.
            '''

        })
    '''
    Wind turbine type 3 or type 4 model with which this reference frame
    rotation model is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WindingInsulation(IdentifiedObject):
    '''
    Winding insulation condition as a result of a test.
    '''

    insulationPFStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Status of Winding Insulation Power Factor as of statusDate: Acceptable,
            Minor Deterioration or Moisture Absorption, Major Deterioration or Moisture
            Absorption, Failed.
            '''

        })
    '''
    Status of Winding Insulation Power Factor as of statusDate: Acceptable,
    Minor Deterioration or Moisture Absorption, Major Deterioration or
    Moisture Absorption, Failed.
    '''

    insulationResistance: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For testType, status of Winding Insulation Resistance as of statusDate.
            Typical values are: Acceptable, Questionable, Failed.
            '''

        })
    '''
    For testType, status of Winding Insulation Resistance as of statusDate.
    Typical values are: Acceptable, Questionable, Failed.
    '''

    leakageReactance: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            As of statusDate, the leakage reactance measured at the "from" winding
            with the "to" winding short-circuited and all other windings open-circuited.
            '''

        })
    '''
    As of statusDate, the leakage reactance measured at the "from" winding
    with the "to" winding short-circuited and all other windings open-circuited.
    '''

    FromWinding: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.FromWindingInsulations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ToWinding: Optional[TransformerEnd] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransformerEnd.ToWindingInsulations',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransformerObservation: Optional[TransformerObservation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransformerObservation.WindingInsulationPFs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    WireSpacingInfo: Optional[WireSpacingInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WireSpacingInfo.WirePositions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Wire phase information for this wire position.
            '''

        })
    '''
    Wire phase information for this wire position.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class WorkIdentifiedObject(IdentifiedObject):
    '''
    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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CUAllowableAction(WorkIdentifiedObject):
    '''
    Allowed actions: Install, Remove, Transfer, Abandon, etc.
    '''

    CompatibleUnits: list[CompatibleUnit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CompatibleUnit.CUAllowableAction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CUContractorItem(WorkIdentifiedObject):
    '''
    Compatible unit contractor item.
    '''

    activityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Activity code identifies a specific and distinguishable unit of work.
            '''

        })
    '''
    Activity code identifies a specific and distinguishable unit of work.
    '''

    bidAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount that a given contractor will charge for performing this unit
            of work.
            '''

        })
    '''
    The amount that a given contractor will charge for performing this
    unit of work.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CUGroup(WorkIdentifiedObject):
    '''
    A Compatible Unit Group identifies a set of compatible units which may
    be jointly utilized for estimating and designating jobs.
    '''

    CompatibleUnits: list[CompatibleUnit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CompatibleUnit.CUGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CULaborCode(WorkIdentifiedObject):
    '''
    Labor code associated with various compatible unit labor items.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Labor code.
            '''

        })
    '''
    Labor code.
    '''

    CULaborItems: list[CULaborItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CULaborItem.CULaborCode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CULaborItem(WorkIdentifiedObject):
    '''
    Compatible unit labor item.
    '''

    activityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Activity code identifies a specific and distinguishable unit of work.
            '''

        })
    '''
    Activity code identifies a specific and distinguishable unit of work.
    '''

    laborDuration: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Estimated time to perform work.
            '''

        })
    '''
    Estimated time to perform work.
    '''

    laborRate: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The labor rate applied for work.
            '''

        })
    '''
    The labor rate applied for work.
    '''

    CULaborCode: Optional[CULaborCode] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CULaborCode.CULaborItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class CUMaterialItem(WorkIdentifiedObject):
    '''
    Compatible unit of a consumable supply item. For example, nuts, bolts,
    brackets, glue, etc.
    '''

    corporateCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Code for material.
            '''

        })
    '''
    Code for material.
    '''

    TypeMaterial: Optional[TypeMaterial] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TypeMaterial.CUMaterialItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CUWorkEquipmentItem(WorkIdentifiedObject):
    '''
    Compatible unit for various types of WorkEquipmentAssets, including vehicles.
    '''

    equipCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The equipment type code.
            '''

        })
    '''
    The equipment type code.
    '''

    rate: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Standard usage rate for the type of vehicle.
            '''

        })
    '''
    Standard usage rate for the type of vehicle.
    '''

    TypeAsset: Optional[WorkAsset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkAsset.CUWorkEquipmentAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TypeAsset: Optional[WorkAsset] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkAsset.CUWorkEquipmentAsset',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Capability(WorkIdentifiedObject):
    '''
    Capabilities of a crew.
    '''

    performanceFactor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Capability performance factor.
            '''

        })
    '''
    Capability performance factor.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Classification by utility's work management standards and practices.
            '''

        })
    '''
    Classification by utility's work management standards and practices.
    '''

    Crew: Optional[OldCrew] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldCrew.Capabilities',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ConditionFactor(WorkIdentifiedObject):
    '''
    This is to specify the various condition factors for a design that may
    alter the cost estimate or the allocation.
    '''

    cfValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The actual value of the condition factor, such as labor flat fee or percentage.
            '''

        })
    '''
    The actual value of the condition factor, such as labor flat fee or
    percentage.
    '''

    kind: Optional[ ConditionFactorKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of this condition factor.
            '''

        })
    '''
    Kind of this condition factor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ContractorItem(WorkIdentifiedObject):
    '''
    Contractor information for work task.
    '''

    activityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Activity code identifies a specific and distinguishable unit of work.
            '''

        })
    '''
    Activity code identifies a specific and distinguishable unit of work.
    '''

    bidAmount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount that a given contractor will charge for performing this unit
            of work.
            '''

        })
    '''
    The amount that a given contractor will charge for performing this
    unit of work.
    '''

    cost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The total amount charged.
            '''

        })
    '''
    The total amount charged.
    '''

    WorkCostDetail: Optional[WorkCostDetail] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WorkCostDetail.ContractorItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTask: Optional[OldWorkTask] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldWorkTask.ContractorItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class CostType(WorkIdentifiedObject):
    '''
    A categorization for resources, often costs, in accounting transactions.
    Examples include: material components, building in service, coal sales,
    overhead, etc.
    '''

    amountAssignable: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if an amount can be assigned to the resource element (e.g., building
            in service, transmission plant, software development capital); false otherwise
            (e.g., internal labor, material components).
            '''

        })
    '''
    True if an amount can be assigned to the resource element (e.g., building
    in service, transmission plant, software development capital); false
    otherwise (e.g., internal labor, material components).
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A codified representation of the resource element.
            '''

        })
    '''
    A codified representation of the resource element.
    '''

    level: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The level of the resource element in the hierarchy of resource elements
            (recursive relationship).
            '''

        })
    '''
    The level of the resource element in the hierarchy of resource elements
    (recursive relationship).
    '''

    stage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The stage for which this costType applies: estimated design, estimated
            actual or actual actual.
            '''

        })
    '''
    The stage for which this costType applies: estimated design, estimated
    actual or actual actual.
    '''

    ParentCostType: Optional[CostType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CostType.ChildCostTypes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    CompatibleUnits: list[CompatibleUnit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CompatibleUnit.CostType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ChildCostTypes: list[CostType] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CostType.ParentCostType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetails: list[WorkCostDetail] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkCostDetail.CostType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class DesignLocation(WorkIdentifiedObject):
    '''
    A logical part of the design (e.g., pole and all equipment on a pole).
    This includes points and spans.
    '''

    spanLength: Optional[ float | Length ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The legth of the span from the previous pole to this pole.
            '''

        })
    '''
    The legth of the span from the previous pole to this pole.
    '''

    DesignLocationCUs: list[DesignLocationCU] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'DesignLocationCU.DesignLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ErpBomItemDatas: list[ErpBomItemData] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ErpBomItemData.DesignLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MiscCostItems: list[MiscCostItem] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MiscCostItem.DesignLocation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DesignLocationCU(WorkIdentifiedObject):
    '''
    Compatible unit at a given design location.
    '''

    cuAccount: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A code that helps direct accounting (capital, expense, or accounting treatment).
            '''

        })
    '''
    A code that helps direct accounting (capital, expense, or accounting
    treatment).
    '''

    cuUsage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            As the same CU can be used for different purposes and accounting purposes,
            usage must be specified. Examples include: distribution, transmission,
            substation.
            '''

        })
    '''
    As the same CU can be used for different purposes and accounting purposes,
    usage must be specified. Examples include: distribution, transmission,
    substation.
    '''

    removalDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Year when a CU that represents an asset is removed.
            '''

        })
    '''
    Year when a CU that represents an asset is removed.
    '''

    toBeEnergised: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if associated electrical equipment is intended to be energized while
            work is being performed.
            '''

        })
    '''
    True if associated electrical equipment is intended to be energized
    while work is being performed.
    '''

    cuAction: Optional[ WorkActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A code that instructs the crew what action to perform.
            '''

        })
    '''
    A code that instructs the crew what action to perform.
    '''

    DesignLocation: Optional[DesignLocation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DesignLocation.DesignLocationCUs',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LaborItem(WorkIdentifiedObject):
    '''
    Labor used for work order.
    '''

    activityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Activity code identifies a specific and distinguishable unit of work.
            '''

        })
    '''
    Activity code identifies a specific and distinguishable unit of work.
    '''

    cost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total cost for labor. Note that this may not be able to be derived from
            labor rate and time charged.
            '''

        })
    '''
    Total cost for labor. Note that this may not be able to be derived
    from labor rate and time charged.
    '''

    laborDuration: Optional[ float | Hours ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time required to perform work.
            '''

        })
    '''
    Time required to perform work.
    '''

    laborRate: Optional[ float | CostRate ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The labor rate applied for work.
            '''

        })
    '''
    The labor rate applied for work.
    '''

    WorkCostDetail: Optional[WorkCostDetail] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WorkCostDetail.LaborItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTask: Optional[OldWorkTask] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldWorkTask.LaborItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MiscCostItem(WorkIdentifiedObject):
    '''
    Various cost items that are not associated with compatible units. Examples
    include rental equipment, labor, materials, contractor costs, permits -
    anything not covered in a CU.
    '''

    account: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This drives the accounting treatment for this misc. item.
            '''

        })
    '''
    This drives the accounting treatment for this misc. item.
    '''

    costType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost type for accounting, such as material, labor, vehicle, contractor,
            equipment, overhead.
            '''

        })
    '''
    The cost type for accounting, such as material, labor, vehicle, contractor,
    equipment, overhead.
    '''

    externalRefID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            External reference identifier (e.g. purchase order number, serial number)
            .
            '''

        })
    '''
    External reference identifier (e.g. purchase order number, serial number)
    .
    '''

    costPerUnit: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The cost per unit for this misc. item.
            '''

        })
    '''
    The cost per unit for this misc. item.
    '''

    DesignLocation: Optional[DesignLocation] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DesignLocation.MiscCostItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetail: Optional[WorkCostDetail] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WorkCostDetail.MiscCostItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTask: Optional[OldWorkTask] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldWorkTask.MiscCostItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class OverheadCost(WorkIdentifiedObject):
    '''
    Overhead cost applied to work order.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Overhead code.
            '''

        })
    '''
    Overhead code.
    '''

    cost: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The overhead cost to be applied.
            '''

        })
    '''
    The overhead cost to be applied.
    '''

    WorkTasks: list[OldWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldWorkTask.OverheadCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkCostDetails: list[WorkCostDetail] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'WorkCostDetail.OverheadCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class PropertyUnit(WorkIdentifiedObject):
    '''
    Unit of property for reporting purposes.
    '''

    accountingUsage: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A code that identifies appropriate type of property accounts such as distribution,
            streetlgihts, communications.
            '''

        })
    '''
    A code that identifies appropriate type of property accounts such as
    distribution, streetlgihts, communications.
    '''

    propertyAccount: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used for property record accounting. For example, in the USA, this would
            be a FERC account.
            '''

        })
    '''
    Used for property record accounting. For example, in the USA, this
    would be a FERC account.
    '''

    activityCode: Optional[ WorkActionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Activity code identifies a specific and distinguishable work action.
            '''

        })
    '''
    Activity code identifies a specific and distinguishable work action.
    '''

    CompatibleUnits: list[CompatibleUnit] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CompatibleUnit.PropertyUnit',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class QualificationRequirement(WorkIdentifiedObject):
    '''
    Certain skills are required and must be certified in order for a person
    (typically a member of a crew) to be qualified to work on types of equipment.
    '''

    qualificationID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Qualification identifier.
            '''

        })
    '''
    Qualification identifier.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShiftPattern(WorkIdentifiedObject):
    '''
    The patterns of shifts worked by people or crews.
    '''

    assignmentType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of assignement intended to be worked on this shift, for example, temporary,
            standard, etc.
            '''

        })
    '''
    Type of assignement intended to be worked on this shift, for example,
    temporary, standard, etc.
    '''

    cycleCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of cycles for a temporary shift.
            '''

        })
    '''
    Number of cycles for a temporary shift.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Usage(WorkIdentifiedObject):
    '''
    The way material and assets are used to perform a certain type of work
    task. The way is described in text in the inheritied description attribute.
    '''

    WorkTask: Optional[OldWorkTask] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OldWorkTask.Usages',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class WorkFlowStep(WorkIdentifiedObject):
    '''
    A pre-defined set of work steps for a given type of work.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to define dependencies of each work flow step, which is for the instance
            of WorkTask associated with a given instance of WorkFlow.
            '''

        })
    '''
    Used to define dependencies of each work flow step, which is for the
    instance of WorkTask associated with a given instance of WorkFlow.
    '''

    Work: Optional[Work] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Work.WorkFlowSteps',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    WorkTasks: list[OldWorkTask] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'OldWorkTask.WorkFlowStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IgnAngleContInverter(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InadvertentAccount(Identity):
    '''
    An account for tracking inadvertent interchange versus time for each control
    area. A control area may have more than one inadvertent account in order
    to track inadvertent over one or more specific tie points in addition to
    the usual overall net inadvertent. Separate accounts would also be used
    to track designated time periods, such as on-peak and off-peak.
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.InadvertentAccount',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A control area can have one or more net inadvertent interchange accounts
            '''

        })
    '''
    A control area can have one or more net inadvertent interchange accounts
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfEnergyScheduling'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Instructions(Identity):
    '''
    Provides the necessary information (on a resource basis) to capture the
    Startup/Shutdown instruction results. This information is relevant to the
    DA Market (RUC only) as well as the RT Market (HASP, Pre-dispatch, and
    Interval).
    '''

    bindingDOD: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Binding dispatch operating delta provides a relative delta to be applied.
            Typically used in demand response instructions. The binding<font color="#0f0f0f">DOD
            instructions are cumulative; in other words a second DOD instruction does
            not replace the previous DOD, instead the second DOD adds to the previous
            DODs.</font>
            '''

        })
    '''
    Binding dispatch operating delta provides a relative delta to be applied.
    Typically used in demand response instructions. The binding<font color="#0f0f0f">DOD
    instructions are cumulative; in other words a second DOD instruction
    does not replace the previous DOD, instead the second DOD adds to the
    previous DODs.</font>
    '''

    bindingDOT: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    instructionCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total cost associated with changing the status of the resource.
            '''

        })
    '''
    Total cost associated with changing the status of the resource.
    '''

    instructionStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time the resource should be at Pmin (for start ups).
            Time the resource is off line.
            '''

        })
    '''
    Time the resource should be at Pmin (for start ups).
    Time the resource is off line.
    '''

    minStatusChangeTime: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum start up time required to bring the unit online (minutes).
            SCUC commitment period start-up time. Calculated start up time based on
            the StartUpTimeCurve provided with the Bid.
            This is a combination of StartUp time bid and Unit down time.
            Units is minutes
            '''

        })
    '''
    Minimum start up time required to bring the unit online (minutes).
    SCUC commitment period start-up time. Calculated start up time based
    on the StartUpTimeCurve provided with the Bid.
    This is a combination of StartUp time bid and Unit down time.
    Units is minutes
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    bindingInstruction: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    instructionSource: Optional[ MQSInstructionSource ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            instruction source for market quality results (INS, ACT)
            '''

        })
    '''
    instruction source for market quality results (INS, ACT)
    '''

    instructionType: Optional[ AutomaticDispInstTypeCommitment ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator of either a Start-Up or a Shut-Down.
            '''

        })
    '''
    Indicator of either a Start-Up or a Shut-Down.
    '''

    manuallyBlocked: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Manually Blocked Indicator (Yes/No). The instruction has been blocked by
            an Operator.
            '''

        })
    '''
    Manually Blocked Indicator (Yes/No). The instruction has been blocked
    by an Operator.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    AggregateNode: Optional[AggregateNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregateNode.Instruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.Instructions',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterTieDispatchResponse(Identity):
    '''
    Response from an intertie resource acknowledging receipt of dispatch instructions.
    '''

    acceptMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The accepted mw amount by the responder. aka response mw.
            '''

        })
    '''
    The accepted mw amount by the responder. aka response mw.
    '''

    clearedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            MW amount associated with instruction. For 5 minute binding dispatches,
            this is the Goto MW or DOT
            '''

        })
    '''
    MW amount associated with instruction. For 5 minute binding dispatches,
    this is the Goto MW or DOT
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of the Composite key that downstream app uses to match the instruction
            '''

        })
    '''
    Part of the Composite key that downstream app uses to match the instruction
    '''

    acceptStatus: Optional[ DispatchResponseType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The accept status submitted by the responder. Valid values are NON-RESPONSE,
            ACCEPT, DECLINE, PARTIAL.
            '''

        })
    '''
    The accept status submitted by the responder. Valid values are NON-RESPONSE,
    ACCEPT, DECLINE, PARTIAL.
    '''

    passIndicator: Optional[ PassIndicatorType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of the Composite key that downstream app uses to match the instruction
            '''

        })
    '''
    Part of the Composite key that downstream app uses to match the instruction
    '''

    RegisteredInterTie: Optional[RegisteredInterTie] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredInterTie.InterTieDispatchResponse',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterTieResults(Identity):
    '''
    Provides the tie point specific output from the market applications. Currently,
    this is defined as the loop flow compensation MW value.
    '''

    baseMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net Actual MW Flow
            '''

        })
    '''
    Net Actual MW Flow
    '''

    clearedValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Net Dispatched MW
            '''

        })
    '''
    Net Dispatched MW
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Flowgate.InterTieResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    InterTieClearing: Optional[InterTieClearing] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterTieClearing.InterTieResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class InterchangeETCData(Identity):
    '''
    Existing Transmission Contract data for an interchange schedule.
    '''

    contractNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Existing transmission contract number
            '''

        })
    '''
    Existing transmission contract number
    '''

    usageMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Existing transmission contract usage MW value
            '''

        })
    '''
    Existing transmission contract usage MW value
    '''

    InterchangeSchedule: Optional[InterchangeSchedule] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InterchangeSchedule.InterchangeETCData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class IntervalBlock(Identity):
    '''
    Time sequence of readings of the same reading type. Contained interval
    readings may need conversion through the application of an offset and a
    scalar defined in associated pending.
    Table 548 shows all association ends of IntervalBlock with other classes.
    Table 548 � Association ends of Metering::IntervalBlock with other classes
    Associations
    name
    mult to
    type
    description
    0..*
    PendingCalculation
    0..1
    PendingCalculation
    Pending calculation to apply to interval reading values contained by this
    block (after which the resulting reading type is different than the original
    because it reflects the conversion result).
    0..*
    IntervalReadings
    0..*
    IntervalReading
    Interval reading contained in this block.
    0..*
    ReadingType
    0..1
    ReadingType
    Type information for interval reading values contained in this block.
    0..*
    MeterReading
    0..1
    MeterReading
    Meter reading containing this interval block.
    IntervalReading
    Data captured at regular intervals of time. Interval data could be captured
    as incremental data, absolute data, or relative data. The source for the
    data is usually a tariff quantity or an engineering quantity. Data is typically
    captured in time-tagged, uniform, fixed-length intervals of 5 min, 10 min,
    15 min, 30 min, or 60 min.
    Note: Interval Data is sometimes also called "Interval Data Readings" (IDR).
    '''

    MeterReading: Optional[MeterReading] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MeterReading.IntervalBlocks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Meter reading containing this interval block.
            '''

        })
    '''
    Meter reading containing this interval block.
    '''

    PendingCalculation: Optional[PendingCalculation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PendingCalculation.IntervalBlocks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pending calculation to apply to interval reading values contained by this
            block (after which the resulting reading type is different than the original
            because it reflects the conversion result).
            '''

        })
    '''
    Pending calculation to apply to interval reading values contained by
    this block (after which the resulting reading type is different than
    the original because it reflects the conversion result).
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReadingType.IntervalBlocks',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type information for interval reading values contained in this block.
            '''

        })
    '''
    Type information for interval reading values contained in this block.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    time: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'IrregularIntervalSchedule.TimePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An IrregularTimePoint belongs to an IrregularIntervalSchedule.
            '''

        })
    '''
    An IrregularTimePoint belongs to an IrregularIntervalSchedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    pDistFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Real power (MW) load distribution factor
            '''

        })
    '''
    Real power (MW) load distribution factor
    '''

    qDistFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactive power (MVAr) load distribution factor
            '''

        })
    '''
    Reactive power (MVAr) load distribution factor
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.LoadDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.LoadDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class LoadFollowingInst(Identity):
    '''
    Metered SubSystem Load Following Instruction.
    '''

    endTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Instruction End Time
            '''

        })
    '''
    Instruction End Time
    '''

    loadFollowingMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load Following MW Positive for follow-up and negative for follow-down
            '''

        })
    '''
    Load Following MW Positive for follow-up and negative for follow-down
    '''

    mssInstructionID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique instruction id per instruction, assigned by the SC and provided
            to ADS. ADS passes through.
            '''

        })
    '''
    Unique instruction id per instruction, assigned by the SC and provided
    to ADS. ADS passes through.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Instruction Start Time
            '''

        })
    '''
    Instruction Start Time
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.LoadFollowingInst',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadFollowingOperatorInput(Identity):
    '''
    Model of load following capabilities that are entered by operators on a
    temporary basis. Related to Registered Resources in Metered Subsystems.
    '''

    dataEntryTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time the data entry was performed
            '''

        })
    '''
    Time the data entry was performed
    '''

    tempLoadFollowingDownManualCap: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            temporarily manually entered LFD capacity
            '''

        })
    '''
    temporarily manually entered LFD capacity
    '''

    tempLoadFollowingUpManualCap: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            temporarily manually entered LFU capacity.
            '''

        })
    '''
    temporarily manually entered LFU capacity.
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.LoadFollowingOperatorInput',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadModelPartVersion(Identity):
    '''
    Load a model part version.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class LoadRatio(Identity):
    '''
    Representing the ratio of the load share for the associated SC.
    '''

    intervalEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval End Time
            '''

        })
    '''
    Interval End Time
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval Start Time
            '''

        })
    '''
    Interval Start Time
    '''

    share: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Share in percentage of total Market load for the selected time interval.
            '''

        })
    '''
    Share in percentage of total Market load for the selected time interval.
    '''

    SchedulingCoordinator: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.LoadRatio',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SchedulingCoordinator: Optional[SchedulingCoordinator] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SchedulingCoordinator.LoadRatio',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class LossClearingResults(Identity):
    '''
    Provides the MW loss for RUC Zones, subcontrol areas, and the total loss.
    '''

    lossMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.LossClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    LossClearing: Optional[LossClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LossClearing.LossClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RUCZone: Optional[RUCZone] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RUCZone.LossClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SubControlArea: Optional[SubControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SubControlArea.LossClearingResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MPMResourceStatus(Identity):
    '''
    Model of results of Market Power tests, gives status of resource for the
    associated interval.
    '''

    resourceStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interval Test Status
            'N' - not applicable
            '''

        })
    '''
    Interval Test Status
    'N' - not applicable
    '''

    MPMTestCategory: Optional[MPMTestCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MPMTestCategory.MPMResourceStatus',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.MPMResourceStatus',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MPMTestResults(Identity):
    '''
    Provides the outcome and margin percent (as appropriate) result data for
    the MPM tests. There are relationships to Zone for Designated Congestion
    Area Tests, CurveSchedData for bid segment tests, to the SubControlArea
    for the system wide level tests, and Pnodes for the LMPM impact tests.
    '''

    marginPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to show the Margin % result of the Impact test
            '''

        })
    '''
    Used to show the Margin % result of the Impact test
    '''

    outcome: Optional[ MPMTestOutcome ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The results of the test. For the Price, Impact, and Conduct tests, typical
            values are NA, Pass, Fail, Disable, or Skip.
            '''

        })
    '''
    The results of the test. For the Price, Impact, and Conduct tests,
    typical values are NA, Pass, Fail, Disable, or Skip.
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.MPMTestResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMClearing: Optional[MPMClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MPMClearing.MPMTestResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MPMTestCategory: Optional[MPMTestCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MPMTestCategory.MPMTestResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MPMTestThreshold(Identity):
    '''
    Market Power Mitigation (MPM) test thresholds for resource as well as designated
    congestion areas (DCAs).
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market Type (DAM, RTM)
            '''

        })
    '''
    Market Type (DAM, RTM)
    '''

    percent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price Threshold in %
            '''

        })
    '''
    Price Threshold in %
    '''

    price: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price Threshold in $/MW
            '''

        })
    '''
    Price Threshold in $/MW
    '''

    MPMTestCategory: Optional[MPMTestCategory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MPMTestCategory.MPMTestThreshold',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MWLimitSchedule(Identity):
    '''
    Maximum MW and optionally Minimum MW (Y1 and Y2, respectively).
    '''

    SecurityConstraintLimit: Optional[ContingencyConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ContingencyConstraintLimit.MWLimitSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SecurityConstraintLimit: Optional[ContingencyConstraintLimit] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContingencyConstraintLimit.MWLimitSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of invoice (default is 'sales').
            '''

        })
    '''
    Kind of invoice (default is 'sales').
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of line item.
            '''

        })
    '''
    Kind of line item.
    '''

    ContainerMarketInvoiceLineItem: Optional[MarketInvoiceLineItem] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketInvoiceLineItem.ComponentMarketInvoiceLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketInvoice: Optional[MarketInvoice] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketInvoice.MarketInvoiceLineItems',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time journal entry was recorded.
            '''

        })
    '''
    Date and time journal entry was recorded.
    '''

    accountKind: Optional[ MktAccountKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of account for this entry.
            '''

        })
    '''
    Kind of account for this entry.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The amount of the debit or credit for this account.
            '''

        })
    '''
    The amount of the debit or credit for this account.
    '''

    MarketLedger: Optional[MarketLedger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketLedger.MarketLedgerEntries',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MarketObjectStatus(Identity):
    '''
    The condition or position of an object with regard to its standing.
    '''

    status: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded condition or position of an object with regard to its standing.
            '''

        })
    '''
    The coded condition or position of an object with regard to its standing.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @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.
    '''

    clearedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cleared generation Value in MW. For AS, this value is clearedMW = AS Total.
            For AS, clearedMW - selfScheduleMW = AS Procured
            '''

        })
    '''
    Cleared generation Value in MW. For AS, this value is clearedMW = AS
    Total. For AS, clearedMW - selfScheduleMW = AS Procured
    '''

    clearedPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Marginal Price ($/MW) for the commodity (Energy, Regulation Up, Regulation
            Down, Spinning Reserve, or Non-spinning reserve) based on the pricing run.
            '''

        })
    '''
    Marginal Price ($/MW) for the commodity (Energy, Regulation Up, Regulation
    Down, Spinning Reserve, or Non-spinning reserve) based on the pricing
    run.
    '''

    dispatchCtMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatchable MW for Combustion units.
            '''

        })
    '''
    Dispatchable MW for Combustion units.
    '''

    dispatchHydroMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatchable MW for Hydro units.
            '''

        })
    '''
    Dispatchable MW for Hydro units.
    '''

    dispatchRate: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatch rate in MW/minutes.
            '''

        })
    '''
    Dispatch rate in MW/minutes.
    '''

    dispatchSteamMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Dispatchable MW for Steam units.
            '''

        })
    '''
    Dispatchable MW for Steam units.
    '''

    imbalanceEnergyBias: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Imbalance Energy Bias (MW) by Time Period (5' only)
            '''

        })
    '''
    Imbalance Energy Bias (MW) by Time Period (5' only)
    '''

    maxSufficiencyIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Region requirement maximum limit
            '''

        })
    '''
    Region requirement maximum limit
    '''

    minSufficiencyIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Region requirement minimum limit
            '''

        })
    '''
    Region requirement minimum limit
    '''

    reqMaxMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Region requirement maximum limit
            '''

        })
    '''
    Region requirement maximum limit
    '''

    reqMinMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Region requirement minimum limit
            '''

        })
    '''
    Region requirement minimum limit
    '''

    selfScheduleMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Aof AS, selfScheduleMW = AS Self-Provided
            '''

        })
    '''
    Aof AS, selfScheduleMW = AS Self-Provided
    '''

    limitFlag: Optional[ ResourceLimitIndicator ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Locational AS Flags indicating whether the Upper or Lower Bound limit of
            the AS regional procurment is binding
            '''

        })
    '''
    Locational AS Flags indicating whether the Upper or Lower Bound limit
    of the AS regional procurment is binding
    '''

    lumpyIndicator: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The "Lumpy Flag"(Y/N) indicates whether the resource that sets the price
            is a lumpy generator by hour over the time horizon.
            Only applicable for the Day Ahead Market
            '''

        })
    '''
    The "Lumpy Flag"(Y/N) indicates whether the resource that sets the
    price is a lumpy generator by hour over the time horizon.
    Only applicable for the Day Ahead Market
    '''

    AncillaryServiceClearing: Optional[AncillaryServiceClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AncillaryServiceClearing.MarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.MarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketRegion: Optional[MarketRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketRegion.MarketRegionResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    ancillarySvcCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total AS Cost (i.e., payment) ($) over the time horizon
            '''

        })
    '''
    Total AS Cost (i.e., payment) ($) over the time horizon
    '''

    energyCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total Energy Cost ($) over the time horizon
            '''

        })
    '''
    Total Energy Cost ($) over the time horizon
    '''

    minimumLoadCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total Minimum Load Cost ($) over the time horizon
            '''

        })
    '''
    Total Minimum Load Cost ($) over the time horizon
    '''

    startUpCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total Start-up Cost ($) over the time horizon
            '''

        })
    '''
    Total Start-up Cost ($) over the time horizon
    '''

    totalCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total Cost (Energy + AS) cost ($) by over the time horizon
            '''

        })
    '''
    Total Cost (Energy + AS) cost ($) by over the time horizon
    '''

    totalRucCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The total RUC capacity cost for this interval
            '''

        })
    '''
    The total RUC capacity cost for this interval
    '''

    contingentOperatingResAvail: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Global Contingent Operating Reserve Availability Indicator (Yes/No)
            '''

        })
    '''
    Global Contingent Operating Reserve Availability Indicator (Yes/No)
    '''

    EnergyMarket: Optional[EnergyMarket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnergyMarket.MarketResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class MitigatedBidSegment(Identity):
    '''
    Model of mitigated bid. Indicates segment of piece-wise linear bid, that
    has been mitigated.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    segmentMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mitigated bid segment MW value
            '''

        })
    '''
    Mitigated bid segment MW value
    '''

    segmentNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Mitigated Bid Segment Number
            '''

        })
    '''
    Mitigated Bid Segment Number
    '''

    thresholdType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Bid.MitigatedBidSegment',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Name(Identity):
    '''
    The Name class provides the means to define any number of human readable
    names for an object. A name is <b>not</b> to be used for defining inter-object
    relationships. For inter-object relationships instead use the object identification
    'mRID'.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Any free text that name the object.
            '''

        })
    '''
    Any free text that name the object.
    '''

    IdentifiedObject: Optional[IdentifiedObject] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'IdentifiedObject.Names',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identified object that this name designates.
            '''

        })
    '''
    Identified object that this name designates.
    '''

    NameType: Optional[NameType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NameType.Names',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this name.
            '''

        })
    '''
    Type of this name.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the name type.
            '''

        })
    '''
    Description of the name type.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of the name type.
            '''

        })
    '''
    Name of the name type.
    '''

    NameTypeAuthority: Optional[NameTypeAuthority] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'NameTypeAuthority.NameTypes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Authority responsible for managing names of this type.
            '''

        })
    '''
    Authority responsible for managing names of this type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Names: list[Name] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Name.NameType',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All names of this type.
            '''

        })
    '''
    All names of this type.
    '''

@dataclass(repr=False)
class NameTypeAuthority(Identity):
    '''
    Authority responsible for creation and management of names of a given type;
    typically an organization or an enterprise system.
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Description of the name type authority.
            '''

        })
    '''
    Description of the name type authority.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of the name type authority.
            '''

        })
    '''
    Name of the name type authority.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    NameTypes: list[NameType] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'NameType.NameTypeAuthority',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All name types managed by this authority.
            '''

        })
    '''
    All name types managed by this authority.
    '''

@dataclass(repr=False)
class NetworkModelCaseDefinition(Identity):
    '''
    Instructions to build a network model case, including when appropriate
    the results.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NetworkModelProjectCollection(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NetworkModelProjectDocument(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class NonlinearShuntCompensatorPhasePoint(Identity):
    '''
    A per phase non linear shunt compensator bank or section admittance value.
    The number of NonlinearShuntCompenstorPhasePoint instances associated with
    a NonlinearShuntCompensatorPhase shall be equal to ShuntCompensatorPhase.maximumSections.
    ShuntCompensator.sections shall only be set to one of the NonlinearShuntCompenstorPhasePoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompenstorPhasePoint-s.
    '''

    sectionNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The number of the section.
            '''

        })
    '''
    The number of the section.
    '''

    b: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance per section.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance per section.
    '''

    NonlinearShuntCompensatorPhase: Optional[NonlinearShuntCompensatorPhase] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NonlinearShuntCompensatorPhase.NonlinearShuntCompensatorPhasePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 NonlinearShuntCompenstorPoint instances associated with a NonlinearShuntCompensator
    shall be equal to ShuntCompensator.maximumSections. ShuntCompensator.sections
    shall only be set to one of the NonlinearShuntCompenstorPoint.sectionNumber.
    There is no interpolation between NonlinearShuntCompenstorPoint-s.
    '''

    sectionNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The number of the section.
            '''

        })
    '''
    The number of the section.
    '''

    b: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) susceptance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) susceptance per section.
    '''

    b0: Optional[ float | Susceptance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) susceptance per section.
            '''

        })
    '''
    Zero sequence shunt (charging) susceptance per section.
    '''

    g: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Positive sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Positive sequence shunt (charging) conductance per section.
    '''

    g0: Optional[ float | Conductance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero sequence shunt (charging) conductance per section.
            '''

        })
    '''
    Zero sequence shunt (charging) conductance per section.
    '''

    NonlinearShuntCompensator: Optional[NonlinearShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'NonlinearShuntCompensator.NonlinearShuntCompensatorPoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Non-linear shunt compensator owning this point.
            '''

        })
    '''
    Non-linear shunt compensator owning this point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class OilPrice(Identity):
    '''
    Price of oil in monetary units.
    '''

    oilPriceIndex: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The average oil price at a defined fuel region.
            '''

        })
    '''
    The average oil price at a defined fuel region.
    '''

    FuelRegion: Optional[FuelRegion] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'FuelRegion.OilPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    FuelRegion: Optional[FuelRegion] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'FuelRegion.OilPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'OperatingParticipant.OperatingShare',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'PowerSystemResource.OperatingShare',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Operation(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelFrames'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class OperatonalLimitTypeScaling(Identity):
    '''
    One operational limit type scales values of another operational limit type
    when under the same operational limit set. This applies to any operational
    limit assigned to the target operational limit type and without other limit
    dependency models.
    '''

    scalingPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The percentage scaling of the source limit to compute the target limit.
            Applys to operational limits within an operaitonal limit set when both
            source and target operational limit types exist.
            '''

        })
    '''
    The percentage scaling of the source limit to compute the target limit.
    Applys to operational limits within an operaitonal limit set when both
    source and target operational limit types exist.
    '''

    SourceOperationalLimitType: Optional[OperationalLimitType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitType.SourceOperationalLimitTypeScaling',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TargetOperationalLimit: Optional[OperationalLimitType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitType.TargetOperationalLimitmTypeScaling',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    TargetOperationalLimit: Optional[OperationalLimitType] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OperationalLimitType.TargetOperationalLimitmTypeScaling',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class OutageArea(Identity):
    '''
    This defines the area covered by the Outage.
    '''

    earliestReportedTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            This is the reported time of the first outage report
            '''

        })
    '''
    This is the reported time of the first outage report
    '''

    metersServed: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            defines the number of meters served in the defined area.
            '''

        })
    '''
    defines the number of meters served in the defined area.
    '''

    outageAreaKind: Optional[ AreaKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            defines the type of area that has the outage - county, state, zipcode,
            etc.
            '''

        })
    '''
    defines the type of area that has the outage - county, state, zipcode,
    etc.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 PFmode(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.PFmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.PFmodel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.PFmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.PFmodel',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class PanPricingDetail(Identity):
    '''
    Detail for a single price command/action.
    '''

    alternateCostDelivered: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Alternative measure of the cost of the energy consumed. An example might
            be the emissions of CO2 for each kWh of electricity consumed providing
            a measure of the environmental cost.
            '''

        })
    '''
    Alternative measure of the cost of the energy consumed. An example
    might be the emissions of CO2 for each kWh of electricity consumed
    providing a measure of the environmental cost.
    '''

    alternateCostUnit: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost unit for the alternate cost delivered field. One example is kg of
            CO2 per unit of measure.
            '''

        })
    '''
    Cost unit for the alternate cost delivered field. One example is kg
    of CO2 per unit of measure.
    '''

    currentTimeDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current time as determined by a PAN device.
            '''

        })
    '''
    Current time as determined by a PAN device.
    '''

    generationPriceRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio of 'generationPrice' to the "normal" price chosen by the commodity
            provider.
            '''

        })
    '''
    Ratio of 'generationPrice' to the "normal" price chosen by the commodity
    provider.
    '''

    priceRatio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Ratio of 'price' to the "normal" price chosen by the commodity provider.
            '''

        })
    '''
    Ratio of 'price' to the "normal" price chosen by the commodity provider.
    '''

    priceTier: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Pricing tier as chosen by the commodity provider.
            '''

        })
    '''
    Pricing tier as chosen by the commodity provider.
    '''

    priceTierCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum number of price tiers available.
            '''

        })
    '''
    Maximum number of price tiers available.
    '''

    priceTierLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Label for price tier.
            '''

        })
    '''
    Label for price tier.
    '''

    rateLabel: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Label of the current billing rate specified by commodity provider.
            '''

        })
    '''
    Label of the current billing rate specified by commodity provider.
    '''

    registerTier: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Register tier accumulating usage information.
            '''

        })
    '''
    Register tier accumulating usage information.
    '''

    unitOfMeasure: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Defines commodity as well as its base unit of measure.
            '''

        })
    '''
    Defines commodity as well as its base unit of measure.
    '''

    generationPrice: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price of the commodity measured in base unit of currency per 'unitOfMeasure'.
            '''

        })
    '''
    Price of the commodity measured in base unit of currency per 'unitOfMeasure'.
    '''

    price: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Price of the commodity measured in base unit of currency per 'unitOfMeasure'.
            '''

        })
    '''
    Price of the commodity measured in base unit of currency per 'unitOfMeasure'.
    '''

    PanPricing: Optional[PanPricing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PanPricing.PanPricingDetails',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PAN pricing command/action issuing this price detail.
            '''

        })
    '''
    PAN pricing command/action issuing this price detail.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Pcontrol(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.Pcontrol',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Pcontrol',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.Pcontrol',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Pcontrol',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class PendingCalculation(Identity):
    '''
    When present, a scalar conversion that needs to be applied to every IntervalReading.value
    contained in IntervalBlock. This conversion results in a new associated
    ReadingType, reflecting the true dimensions of IntervalReading values after
    the conversion.
    '''

    multiplyBeforeAdd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Whether scalars should be applied before adding the 'offset'.
            '''

        })
    '''
    Whether scalars should be applied before adding the 'offset'.
    '''

    offset: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Offset to be added as well as multiplication using scalars.
            '''

        })
    '''
    (if applicable) Offset to be added as well as multiplication using
    scalars.
    '''

    scalarDenominator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if scalar is rational number) When 'IntervalReading.value' is multiplied
            by 'scalarNumerator' and divided by this value, it causes a unit of measure
            conversion to occur, resulting in the 'ReadingType.unit'.
            '''

        })
    '''
    (if scalar is rational number) When 'IntervalReading.value' is multiplied
    by 'scalarNumerator' and divided by this value, it causes a unit of
    measure conversion to occur, resulting in the 'ReadingType.unit'.
    '''

    scalarFloat: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if scalar is floating number) When multiplied with 'IntervalReading.value',
            it causes a unit of measure conversion to occur, according to the 'ReadingType.unit'.
            '''

        })
    '''
    (if scalar is floating number) When multiplied with 'IntervalReading.value',
    it causes a unit of measure conversion to occur, according to the 'ReadingType.unit'.
    '''

    scalarNumerator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if scalar is integer or rational number) When the scalar is a simple integer,
            and this attribute is presented alone and multiplied with 'IntervalReading.value',
            it causes a unit of measure conversion to occur, resulting in the 'ReadingType.unit'.
            It is never used in conjunction with 'scalarFloat', only with 'scalarDenominator'.
            '''

        })
    '''
    (if scalar is integer or rational number) When the scalar is a simple
    integer, and this attribute is presented alone and multiplied with
    'IntervalReading.value', it causes a unit of measure conversion to
    occur, resulting in the 'ReadingType.unit'. It is never used in conjunction
    with 'scalarFloat', only with 'scalarDenominator'.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ReadingType.PendingCalculation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reading type resulting from this pending conversion.
            '''

        })
    '''
    Reading type resulting from this pending conversion.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    IntervalBlocks: list[IntervalBlock] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'IntervalBlock.PendingCalculation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All blocks of interval reading values to which this pending conversion
            applies.
            '''

        })
    '''
    All blocks of interval reading values to which this pending conversion
    applies.
    '''

    ReadingType: Optional[ReadingType] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ReadingType.PendingCalculation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            Reading type resulting from this pending conversion.
            '''

        })
    '''
    Reading type resulting from this pending conversion.
    '''

@dataclass(repr=False)
class Period(Identity):
    '''
    An identification of a time interval that may have a given resolution.
    '''

    resolution: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The number of units of time that compose an individual step within a period.
            '''

        })
    '''
    The number of units of time that compose an individual step within
    a period.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Point: list[Point] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Point.Period',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class PhaseImpedanceData(Identity):
    '''
    Impedance and conductance matrix element values.
    The diagonal elements are described by the elements having the same toPhase
    and fromPhase value and the off diagonal elements have different toPhase
    and fromPhase values. The matrix can also be stored in symmetric lower
    triangular format using the row and column attributes, which map to ACLineSegmentPhase.sequenceNumber.
    '''

    column: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The matrix element's column number, in the range 1 to row. Only the lower
            triangle needs to be stored. This column number matches ACLineSegmentPhase.sequenceNumber.
            '''

        })
    '''
    The matrix element's column number, in the range 1 to row. Only the
    lower triangle needs to be stored. This column number matches ACLineSegmentPhase.sequenceNumber.
    '''

    row: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The matrix element�s row number, in the range 1 to PerLengthPhaseImpedance.conductorCount.
            Only the lower triangle needs to be stored. This row number matches ACLineSegmentPhase.sequenceNumber.
            '''

        })
    '''
    The matrix element�s row number, in the range 1 to PerLengthPhaseImpedance.conductorCount.
    Only the lower triangle needs to be stored. This row number matches
    ACLineSegmentPhase.sequenceNumber.
    '''

    b: Optional[ float | SusceptancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Susceptance matrix element value, per length of unit.
            '''

        })
    '''
    Susceptance matrix element value, per length of unit.
    '''

    fromPhase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Conductance matrix element value, per length of unit.
            '''

        })
    '''
    Conductance matrix element value, per length of unit.
    '''

    r: Optional[ float | ResistancePerLength ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resistance matrix element value, per length of unit.
            '''

        })
    '''
    Resistance matrix element value, per length of unit.
    '''

    toPhase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reactance matrix element value, per length of unit.
            '''

        })
    '''
    Reactance matrix element value, per length of unit.
    '''

    PhaseImpedance: Optional[PerLengthPhaseImpedance] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'PerLengthPhaseImpedance.PhaseImpedanceData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PlannedMarket(Identity):
    '''
    Represent a planned market. For example a planned DA/HA/RT market.
    '''

    marketEndTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market end time.
            '''

        })
    '''
    Market end time.
    '''

    marketStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market start time.
            '''

        })
    '''
    Market start time.
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Market type.
            '''

        })
    '''
    Market type.
    '''

    MarketPlan: Optional[MarketPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketPlan.PlannedMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A market plan has a number of markets (DA, HA, RT).
            '''

        })
    '''
    A market plan has a number of markets (DA, HA, RT).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketPlan'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MarketRun: list[MarketRun] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'MarketRun.PlannedMarket',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            A planned market could have multiple market runs for the reason that a
            planned market could have a rerun.
            '''

        })
    '''
    A planned market could have multiple market runs for the reason that
    a planned market could have a rerun.
    '''

@dataclass(repr=False)
class PnodeDistributionFactor(Identity):
    '''
    This class allows SC to input different distribution factors for pricing
    node.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to calculate "participation" of Pnode in an AggregatePnode. For example,
            for regulation region this factor is 1 and total sum of all factors for
            a specific regulation region does not have to be 1. For pricing zone the
            total sum of all factors has to be 1.
            '''

        })
    '''
    Used to calculate "participation" of Pnode in an AggregatePnode. For
    example, for regulation region this factor is 1 and total sum of all
    factors for a specific regulation region does not have to be 1. For
    pricing zone the total sum of all factors has to be 1.
    '''

    podLossFactor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Point of delivery loss factor
            '''

        })
    '''
    Point of delivery loss factor
    '''

    offPeak: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that this distribution factor is to apply during off peak.
            '''

        })
    '''
    Indication that this distribution factor is to apply during off peak.
    '''

    onPeak: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indication that this factor is to apply during Peak periods.
            '''

        })
    '''
    Indication that this factor is to apply during Peak periods.
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.PnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    BidDistributionFactor: Optional[BidDistributionFactor] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BidDistributionFactor.PnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    IndividualPnode: Optional[IndividualPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'IndividualPnode.PnodeDistributionFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PnodeResults(Identity):
    '''
    Provides the total price, the cost component, the loss component, and the
    congestion component for Pnodes for the forward and real time markets.
    There are several prices produced based on the run type (MPM, RUC, Pricing,
    or Scheduling/Dispatch).
    '''

    congestLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Congestion component of Location Marginal Price (LMP) in monetary units
            per MW.
            '''

        })
    '''
    Congestion component of Location Marginal Price (LMP) in monetary units
    per MW.
    '''

    costLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost component of Locational Marginal Pricing (LMP) in monetary units per
            MW.
            '''

        })
    '''
    Cost component of Locational Marginal Pricing (LMP) in monetary units
    per MW.
    '''

    lossLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss component of Location Marginal Price (LMP) in monetary units per MW.
            '''

        })
    '''
    Loss component of Location Marginal Price (LMP) in monetary units per
    MW.
    '''

    marginalClearingPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Locational Marginal Price (LMP) ($/MWh)
            '''

        })
    '''
    Locational Marginal Price (LMP) ($/MWh)
    '''

    scheduledMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            total MW schedule at the pnode
            '''

        })
    '''
    total MW schedule at the pnode
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Pnode: Optional[Pnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Pnode.PnodeResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    PnodeClearing: Optional[PnodeClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PnodeClearing.PnodeResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Point(Identity):
    '''
    An identification of a set of values beeing adressed within a specific
    interval of time.
    '''

    position: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A sequential value representing the relative position within a given time
            interval.
            '''

        })
    '''
    A sequential value representing the relative position within a given
    time interval.
    '''

    quality: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The quality of the information being provided. This quality may be estimated,
            not available, as provided, etc.
            '''

        })
    '''
    The quality of the information being provided. This quality may be
    estimated, not available, as provided, etc.
    '''

    secondaryQuantity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Secondary quantity identified for a point.
            '''

        })
    '''
    Secondary quantity identified for a point.
    '''

    Period: Optional[Period] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Period.Point',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    quantity: list[Quantity] = field(
        default_factory=list,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Quantity.Point',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Price: list[Price] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Price.Point',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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).
    '''

    groupNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero-relative sequence number of this group within a series of points;
            used when there is a need to express disjoint groups of points that are
            considered to be part of a single location.
            '''

        })
    '''
    Zero-relative sequence number of this group within a series of points;
    used when there is a need to express disjoint groups of points that
    are considered to be part of a single location.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Zero-relative sequence number of this point within a series of points.
            '''

        })
    '''
    Zero-relative sequence number of this point within a series of points.
    '''

    xPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            X axis position.
            '''

        })
    '''
    X axis position.
    '''

    yPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Y axis position.
            '''

        })
    '''
    Y axis position.
    '''

    zPosition: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            (if applicable) Z axis position.
            '''

        })
    '''
    (if applicable) Z axis position.
    '''

    Location: Optional[Location] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Location.PositionPoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Location described by this position point.
            '''

        })
    '''
    Location described by this position point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Price(Identity):
    '''
    The cost corresponding to a specific measure and expressed in a currency.
    '''

    amount: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A number of monetary units specified in a unit of currency.
            '''

        })
    '''
    A number of monetary units specified in a unit of currency.
    '''

    category: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The category of a price to be used in a price calculation. The price category
            is mutually agreed between System Operators.
            '''

        })
    '''
    The category of a price to be used in a price calculation. The price
    category is mutually agreed between System Operators.
    '''

    direction: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The direction indicates whether a System Operator pays the Market Parties
            or inverse.
            '''

        })
    '''
    The direction indicates whether a System Operator pays the Market Parties
    or inverse.
    '''

    Point: Optional[Point] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Point.Price',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @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.
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    CommodityPrice: list[CommodityPrice] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'CommodityPrice.PriceDescriptor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class ProfileData(Identity):
    '''
    Data for profile.
    '''

    bidPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Bid price associated with contract
            '''

        })
    '''
    Bid price associated with contract
    '''

    minimumLevel: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum MW value of contract
            '''

        })
    '''
    Minimum MW value of contract
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sequence to provide item numbering for the profile. { greater than or equal
            to 1 }
            '''

        })
    '''
    Sequence to provide item numbering for the profile. { greater than
    or equal to 1 }
    '''

    startDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start date/time for this profile.
            '''

        })
    '''
    Start date/time for this profile.
    '''

    stopDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Stop date/time for this profile.
            '''

        })
    '''
    Stop date/time for this profile.
    '''

    capacityLevel: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Capacity level for the profile, in MW.
            '''

        })
    '''
    Capacity level for the profile, in MW.
    '''

    energyLevel: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Energy level for the profile, in MWH.
            '''

        })
    '''
    Energy level for the profile, in MWH.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ProprietaryParameterDynamics(Identity):
    '''
    Supports definition of one or more parameters of several different datatypes
    for use by proprietary user-defined models.
    This class does not inherit from IdentifiedObject since it is not intended
    that a single instance of it be referenced by more than one proprietary
    user-defined model instance.
    '''

    booleanParameterValue: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Boolean parameter value. If this attribute is populated, integerParameterValue
            and floatParameterValue will not be.
            '''

        })
    '''
    Boolean parameter value. If this attribute is populated, integerParameterValue
    and floatParameterValue will not be.
    '''

    floatParameterValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Floating point parameter value. If this attribute is populated, booleanParameterValue
            and integerParameterValue will not be.
            '''

        })
    '''
    Floating point parameter value. If this attribute is populated, booleanParameterValue
    and integerParameterValue will not be.
    '''

    integerParameterValue: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Integer parameter value. If this attribute is populated, booleanParameterValue
            and floatParameterValue will not be.
            '''

        })
    '''
    Integer parameter value. If this attribute is populated, booleanParameterValue
    and floatParameterValue will not be.
    '''

    parameterNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Sequence number of the parameter among the set of parameters associated
            with the related proprietary user-defined model.
            '''

        })
    '''
    Sequence number of the parameter among the set of parameters associated
    with the related proprietary user-defined model.
    '''

    AsynchronousMachineUserDefined: Optional[AsynchronousMachineUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'AsynchronousMachineUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    CSCUserDefined: Optional[CSCUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'CSCUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    DiscontinuousExcitationControlUserDefined: Optional[DiscontinuousExcitationControlUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'DiscontinuousExcitationControlUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    ExcitationSystemUserDefined: Optional[ExcitationSystemUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ExcitationSystemUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    LoadUserDefined: Optional[LoadUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'LoadUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    MechanicalLoadUserDefined: Optional[MechanicalLoadUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MechanicalLoadUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    OverexcitationLimiterUserDefined: Optional[OverexcitationLimiterUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'OverexcitationLimiterUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    PFVArControllerType1UserDefined: Optional[PFVArControllerType1UserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType1UserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    PFVArControllerType2UserDefined: Optional[PFVArControllerType2UserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PFVArControllerType2UserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    PowerSystemStabilizerUserDefined: Optional[PowerSystemStabilizerUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'PowerSystemStabilizerUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    SVCUserDefined: Optional[SVCUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SVCUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    SynchronousMachineUserDefined: Optional[SynchronousMachineUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SynchronousMachineUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    TurbineGovernorUserDefined: Optional[TurbineGovernorUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineGovernorUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    TurbineLoadControllerUserDefined: Optional[TurbineLoadControllerUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TurbineLoadControllerUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    UnderexcitationLimiterUserDefined: Optional[UnderexcitationLimiterUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'UnderexcitationLimiterUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    VoltageAdjusterUserDefined: Optional[VoltageAdjusterUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageAdjusterUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    VoltageCompensatorUserDefined: Optional[VoltageCompensatorUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VoltageCompensatorUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    VSCUserDefined: Optional[VSCUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    WindPlantUserDefined: Optional[WindPlantUserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindPlantUserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    WindType1or2UserDefined: Optional[WindType1or2UserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindType1or2UserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    WindType3or4UserDefined: Optional[WindType3or4UserDefined] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'WindType3or4UserDefined.ProprietaryParameterDynamics',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Proprietary user-defined model with which this parameter is associated.
            '''

        })
    '''
    Proprietary user-defined model with which this parameter is associated.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'UserDefinedModels'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PublicX509Certificate(Identity):
    '''
    Used to convey information that will allow matching in order to determine
    which certificate to use. Actual certificates are exchanged externally
    to the CIM exchange.
    '''

    issuerName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Represents the CA that issued the certificate. Defined to be per X.509.
            '''

        })
    '''
    Represents the CA that issued the certificate. Defined to be per X.509.
    '''

    serialNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Is the serial number of the certificate per X.509 definition.
            '''

        })
    '''
    Is the serial number of the certificate per X.509 definition.
    '''

    ISOUpperLayer: Optional[ISOUpperLayer] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ISOUpperLayer.UpperLayerPublicX509Certificate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Application layer used with the certificate for mutual authentication.
            '''

        })
    '''
    Application layer used with the certificate for mutual authentication.
    '''

    TCPAccessPoint: Optional[TCPAccessPoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TCPAccessPoint.PublicX509Certificate',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The association allows a certificate to be bound for use by TLS.
            '''

        })
    '''
    The association allows a certificate to be bound for use by TLS.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Qlimiter(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.Qlimiter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qlimiter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.Qlimiter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qlimiter',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Qmode(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.Qmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.Qmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qmode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Qregulator(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.Qregulator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qregulator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.Qregulator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    HVDClookUpTable: list[HVDCLookUpTable] = field(
        default_factory=list,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'HVDCLookUpTable.Qregulator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Qregulator',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value has been replaced by State Estimator. estimatorReplaced is not an
            IEC61850 quality bit but has been put in this class for convenience.
            '''

        })
    '''
    Value has been replaced by State Estimator. estimatorReplaced is not
    an IEC61850 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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Validity of the measurement value.
            '''

        })
    '''
    Validity of the measurement value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'MeasurementValue.MeasurementValueQuality',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Meas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class AnalogMeasurementValueQuality(MeasurementValueQuality):
    '''
    Measurement quality flags for Analog Values.
    '''

    scadaQualityCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The quality code for the given Analog Value.
            '''

        })
    '''
    The quality code for the given Analog Value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DiscreteMeasurementValueQuality(MeasurementValueQuality):
    '''
    Measurement quality flags for Discrete Values.
    '''

    manualReplaceIndicator: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switch Manual Replace Indicator. Flag indicating that the switch is manual
            replace.
            '''

        })
    '''
    Switch Manual Replace Indicator. Flag indicating that the switch is
    manual replace.
    '''

    removeFromOperationIndicator: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Removed From Operation Indicator. Flag indicating that the switch is removed
            from operation.
            '''

        })
    '''
    Removed From Operation Indicator. Flag indicating that the switch is
    removed from operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class Quantity(Identity):
    '''
    Description of quantities needed in the data exchange.
    The type of the quantity is described either by the role of the association
    or the type attribute.
    The quality attribute provides the information about the quality of the
    quantity (measured, estimated, etc.).
    '''

    quality: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The quality of the information being provided. This quality may be estimated,
            not available, as provided, etc.
            '''

        })
    '''
    The quality of the information being provided. This quality may be
    estimated, not available, as provided, etc.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The description of the type of the quantity.
            '''

        })
    '''
    The description of the type of the quantity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Point: list[Point] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Point.Quantity',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class RMRDetermination(Identity):
    '''
    Indicates whether unit is a reliablity must run unit: required to be on
    to satisfy Grid Code Reliablitiy criteria, load demand, or voltage support.
    '''

    Bid: Optional[Bid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Bid.RMRDetermination',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RUCAwardInstruction(Identity):
    '''
    This class models the information about the RUC awards.
    '''

    clearedPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Marginal Price ($/MW) for the commodity (Regulation Up, Regulation Down,
            Spinning Reserve, or Non-spinning reserve) for pricing run.
            '''

        })
    '''
    Marginal Price ($/MW) for the commodity (Regulation Up, Regulation
    Down, Spinning Reserve, or Non-spinning reserve) for pricing run.
    '''

    RUCAward: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The RUC Award of a resource is the portion of the RUC Capacity that is
            not under RA or RMR contracts. The RUC Award of a resource is the portion
            of the RUC Capacity that is eligible for RUC Availability payment.
            '''

        })
    '''
    The RUC Award of a resource is the portion of the RUC Capacity that
    is not under RA or RMR contracts. The RUC Award of a resource is the
    portion of the RUC Capacity that is eligible for RUC Availability payment.
    '''

    RUCCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The RUC Capacity of a resource is the difference between (i) the RUC Schedule
            and (ii) the higher of the DA Schedule and the Minimum Load.
            '''

        })
    '''
    The RUC Capacity of a resource is the difference between (i) the RUC
    Schedule and (ii) the higher of the DA Schedule and the Minimum Load.
    '''

    RUCSchedule: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The RUC Schedule of a resource is its output level that balances the load
            forecast used in RUC. The RUC Schedule in RUC is similar to the DA Schedule
            in DAM.
            '''

        })
    '''
    The RUC Schedule of a resource is its output level that balances the
    load forecast used in RUC. The RUC Schedule in RUC is similar to the
    DA Schedule in DAM.
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketProductType: Optional[ MarketProductType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            major product type may include the following but not limited to:
            Energy
            Regulation Up
            Regulation Dn
            Spinning Reserve
            Non-Spinning Reserve
            Operating Reserve
            '''

        })
    '''
    major product type may include the following but not limited to:
    Energy
    Regulation Up
    Regulation Dn
    Spinning Reserve
    Non-Spinning Reserve
    Operating Reserve
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.RUCAwardInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReadingQuality(Identity):
    '''
    Quality of a specific reading value or interval reading value. Note that
    more than one quality may be applicable to a given reading. Typically not
    used unless problems or unusual conditions occur (i.e., quality for each
    reading is assumed to be good unless stated otherwise in associated reading
    quality type). It can also be used with the corresponding reading quality
    type to indicate that the validation has been performed and succeeded.
    '''

    comment: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Elaboration on the quality code.
            '''

        })
    '''
    Elaboration on the quality code.
    '''

    source: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            System acting as the source of the quality code.
            '''

        })
    '''
    System acting as the source of the quality code.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time at which the quality code was assigned or ascertained.
            '''

        })
    '''
    Date and time at which the quality code was assigned or ascertained.
    '''

    Reading: Optional[BaseReading] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'BaseReading.ReadingQualities',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reading value to which this quality applies.
            '''

        })
    '''
    Reading value to which this quality applies.
    '''

    ReadingQualityType: Optional[ReadingQualityType] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ReadingQualityType.ReadingQualities',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of this reading quality.
            '''

        })
    '''
    Type of this reading quality.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class Reason(Identity):
    '''
    The motivation of an act.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The motivation of an act in coded form.
            '''

        })
    '''
    The motivation of an act in coded form.
    '''

    text: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The textual explanation corresponding to the reason code.
            '''

        })
    '''
    The textual explanation corresponding to the reason code.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RegisteredControllableLoad(Identity):
    '''
    Temporary holding for load reduction attributes removed from RegisteredLoad.
    Use for future use case when developing the RegisteredDistributedResource
    specialized classes.
    '''

    maxDeploymentTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Deployment time (seconds)
            '''

        })
    '''
    Maximum Deployment time (seconds)
    '''

    maxLoadRedTimesPerDay: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Number of Daily Load Curtailments
            '''

        })
    '''
    Maximum Number of Daily Load Curtailments
    '''

    maxReductionTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maxiimum Load Reduction Time (min), per Participating Load Resource
            '''

        })
    '''
    Maxiimum Load Reduction Time (min), per Participating Load Resource
    '''

    maxWeeklyDeployment: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum weekly deployments
            '''

        })
    '''
    Maximum weekly deployments
    '''

    minLoadReductionInterval: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shortest period load reduction shall be maintained before load can be restored
            to normal levels.
            This attribute may be used also in the LoadBid class. The reason that the
            attribute is also modeled in this class is that it is resource attribute
            and needs to be persistently stored.
            '''

        })
    '''
    Shortest period load reduction shall be maintained before load can
    be restored to normal levels.
    This attribute may be used also in the LoadBid class. The reason that
    the attribute is also modeled in this class is that it is resource
    attribute and needs to be persistently stored.
    '''

    minReductionTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum Load Reduction Time (min), per Participating Load Resource
            '''

        })
    '''
    Minimum Load Reduction Time (min), per Participating Load Resource
    '''

    minTimeBetLoadRed: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Shortest time that load shall be left at normal levels before a new load
            reduction.
            This attribute may be used also in the LoadBid class. The reason that the
            attribute is also modeled in this class is that it is resource attribute
            and needs to be persistently stored.
            '''

        })
    '''
    Shortest time that load shall be left at normal levels before a new
    load reduction.
    This attribute may be used also in the LoadBid class. The reason that
    the attribute is also modeled in this class is that it is resource
    attribute and needs to be persistently stored.
    '''

    reqNoticeTime: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time period that is required from an order to reduce a load to the time
            that it takes to get to the minimum load reduction.
            This attribute may be used also in the LoadBid class. The reason that the
            attribute is also modeled in this class is that it is resource attribute
            and needs to be persistently stored.
            '''

        })
    '''
    Time period that is required from an order to reduce a load to the
    time that it takes to get to the minimum load reduction.
    This attribute may be used also in the LoadBid class. The reason that
    the attribute is also modeled in this class is that it is resource
    attribute and needs to be persistently stored.
    '''

    maxBaseLoad: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Maximum Base Load (MW), per Participating Load Resource
            '''

        })
    '''
    Maximum Base Load (MW), per Participating Load Resource
    '''

    maxLoadReduction: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            maximum load reduction
            '''

        })
    '''
    maximum load reduction
    '''

    minLoadReduction: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum MW for a load reduction (e.g., MW rating of a discrete pump.
            This attribute may be used also in the LoadBid class. The reason that the
            attribute is also modeled in this class is that it is resource attribute
            and needs to be persistently stored.
            '''

        })
    '''
    Minimum MW for a load reduction (e.g., MW rating of a discrete pump.
    This attribute may be used also in the LoadBid class. The reason that
    the attribute is also modeled in this class is that it is resource
    attribute and needs to be persistently stored.
    '''

    minLoadReductionCost: Optional[ float | CostPerEnergyUnit ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            minimum load reduction cost. Single number for the load
            '''

        })
    '''
    minimum load reduction cost. Single number for the load
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfReferenceData'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
    '''

    IntervalSchedule: Optional[RegularIntervalSchedule] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegularIntervalSchedule.TimePoints',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Regular interval schedule containing this time point.
            '''

        })
    '''
    Regular interval schedule containing this time point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Core'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class RepairItem(Identity):
    '''
    Asset component to be repaired or problem area to be corrected.
    '''

    breakerRepairItem: Optional[ BreakerRepairItemKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Breaker component or problem area which is the focus of this maintenance
            work task (for work tasks related to breakers only).
            '''

        })
    '''
    Breaker component or problem area which is the focus of this maintenance
    work task (for work tasks related to breakers only).
    '''

    transformerRepairItem: Optional[ TransformerRepairItemKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transformer component or problem area which is the focus of this maintenance
            work task (for work tasks related to transformers only).
            '''

        })
    '''
    Transformer component or problem area which is the focus of this maintenance
    work task (for work tasks related to transformers only).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ReportingCapability(Identity):
    '''
    <font color="#0f0f0f">Definition of one set of reporting capabilities for
    this monitoring station. The associated EnvironmentalValueSets describe
    the maximum range of possible environmental values the station is capable
    of returning. This attribute is intended primarily to assist a utility
    in managing its stations. </font>
    '''

    reportingIntervalPeriod: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of units of time making up reporting period.
            '''

        })
    '''
    Number of units of time making up reporting period.
    '''

    reportingIntervalType: Optional[ CalculationIntervalUnitKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of time in which reporting period is expressed.
            '''

        })
    '''
    Unit of time in which reporting period is expressed.
    '''

    reportingMethod: Optional[ ReportingMethodKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates how the weather station reports observations.
            '''

        })
    '''
    Indicates how the weather station reports observations.
    '''

    EnvironmentalMonitoringStation: Optional[EnvironmentalMonitoringStation] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'EnvironmentalMonitoringStation.ReportingCapability',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The environmental monitoring station to which this set of reporting capabilities
            belong.
            '''

        })
    '''
    The environmental monitoring station to which this set of reporting
    capabilities belong.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Environmental'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    EnvironmentalAnalog: list[EnvironmentalAnalog] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'EnvironmentalAnalog.ReportingCapability',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            One of the environmental value sets expressing one of the reporting capabilities.
            '''

        })
    '''
    One of the environmental value sets expressing one of the reporting
    capabilities.
    '''

@dataclass(repr=False)
class ResourceAwardInstruction(Identity):
    '''
    Model of market results, instruction for resource. Contains details of
    award as attributes.
    '''

    awardMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For DA Energy: Not Applicable;
            For DA AS: DA AS market award;
            For RT Energy: Not Applicable;
            For RT AS: RT AS market award (excluding DA AS market or self-proviison
            awards)
            '''

        })
    '''
    For DA Energy: Not Applicable;
    For DA AS: DA AS market award;
    For RT Energy: Not Applicable;
    For RT AS: RT AS market award (excluding DA AS market or self-proviison
    awards)
    '''

    clearedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For DA Energy: Total Schedule = DA market schedule + DA self-schedule award;
            For DA AS: DA Ancillary Service Awards = DA AS market award + DA AS self-provision
            award;
            For RT Energy: Total Schedule = RT market schedule + RT self-schedule award;
            For RT AS: RT Ancillary Service Awards = RT AS self-provision award + RT
            AS market award + DA AS market award + DA AS self-provision award;
            '''

        })
    '''
    For DA Energy: Total Schedule = DA market schedule + DA self-schedule
    award;
    For DA AS: DA Ancillary Service Awards = DA AS market award + DA AS
    self-provision award;
    For RT Energy: Total Schedule = RT market schedule + RT self-schedule
    award;
    For RT AS: RT Ancillary Service Awards = RT AS self-provision award
    + RT AS market award + DA AS market award + DA AS self-provision award;
    '''

    clearedPrice: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Marginal Price ($/MW) for the commodity (Regulation Up, Regulation Down,
            Spinning Reserve, or Non-spinning reserve) for pricing run.
            '''

        })
    '''
    Marginal Price ($/MW) for the commodity (Regulation Up, Regulation
    Down, Spinning Reserve, or Non-spinning reserve) for pricing run.
    '''

    congestLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Congestion component of Location Marginal Price (LMP) in monetary units
            per MW.
            '''

        })
    '''
    Congestion component of Location Marginal Price (LMP) in monetary units
    per MW.
    '''

    costLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cost component of Locational Marginal Pricing (LMP) in monetary units per
            MW.
            '''

        })
    '''
    Cost component of Locational Marginal Pricing (LMP) in monetary units
    per MW.
    '''

    dispatcherAddedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The tier2 mw added by dispatcher action
            Market results of the synchronized reserve market
            '''

        })
    '''
    The tier2 mw added by dispatcher action
    Market results of the synchronized reserve market
    '''

    economicMax: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit max output for dispatch; bid in economic maximum
            '''

        })
    '''
    Unit max output for dispatch; bid in economic maximum
    '''

    economicMin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit min output for dispatch; bid in economic minimum
            '''

        })
    '''
    Unit min output for dispatch; bid in economic minimum
    '''

    effRegulationDownLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effective Regulation Down Limit (MW)
            '''

        })
    '''
    Effective Regulation Down Limit (MW)
    '''

    effRegulationUpLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Effective Regulation Up Limit
            '''

        })
    '''
    Effective Regulation Up Limit
    '''

    lmp: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Locational marginal price value
            '''

        })
    '''
    Locational marginal price value
    '''

    lossLMP: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Loss component of Location Marginal Price (LMP) in monetary units per MW.
            '''

        })
    '''
    Loss component of Location Marginal Price (LMP) in monetary units per
    MW.
    '''

    mustRunInd: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Identifes if the unit was set to must run by the market participant responsible
            for bidding in the unit
            '''

        })
    '''
    Identifes if the unit was set to must run by the market participant
    responsible for bidding in the unit
    '''

    noLoadCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit no-load cost in case of energy commodity
            '''

        })
    '''
    Unit no-load cost in case of energy commodity
    '''

    optimalBidCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Optimal Bid cost
            '''

        })
    '''
    Optimal Bid cost
    '''

    optimalBidPay: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Optimal Bid production payment based on LMP
            '''

        })
    '''
    Optimal Bid production payment based on LMP
    '''

    optimalMargin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Optimal Bid production margin
            '''

        })
    '''
    Optimal Bid production margin
    '''

    overrideTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Time the manual data entry occured.
            '''

        })
    '''
    Time the manual data entry occured.
    '''

    overrideValue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Provides the ability for the grid operator to override items, such as spin
            capacity requirements, prior to running the algorithm. This value is market
            product based (spin, non-spin, reg up, reg down, or RUC).
            '''

        })
    '''
    Provides the ability for the grid operator to override items, such
    as spin capacity requirements, prior to running the algorithm. This
    value is market product based (spin, non-spin, reg up, reg down, or
    RUC).
    '''

    selfSchedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For DA Energy: DA total self-schedule award;
            For DA AS: DA AS self-provision award;
            For RT Energy: RT total self-schedule award;
            For RT AS: RT AS self-provision award (excluding DA AS market or self-provision
            awards)
            '''

        })
    '''
    For DA Energy: DA total self-schedule award;
    For DA AS: DA AS self-provision award;
    For RT Energy: RT total self-schedule award;
    For RT AS: RT AS self-provision award (excluding DA AS market or self-provision
    awards)
    '''

    startUpCost: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit start up cost in case of energy commodity
            '''

        })
    '''
    Unit start up cost in case of energy commodity
    '''

    status: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            In or out status of resource
            '''

        })
    '''
    In or out status of resource
    '''

    totalRevenue: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total bid revenue (startup_cost + no_load_cost + bid_pay)
            '''

        })
    '''
    Total bid revenue (startup_cost + no_load_cost + bid_pay)
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    manuallyBlocked: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicates if an award was manually blocked (Y/N). Valid for Spinning and
            Non-spinning.
            '''

        })
    '''
    Indicates if an award was manually blocked (Y/N). Valid for Spinning
    and Non-spinning.
    '''

    marginalResourceIndicator: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator (Yes / No) that this resource set the price for this dispatch
            / schedule.
            '''

        })
    '''
    Indicator (Yes / No) that this resource set the price for this dispatch
    / schedule.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MarketProduct: Optional[MarketProduct] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MarketProduct.ResourceAwardInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceAwardInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SelfScheduleBreakdown: list[SelfScheduleBreakdown] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SelfScheduleBreakdown.ResourceAwardInstruction',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            default capacity
            '''

        })
    '''
    default capacity
    '''

    maximumCapacity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            maximum capacity
            '''

        })
    '''
    maximum capacity
    '''

    minimumCapacity: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            minimum capacity
            '''

        })
    '''
    minimum capacity
    '''

    capacityType: Optional[ ResourceCapacityType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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
    '''

    unitSymbol: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit selection for the capacity values.
            '''

        })
    '''
    Unit selection for the capacity values.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceCertification(Identity):
    '''
    Specifies certification for a resource to participate in a specific markets.
    '''

    certifiedNonspinDAMMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedNonspinRTMMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedRegulationMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedSpinMw: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedDAM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedNonspinDAM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedNonspinRTM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedPIRP: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedRegulation: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedReplaceAS: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedRTM: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedRUC: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    certifiedSpin: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    market: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            market type
            '''

        })
    '''
    market type
    '''

    qualificationFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Status of the qualification ('Y' = Active, 'N' = Inactive)
            '''

        })
    '''
    Status of the qualification ('Y' = Active, 'N' = Inactive)
    '''

    type: Optional[ ResourceCertificationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of service based on ResourceAncillaryServiceType enumeration
            '''

        })
    '''
    Type of service based on ResourceAncillaryServiceType enumeration
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceAncillaryServiceQualification',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            RegisteredResources are qualified for resource ancillary service types
            (which include market product types as well as other types such as BlackStart)
            by the association to the class ResourceAncillaryServiceQualification.
            '''

        })
    '''
    RegisteredResources are qualified for resource ancillary service types
    (which include market product types as well as other types such as
    BlackStart) by the association to the class ResourceAncillaryServiceQualification.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceDeploymentStatus(Identity):
    '''
    '''

    acceptComments: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Commenst to explain why the acceptance status. For example, to explain
            why a request is accepted only partially, instead of fully.
            '''

        })
    '''
    Commenst to explain why the acceptance status. For example, to explain
    why a request is accepted only partially, instead of fully.
    '''

    acceptStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Status of the resource for this deployment. Values include (full compliance,
            partial compliance, opt-out, etc.)
            '''

        })
    '''
    Status of the resource for this deployment. Values include (full compliance,
    partial compliance, opt-out, etc.)
    '''

    resourceResponseMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The MW amount the resource can contribute for this deployment. This is
            from the DR provider - as a response? Or actual? Does this belong in settlement?
            Discuss more.
            '''

        })
    '''
    The MW amount the resource can contribute for this deployment. This
    is from the DR provider - as a response? Or actual? Does this belong
    in settlement? Discuss more.
    '''

    InstructionClearing: Optional[InstructionClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'InstructionClearing.ResourceDeploymentStatus',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceDispatchResults(Identity):
    '''
    The ResourceDispatchResults class provides market results that can be provided
    to a SC. The specific data provided consists of several indicators such
    as contingency flags, blocked start up, and RMR dispatch. It also provides
    the projected overall and the regulating status of the resource.
    '''

    blockedDispatch: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Blocked Dispatch Indicator (Yes/No)
            '''

        })
    '''
    Blocked Dispatch Indicator (Yes/No)
    '''

    blockedPublishDOP: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Block sending DOP to ADS (Y/N)
            '''

        })
    '''
    Block sending DOP to ADS (Y/N)
    '''

    limitIndicator: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            indicate which limit is the constraints
            '''

        })
    '''
    indicate which limit is the constraints
    '''

    lowerLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            resource energy ramping lower limit
            '''

        })
    '''
    resource energy ramping lower limit
    '''

    maxRampRate: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            maximum ramp rate
            '''

        })
    '''
    maximum ramp rate
    '''

    operatingLimitHigh: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The upper operating limit incorporating any derate used by the RTD for
            the Binding Interval.
            '''

        })
    '''
    The upper operating limit incorporating any derate used by the RTD
    for the Binding Interval.
    '''

    operatingLimitLow: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lower operating limit incorporating any derate used by the RTD for
            the Binding Interval.
            '''

        })
    '''
    The lower operating limit incorporating any derate used by the RTD
    for the Binding Interval.
    '''

    regulatingLimitHigh: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The upper regulating limit incorporating any derate used by the RTD for
            the Binding Interval.
            '''

        })
    '''
    The upper regulating limit incorporating any derate used by the RTD
    for the Binding Interval.
    '''

    regulatingLimitLow: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The lower regulating limit incorporating any derate used by the RTD for
            the Binding Interval.
            '''

        })
    '''
    The lower regulating limit incorporating any derate used by the RTD
    for the Binding Interval.
    '''

    resourceStatus: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit Commitment Status (On/Off/Starting)
            '''

        })
    '''
    Unit Commitment Status (On/Off/Starting)
    '''

    totalSchedule: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Resource total upward schedule. total schedule = En + all AS per resource
            per interval
            '''

        })
    '''
    Resource total upward schedule. total schedule = En + all AS per resource
    per interval
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    upperLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            resource energy ramping upper limit
            '''

        })
    '''
    resource energy ramping upper limit
    '''

    contingencyFlag: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Contingent Operating Reserve Indicator (Yes/No). Resource participating
            with AS capacity in contingency dispatch.
            '''

        })
    '''
    Contingent Operating Reserve Indicator (Yes/No). Resource participating
    with AS capacity in contingency dispatch.
    '''

    penaltyDispatchIndicator: Optional[ YesNo ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Penalty Dispatch Indicator (Yes / No) indicating an un-economic adjustment.
            '''

        })
    '''
    Penalty Dispatch Indicator (Yes / No) indicating an un-economic adjustment.
    '''

    updateType: Optional[ MQSCHGType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceDispatchResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceClearing: Optional[ResourceClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceClearing.ResourceDispatchResults',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceLoadFollowingInst(Identity):
    '''
    Model of market clearing results for resources that bid to follow load.
    '''

    calcLoadFollowingMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            weighted average for RTPD and RTCD and same for RTID
            '''

        })
    '''
    weighted average for RTPD and RTCD and same for RTID
    '''

    dispWindowHighLimt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    dispWindowLowLimt: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    instructionID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unique instruction id per instruction, assigned by the SC and provided
            to ADS. ADS passes through.
            '''

        })
    '''
    Unique instruction id per instruction, assigned by the SC and provided
    to ADS. ADS passes through.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The start of the time interval for which requirement is defined.
            '''

        })
    '''
    The start of the time interval for which requirement is defined.
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceLoadFollowingInst',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceClearing: Optional[ResourceClearing] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceClearing.ResourceLoadFollowingInst',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ResourceStartupCost(Identity):
    '''
    To model the startup costs of a generation resource.
    '''

    fuelColdStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable Cold Start Up Fuel (MMBtu per start)
            '''

        })
    '''
    Verifiable Cold Start Up Fuel (MMBtu per start)
    '''

    fuelHotStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable Hot Start Up Fuel (MMBtu per start)
            '''

        })
    '''
    Verifiable Hot Start Up Fuel (MMBtu per start)
    '''

    fuelIntermediateStartup: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Verifiable Intermediate Start Up Fuel (MMBtu per start)
            '''

        })
    '''
    Verifiable Intermediate Start Up Fuel (MMBtu per start)
    '''

    fuelLowSustainedLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Minimum-Energy fuel, MMBtu/MWh
            '''

        })
    '''
    Minimum-Energy fuel, MMBtu/MWh
    '''

    gasPercentColdStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Index Price (gas) for cold startup
            '''

        })
    '''
    Percentage of Fuel Index Price (gas) for cold startup
    '''

    gasPercentHotStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Index Price (gas) for hot startup
            '''

        })
    '''
    Percentage of Fuel Index Price (gas) for hot startup
    '''

    gasPercentIntermediateStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Index Price (gas) for intermediate startup
            '''

        })
    '''
    Percentage of Fuel Index Price (gas) for intermediate startup
    '''

    gasPercentLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of FIP (gas) for operating at LSL
            '''

        })
    '''
    Percentage of FIP (gas) for operating at LSL
    '''

    oilPercentColdStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Oil Price (FOP) for cold startup
            '''

        })
    '''
    Percentage of Fuel Oil Price (FOP) for cold startup
    '''

    oilPercentHotStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Oil Price (FOP) for hot startup
            '''

        })
    '''
    Percentage of Fuel Oil Price (FOP) for hot startup
    '''

    oilPercentIntermediateStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Fuel Oil Price (FOP) for intermediate startup
            '''

        })
    '''
    Percentage of Fuel Oil Price (FOP) for intermediate startup
    '''

    oilPercentLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of FOP (oil) for operating at LSL
            '''

        })
    '''
    Percentage of FOP (oil) for operating at LSL
    '''

    solidfuelPercentColdStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Solid Fuel for cold startup
            '''

        })
    '''
    Percentage of Solid Fuel for cold startup
    '''

    solidfuelPercentHotStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Solid Fuel for hot startup
            '''

        })
    '''
    Percentage of Solid Fuel for hot startup
    '''

    solidfuelPercentIntermediateStartup: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Solid Fuel for intermedite startup
            '''

        })
    '''
    Percentage of Solid Fuel for intermedite startup
    '''

    solidfuelPercentLowSustainedLimit: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Percentage of Solid Fuel for operating at LSL
            '''

        })
    '''
    Percentage of Solid Fuel for operating at LSL
    '''

    ResourceVerifiableCosts: Optional[ResourceVerifiableCosts] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ResourceVerifiableCosts.ResourceStartupCost',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ResourceVerifiableCosts(Identity):
    '''
    This class is defined to describe the verifiable costs associated with
    a generation resource.
    '''

    MktHeatRateCurve: Optional[MktHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktHeatRateCurve.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceOperationMaintenanceCost: Optional[ResourceOperationMaintenanceCost] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ResourceOperationMaintenanceCost.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MktHeatRateCurve: Optional[MktHeatRateCurve] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktHeatRateCurve.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceOperationMaintenanceCost: Optional[ResourceOperationMaintenanceCost] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ResourceOperationMaintenanceCost.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    ResourceStartupCost: list[ResourceStartupCost] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'ResourceStartupCost.ResourceVerifiableCosts',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class RevisionHistory(Identity):
    '''
    History of changes made to a switching plan step after the switching plan
    has been approved.
    '''

    revisionAuthor: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Person who made the change
            '''

        })
    '''
    Person who made the change
    '''

    revisionDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time of the change
            '''

        })
    '''
    Date and time of the change
    '''

    revisionReason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for making the change
            '''

        })
    '''
    Reason for making the change
    '''

    kind: Optional[ RevisionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of change, either void or added.
            '''

        })
    '''
    Kind of change, either void or added.
    '''

    SwitchingStep: Optional[SwitchingStep] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingStep.RevisionHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SwitchingStep: Optional[SwitchingStep] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingStep.RevisionHistory',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class SCADAInformation(Identity):
    '''
    Contains information about the update from SCADA.
    '''

    timeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            time of the update from SCADA
            '''

        })
    '''
    time of the update from SCADA
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ScheduledEventData(Identity):
    '''
    Schedule parameters for an activity that is to occur, is occurring, or
    has completed.
    '''

    InspectionDataSet: Optional[InspectionDataSet] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'InspectionDataSet.AccordingToSchedules',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            All scheduled events with this specification.
            '''

        })
    '''
    All scheduled events with this specification.
    '''

@dataclass(repr=False)
class SchedulingCoordinatorUser(Identity):
    '''
    Describing users of a Scheduling Coordinator.
    '''

    loginID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Login ID
            '''

        })
    '''
    Login ID
    '''

    loginRole: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Assigned roles (these are roles with either Read or Read/Write privileges
            on different Market Systems)
            '''

        })
    '''
    Assigned roles (these are roles with either Read or Read/Write privileges
    on different Market Systems)
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SelfScheduleBreakdown(Identity):
    '''
    Model of Self Schedules Results. Includes self schedule MW,and type of
    self schedule for each self schedule type included in total self schedule
    MW value found in ResourceAwardInstruction.
    '''

    selfSchedMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Cleared value for the specific self schedule type listed.
            '''

        })
    '''
    Cleared value for the specific self schedule type listed.
    '''

    selfSchedType: Optional[ SelfScheduleBreakdownType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Self schedule breakdown type.
            '''

        })
    '''
    Self schedule breakdown type.
    '''

    ResourceAwardInstruction: Optional[ResourceAwardInstruction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ResourceAwardInstruction.SelfScheduleBreakdown',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketResults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ShuntCompensatorDynamicData(Identity):
    '''
    Optimal Power Flow or State Estimator Filter Bank Data for OTS. This is
    used for RealTime, Study and Maintenance Users.
    '''

    connectionStatus: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The current status for the Voltage Control Capacitor 1= Connected 0 = Disconnected
            '''

        })
    '''
    The current status for the Voltage Control Capacitor 1= Connected 0
    = Disconnected
    '''

    desiredVoltage: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The desired voltage for the Voltage Control Capacitor
            '''

        })
    '''
    The desired voltage for the Voltage Control Capacitor
    '''

    mVARInjection: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The injection of reactive power of the filter bank in the NA solution or
            VCS reactive power production
            '''

        })
    '''
    The injection of reactive power of the filter bank in the NA solution
    or VCS reactive power production
    '''

    stepPosition: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage control capacitor step position
            '''

        })
    '''
    Voltage control capacitor step position
    '''

    voltageRegulationStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator if the voltage control this is regulating True = Yes, False =
            No
            '''

        })
    '''
    Indicator if the voltage control this is regulating True = Yes, False
    = No
    '''

    MktShuntCompensator: Optional[MktShuntCompensator] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktShuntCompensator.ShuntCompensatorDynamicData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class StateVariable(Identity):
    '''
    An abstract class for state variables.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    pInjection: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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).
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.SvInjection',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    q: Optional[ float | ReactivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    Terminal: Optional[Terminal] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Terminal.SvPowerFlow',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ShuntCompensator.SvShuntCompensatorSections',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'ConductingEquipment.SvStatus',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Switch.SvSwitch',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switch associated with the switch state.
            '''

        })
    '''
    The switch associated with the switch state.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'TapChanger.SvTapStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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.
    '''

    phase: Optional[ SinglePhaseKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    v: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
    '''

    TopologicalNode: Optional[TopologicalNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TopologicalNode.SvVoltage',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StateVariables'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SubstitutionResourceList(Identity):
    '''
    List of resources that can be substituted for within the bounds of a Contract
    definition. This class has a precedence and a resource.
    '''

    precedence: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            An indicator of the order a resource should be substituted. The lower the
            number the higher the precedence.
            '''

        })
    '''
    An indicator of the order a resource should be substituted. The lower
    the number the higher the precedence.
    '''

    RegisteredResource: Optional[RegisteredResource] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RegisteredResource.SubstitutionResourceList',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ContractRight.SubstitutionResourceList',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ReferenceData'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchStatus(Identity):
    '''
    Optimal Power Flow or State Estimator Circuit Breaker Status.
    '''

    switchStatus: Optional[ SwitchStatusType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Circuit Breaker Status (closed or open) of the circuit breaker from the
            power flow.
            '''

        })
    '''
    Circuit Breaker Status (closed or open) of the circuit breaker from
    the power flow.
    '''

    MktSwitch: Optional[MktSwitch] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktSwitch.SwitchStatus',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class SwitchingStep(Identity):
    '''
    Atomic switching step; can be part of a switching step group, or part of
    a switching plan.
    '''

    isFreeSequence: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            For a step, if isFreeSequence is set to false or is not specified, all
            of the steps in the group must be executed in the order defined by the
            sequenceNumber attribute. The sequenceNumber for a step has a different
            meaning when there are two or more sequential steps that have the isFreeSequence
            attribute set to true. Execution must still be performed in sequenceNumber
            order until a set of two or more steps that have isFreeSequence set to
            true is encountered. In this case, these steps can be executed in any sequence,
            until a step is encountered that has isFreeSequence set to false. All of
            the steps preceding this step must be executed before the step can be executed.
            '''

        })
    '''
    For a step, if isFreeSequence is set to false or is not specified,
    all of the steps in the group must be executed in the order defined
    by the sequenceNumber attribute. The sequenceNumber for a step has
    a different meaning when there are two or more sequential steps that
    have the isFreeSequence attribute set to true. Execution must still
    be performed in sequenceNumber order until a set of two or more steps
    that have isFreeSequence set to true is encountered. In this case,
    these steps can be executed in any sequence, until a step is encountered
    that has isFreeSequence set to false. All of the steps preceding this
    step must be executed before the step can be executed.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Order of this activity in the sequence of activities within the switching
            plan.
            '''

        })
    '''
    Order of this activity in the sequence of activities within the switching
    plan.
    '''

    subStepSequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Supports compound switching steps that are made up of several sub steps.
            '''

        })
    '''
    Supports compound switching steps that are made up of several sub steps.
    '''

    RevisionHistory: Optional[RevisionHistory] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'RevisionHistory.SwitchingStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.SwitchingStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching action that is associated to the switching step.
            '''

        })
    '''
    The switching action that is associated to the switching step.
    '''

    SwitchingStepGroup: Optional[SwitchingStepGroup] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingStepGroup.SwitchingStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The switching step group that contains the switching steps.
            '''

        })
    '''
    The switching step group that contains the switching steps.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    RevisionHistory: Optional[RevisionHistory] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'RevisionHistory.SwitchingStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    SwitchingAction: Optional[SwitchingAction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingAction.SwitchingStep',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching action that is associated to the switching step.
            '''

        })
    '''
    The switching action that is associated to the switching step.
    '''

@dataclass(repr=False)
class SwitchingStepGroup(Identity):
    '''
    A logical step, grouping atomic switching steps that are important to distinguish
    when they may change topology (e.g. placing a jumper between two cuts).
    '''

    description: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Descriptive information concerning the switching step group.
            '''

        })
    '''
    Descriptive information concerning the switching step group.
    '''

    isFreeSequence: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            If true, the sequence number serves for presentation purposes only, and
            the activity itself may be executed at any time.
            '''

        })
    '''
    If true, the sequence number serves for presentation purposes only,
    and the activity itself may be executed at any time.
    '''

    purpose: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Describes the overall purpose of the steps in this switching step group.
            '''

        })
    '''
    Describes the overall purpose of the steps in this switching step group.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Order of this activity in the sequence of activities within the switching
            plan.
            '''

        })
    '''
    Order of this activity in the sequence of activities within the switching
    plan.
    '''

    SwitchingPlan: Optional[SwitchingPlan] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'SwitchingPlan.SwitchingStepGroups',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Switching plan to which this group belongs.
            '''

        })
    '''
    Switching plan to which this group belongs.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    SwitchingStep: list[SwitchingStep] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'SwitchingStep.SwitchingStepGroup',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            The switching steps that are part of the switching step group.
            '''

        })
    '''
    The switching steps that are part of the switching step group.
    '''

@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.
    '''

    factor: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Used to calculate load "participation" of a connectivity node in an host
            control area
            '''

        })
    '''
    Used to calculate load "participation" of a connectivity node in an
    host control area
    '''

    HostControlArea: Optional[HostControlArea] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'HostControlArea.SysLoadDistribuFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktConnectivityNode: Optional[MktConnectivityNode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktConnectivityNode.SysLoadDistribuFactor',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TREntitlement(Identity):
    '''
    A Transmission Right(TR) can be a chain of TR's or on individual.
    When a transmission right is not a chain, this is formally the ETC/TOR
    Entitlement for each ETC/TOR contract with the inclusion of CVR(Converted
    Rights) as an ETC. This is the sum of all entitlements on all related transmission
    interfaces for the same TR.
    When TR is a chain, its entitlement is the minimum of all entitlements
    for the individual TRs in the chain.
    '''

    entitlement: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The entitlement
            '''

        })
    '''
    The entitlement
    '''

    startOperatingDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating date and hour when the entitlement applies
            '''

        })
    '''
    Operating date and hour when the entitlement applies
    '''

    TransmissionContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ContractRight.TREntitlement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TapChangerDynamicData(Identity):
    '''
    Optimal Power Flow or State Estimator Phase Shifter Data. This is used
    for RealTime, Study and Maintenance Users. SE Solution Phase Shifter Measurements
    from the last run of SE.
    '''

    angleRegulationStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True means the phase shifter is regulating.
            '''

        })
    '''
    True means the phase shifter is regulating.
    '''

    desiredMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase Shifter Desired MW. The active power regulation setpoint of the phase
            shifter
            '''

        })
    '''
    Phase Shifter Desired MW. The active power regulation setpoint of the
    phase shifter
    '''

    desiredVoltage: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The desired voltage for the LTC
            '''

        })
    '''
    The desired voltage for the LTC
    '''

    maximumAngle: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The maximum phase angle shift of the phase shifter
            '''

        })
    '''
    The maximum phase angle shift of the phase shifter
    '''

    minimumAngle: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The minimum phase angle shift of the phase shifter
            '''

        })
    '''
    The minimum phase angle shift of the phase shifter
    '''

    solvedAngle: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase Shifter Angle. The solved phase angle shift of the phase shifter
            '''

        })
    '''
    Phase Shifter Angle. The solved phase angle shift of the phase shifter
    '''

    tapPosition: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Tap position of the phase shifter, high-side tap position of the transformer,
            or low-side tap position of the transformer
            '''

        })
    '''
    Tap position of the phase shifter, high-side tap position of the transformer,
    or low-side tap position of the transformer
    '''

    voltageRegulationStatus: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Indicator if the LTC transformer is regulating True = Yes, False = No
            '''

        })
    '''
    Indicator if the LTC transformer is regulating True = Yes, False =
    No
    '''

    MktTapChanger: Optional[MktTapChanger] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'MktTapChanger.TapChangerDynamicData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @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.
    '''

    ratio: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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.
            '''

        })
    '''
    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.
    '''

    r: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
            '''

        })
    '''
    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.
    '''

    x: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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.
            '''

        })
    '''
    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.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#',
        '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': '1',
        'maxOccurs': '1',
        'inverse': 'PhaseTapChangerTable.PhaseTapChangerTablePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The table of this point.
            '''

        })
    '''
    The table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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': '1',
        'maxOccurs': '1',
        'inverse': 'RatioTapChangerTable.RatioTapChangerTablePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Table of this point.
            '''

        })
    '''
    Table of this point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TemperatureDependentLimitPoint(Identity):
    '''
    A point on a table of limit verses temperature.
    '''

    limitPercent: Optional[ float | PerCent ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The scaling of the operational limit in percent.
            '''

        })
    '''
    The scaling of the operational limit in percent.
    '''

    temperature: Optional[ float | Temperature ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The temperature of the table point.
            '''

        })
    '''
    The temperature of the table point.
    '''

    TemperatureDependentLimitTable: Optional[TemperatureDependentLimitTable] = field(
        default=None,
        metadata={
        'type': 'OfAggregate informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TemperatureDependentLimitTable.TemperatureLimitTablePoint',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfOperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class TenMinAuxiliaryData(Identity):
    '''
    Models 10-Minutes Auxiliary Data.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    AuxillaryData: list[AuxiliaryValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AuxiliaryValues.TenMinAuxillaryData',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TimeTariffInterval(Identity):
    '''
    One of a sequence of time intervals defined in terms of real time. It is
    typically used in association with TariffProfile to define the intervals
    in a time of use tariff structure, where startDateTime simultaneously determines
    the starting point of this interval and the ending point of the previous
    interval.
    '''

    sequenceNumber: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A sequential reference that defines the identity of this interval and its
            relative position with respect to other intervals in a sequence of intervals.
            '''

        })
    '''
    A sequential reference that defines the identity of this interval and
    its relative position with respect to other intervals in a sequence
    of intervals.
    '''

    startTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            A real time marker that defines the starting time (typically it is the
            time of day) for this interval. The interval extends to the start of the
            next interval or until it is reset to the start of the first interval by
            TariffProfile.tariffCycle.
            '''

        })
    '''
    A real time marker that defines the starting time (typically it is
    the time of day) for this interval. The interval extends to the start
    of the next interval or until it is reset to the start of the first
    interval by TariffProfile.tariffCycle.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TradeProduct(Identity):
    '''
    <b>TradeType</b> <b>TradeProduct</b>
    IST (InterSC Trade) PHY (Physical Energy Trade)
    IST APN (Energy Trades at Aggregated Pricing Nodes)
    IST CPT (Converted Physical Energy Trade)
    AST (Ancilliary Services Trade) RUT (Regulation Up Trade)
    AST RDT (Regulation Down Trade)
    AST SRT (Spinning Reserve Trade)
    AST NRT (Non-Spinning Reserve Trade)
    UCT (Unit Commitment Trade) null
    '''

    tradeProductType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            PHY (Physical Energy Trade);
            APN (Energy Trades at Aggregated Pricing Nodes);
            CPT (Converted Physical Energy Trade);
            RUT (Regulation Up Trade);
            RDT (Regulation Down Trade);
            SRT (Spinning Reserve Trade);
            NRT (Non-Spinning Reserve Trade)
            '''

        })
    '''
    PHY (Physical Energy Trade);
    APN (Energy Trades at Aggregated Pricing Nodes);
    CPT (Converted Physical Energy Trade);
    RUT (Regulation Up Trade);
    RDT (Regulation Down Trade);
    SRT (Spinning Reserve Trade);
    NRT (Non-Spinning Reserve Trade)
    '''

    tradeType: Optional[ TradeType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            IST - InterSC Trade;
            AST - Ancilliary Services Trade;
            UCT - Unit Commitment Trade
            '''

        })
    '''
    IST - InterSC Trade;
    AST - Ancilliary Services Trade;
    UCT - Unit Commitment Trade
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ParticipantInterfaces'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Trade: list[Trade] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'Trade.TradeProduct',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@stereotype(CIMStereotype.OfAggregate)
@dataclass(repr=False)
class TradingHubPrice(Identity):
    '''
    Models prices at Trading Hubs, interval based.
    '''

    intervalStartTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateTimeStamp: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    updateUser: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    marketType: Optional[ MarketType ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    TradingHubValues: list[TradingHubValues] = field(
        default_factory=list,
        metadata={
        'type': 'AggregateOf',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'TradingHubValues.TradingHubPrice',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TradingHubValues(Identity):
    '''
    Models prices at Trading Hubs.
    '''

    price: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Utilizes the Market type. For DA, the price is hourly. For RTM the price
            is a 5 minute price.
            '''

        })
    '''
    Utilizes the Market type. For DA, the price is hourly. For RTM the
    price is a 5 minute price.
    '''

    AggregatedPnode: Optional[AggregatedPnode] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'AggregatedPnode.TradingHubValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TradingHubPrice: Optional[TradingHubPrice] = field(
        default=None,
        metadata={
        'type': 'OfAggregate',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TradingHubPrice.TradingHubValues',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketQualitySystem'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransferInterfaceSolution(Identity):
    '''
    TNA Interface Definitions from OPF for VSA.
    '''

    interfaceMargin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The margin for the interface
            '''

        })
    '''
    The margin for the interface
    '''

    postTransferMW: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Post Transfer MW for step
            '''

        })
    '''
    Post Transfer MW for step
    '''

    transferLimit: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transfer Interface + Limit
            Attribute Usage: The absoloute of the maximum flow on the transfer interface.
            This is a positive MW value.
            '''

        })
    '''
    Transfer Interface + Limit
    Attribute Usage: The absoloute of the maximum flow on the transfer
    interface. This is a positive MW value.
    '''

    MktContingencyA: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktContingency.TransferInterfaceSolutionA',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktContingencyB: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktContingency.TransferInterfaceSolutionB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterface: Optional[TransferInterface] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransferInterface.TransferInterfaceSolution',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    MktContingencyA: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktContingency.TransferInterfaceSolutionA',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    MktContingencyB: Optional[MktContingency] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'MktContingency.TransferInterfaceSolutionB',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransferInterface: Optional[TransferInterface] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransferInterface.TransferInterfaceSolution',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TransmissionCapacity(Identity):
    '''
    This class models the transmission (either a transmission interface or
    a POR/POD pair) capacity including Total Transfer Capacity (TTC), Operating
    Transfer Capacity (OTC), and Capacity Benefit Margin (CBM).
    '''

    capacityBenefitMargin: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Capacity Benefit Margin (CBM) is used by Markets to calculate the transmission
            interface limits. This number could be manually or procedurally determined.
            The CBM is defined per transmission interface (branch group).
            '''

        })
    '''
    Capacity Benefit Margin (CBM) is used by Markets to calculate the transmission
    interface limits. This number could be manually or procedurally determined.
    The CBM is defined per transmission interface (branch group).
    '''

    operationalTransmissionCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Operational Transmission Capacity (OTC) is the transmission capacity
            under the operating condition during a specific time period, incorporating
            the effects of derates and current settings of operation controls. The
            OTCs for all transmission interface (branch group) are always provided
            regardless of outage or switching conditions.
            '''

        })
    '''
    The Operational Transmission Capacity (OTC) is the transmission capacity
    under the operating condition during a specific time period, incorporating
    the effects of derates and current settings of operation controls.
    The OTCs for all transmission interface (branch group) are always provided
    regardless of outage or switching conditions.
    '''

    OTC15min_emergency: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Operational Transmission Capacity (OTC) 15 minute Emergency Limit
            '''

        })
    '''
    The Operational Transmission Capacity (OTC) 15 minute Emergency Limit
    '''

    OTCemergency: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The Operational Transmission Capacity (OTC) Emergency Limit.
            '''

        })
    '''
    The Operational Transmission Capacity (OTC) Emergency Limit.
    '''

    POD: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            point of delivery
            '''

        })
    '''
    point of delivery
    '''

    POR: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            point of receipt
            '''

        })
    '''
    point of receipt
    '''

    startOperatingDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating date &amp; hour when the entitlement applies
            '''

        })
    '''
    Operating date &amp; hour when the entitlement applies
    '''

    totalTransmissionCapacity: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Total Transmission Capacity
            '''

        })
    '''
    Total Transmission Capacity
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.TransmissionCapacity',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    GenericConstraints: Optional[GenericConstraints] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'GenericConstraints.TransmissionCapacity',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransmissionInterfaceRightEntitlement(Identity):
    '''
    This is formally called the branch group ETC/TOR entitlement with the inclusion
    of CVR as ETC. This could be also used to represent the TR entitlement
    on a POR/POD.
    '''

    entitlement: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the entitlement
            '''

        })
    '''
    the entitlement
    '''

    POD: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            point of delivery
            '''

        })
    '''
    point of delivery
    '''

    POR: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            point of receipt
            '''

        })
    '''
    point of receipt
    '''

    startOperatingDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operating date and hour when the entitlement applies
            '''

        })
    '''
    Operating date and hour when the entitlement applies
    '''

    ContractRight: Optional[ContractRight] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'ContractRight.TransmissionInterfaceEntitlement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Flowgate: Optional[Flowgate] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Flowgate.TranmissionRightEntitlement',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class TransmissionReservation(Identity):
    '''
    A transmission reservation is obtained from the OASIS system to reserve
    transmission for a specified time period, transmission path and transmission
    product.
    '''

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.TransmissionReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Sink: Optional[ServicePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServicePoint.SinkReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Source: Optional[ServicePoint] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'ServicePoint.SourceReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransactionBid: Optional[TransactionBid] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransactionBid.TransmissionReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransmissionPath: Optional[TransmissionPath] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'TransmissionPath.TransmissionReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExternalInputs'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    EnergyTransaction: Optional[EnergyTransaction] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'EnergyTransaction.TransmissionReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    TransactionBid: Optional[TransactionBid] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TransactionBid.TransmissionReservation',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class TroubleSymptoms(Identity):
    '''
    Trouble symptoms reported by person reporting the trouble. The symptoms
    provide clues to utility personnel analyzing the ticket to help identify
    the root cause of the problem.
    '''

    troubleSymptomsExtentOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The extent of the problem being reported that does not fit any of the enumeration
            values.
            '''

        })
    '''
    The extent of the problem being reported that does not fit any of the
    enumeration values.
    '''

    troubleSymptomsLightOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with lights being reported that does not fit any of the enumeration
            values
            '''

        })
    '''
    The problem with lights being reported that does not fit any of the
    enumeration values
    '''

    troubleSymptomsPoleOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with pole being reported that does not fit any of the enumeration
            values
            '''

        })
    '''
    The problem with pole being reported that does not fit any of the enumeration
    values
    '''

    troubleSymptomsTransformerOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with transformer being reported that does not fit any of the
            enumeration values
            '''

        })
    '''
    The problem with transformer being reported that does not fit any of
    the enumeration values
    '''

    troubleSymptomsTreeOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with tree being reported that does not fit any of the enumeration
            values
            '''

        })
    '''
    The problem with tree being reported that does not fit any of the enumeration
    values
    '''

    troubleSymptomsWireOther: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with wire being reported that does not fit any of the enumeration
            values
            '''

        })
    '''
    The problem with wire being reported that does not fit any of the enumeration
    values
    '''

    troubleSymptomsExtent: Optional[ TroubleSymptomsExtentKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The extent of the problem being reported.
            '''

        })
    '''
    The extent of the problem being reported.
    '''

    troubleSymptomsLight: Optional[ TroubleSymptomsLightKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with lights being reported.
            '''

        })
    '''
    The problem with lights being reported.
    '''

    troubleSymptomsPole: Optional[ TroubleSymptomsPoleKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with pole being reported.
            '''

        })
    '''
    The problem with pole being reported.
    '''

    troubleSymptomsTransformer: Optional[ TroubleSymptomsTransformerKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with transformer being reported.
            '''

        })
    '''
    The problem with transformer being reported.
    '''

    troubleSymptomsTree: Optional[ TroubleSymptomsTree_Kind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with tree being reported.
            '''

        })
    '''
    The problem with tree being reported.
    '''

    troubleSymptomsWire: Optional[ TroubleSymptomsWireKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The problem with wire being reported.
            '''

        })
    '''
    The problem with wire being reported.
    '''

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.TroubleSymptoms',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    TroubleTicket: Optional[TroubleTicket] = field(
        default=None,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'TroubleTicket.TroubleSymptoms',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@stereotype(CIMStereotype.informative)
@dataclass(repr=False)
class Umode(Identity):
    '''
    '''

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'Delay.Umode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Umode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'VSC'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

    Delay: Optional[Delay] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Delay.Umode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    VSCtype1: Optional[VSCtype1] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'VSCtype1.Umode',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

@dataclass(repr=False)
class Unit(Identity):
    '''
    The identification of the unit name for the time series quantities.
    '''

    name: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The coded representation of the unit.
            '''

        })
    '''
    The coded representation of the unit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketManagement'
    @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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    RatingSpecification: Optional[Specification] = field(
        default=None,
        metadata={
        'type': 'informative',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Specification.Ratings',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    Transaction: Optional[Transaction] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'inverse': 'Transaction.UserAttributes',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Transaction for which this snapshot has been recorded.
            '''

        })
    '''
    Transaction for which this snapshot has been recorded.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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.
    '''

    AttributeProperty: list[AttributeProperty] = field(
        default_factory=list,
        metadata={
        'type': 'Association',
        'minOccurs': '0',
        'maxOccurs': 'unbounded',
        'inverse': 'AttributeProperty.MktUserAttribute',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': False,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class VDCOL(Identity):
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'CSC'
    @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',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Phase information.
            '''

        })
    '''
    Phase information.
    '''

    WireAssemblyInfo: Optional[WireAssemblyInfo] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '1',
        'maxOccurs': '1',
        'inverse': 'WireAssemblyInfo.WirePhaseInfo',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Wire position with this wire phase information.
            '''

        })
    '''
    Wire position with this wire phase information.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ADSInstructionTypeCommitment(Enum):
    '''
    '''

    SHUT_DOWN = 'SHUT_DOWN'
    '''
    '''

    START_UP = 'START_UP'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ADSInstructionTypeOOS(Enum):
    '''
    MIN_CONSTRAINT
    MAX_CONSTRAINT
    FIXED_CONSTRAINT
    '''

    FIXED_CONSTRAINT = 'FIXED_CONSTRAINT'
    '''
    '''

    MAX_CONSTRAINT = 'MAX_CONSTRAINT'
    '''
    '''

    MIN_CONSTRAINT = 'MIN_CONSTRAINT'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ASTMStandardEditionKind(Enum):
    '''
    List of editions of ASTM standards.
    '''

    _002005 = '_002005'
    '''
    00(2005) standard edition.
    '''

    _002005e1 = '_002005e1'
    '''
    00(2005)e1 standard edition.
    '''

    _002010 = '_002010'
    '''
    00(2010) standard edition.
    '''

    _01 = '_01'
    '''
    01 standard edition.
    '''

    _01a2007 = '_01a2007'
    '''
    01a(2007) standard edition.
    '''

    _01e1 = '_01e1'
    '''
    01e1 standard edition.
    '''

    _02 = '_02'
    '''
    02 standard edition.
    '''

    _022007 = '_022007'
    '''
    02(2007) standard edition.
    '''

    _022008 = '_022008'
    '''
    02(2008) standard edition.
    '''

    _022009 = '_022009'
    '''
    02(2009) standard edition.
    '''

    _022012 = '_022012'
    '''
    02(2012) standard edition.
    '''

    _022014 = '_022014'
    '''
    02(2014) standard edition.
    '''

    _02a = '_02a'
    '''
    02a standard edition.
    '''

    _02b = '_02b'
    '''
    02b standard edition.
    '''

    _02e1 = '_02e1'
    '''
    02e1 standard edition.
    '''

    _03 = '_03'
    '''
    03 standard edition.
    '''

    _032008 = '_032008'
    '''
    03(2008) standard edition.
    '''

    _032014 = '_032014'
    '''
    03(2014) standard edition.
    '''

    _03a = '_03a'
    '''
    03a standard edition.
    '''

    _04 = '_04'
    '''
    04 standard edition.
    '''

    _04a = '_04a'
    '''
    04a standard edition.
    '''

    _04ae1 = '_04ae1'
    '''
    04ae1 standard edition.
    '''

    _04e1 = '_04e1'
    '''
    04e1 standard edition.
    '''

    _04e2 = '_04e2'
    '''
    04e2 standard edition.
    '''

    _05 = '_05'
    '''
    05 standard edition.
    '''

    _052010 = '_052010'
    '''
    05(2010) standard edition.
    '''

    _05a = '_05a'
    '''
    05a standard edition.
    '''

    _05a2010 = '_05a2010'
    '''
    05a(2010) standard edition.
    '''

    _06 = '_06'
    '''
    06 standard edition.
    '''

    _07 = '_07'
    '''
    07 standard edition.
    '''

    _072013 = '_072013'
    '''
    07(2013) standard edition.
    '''

    _08 = '_08'
    '''
    08 standard edition.
    '''

    _08e1 = '_08e1'
    '''
    08e1 standard edition.
    '''

    _09 = '_09'
    '''
    09 standard edition.
    '''

    _092013 = '_092013'
    '''
    09(2013) standard edition.
    '''

    _10 = '_10'
    '''
    10 standard edition.
    '''

    _10a = '_10a'
    '''
    10a standard edition.
    '''

    _11 = '_11'
    '''
    11 standard edition.
    '''

    _11a = '_11a'
    '''
    11a standard edition.
    '''

    _12 = '_12'
    '''
    12 standard edition.
    '''

    _12a = '_12a'
    '''
    12a standard edition.
    '''

    _12b = '_12b'
    '''
    12b standard edition.
    '''

    _13 = '_13'
    '''
    13 standard edition.
    '''

    _13e1 = '_13e1'
    '''
    13e1 standard edition.
    '''

    _14 = '_14'
    '''
    14 standard edition.
    '''

    _14a = '_14a'
    '''
    14a standard edition.
    '''

    _14e1 = '_14e1'
    '''
    14e1 standard edition.
    '''

    _14e2 = '_14e2'
    '''
    14e2 standard edition.
    '''

    _15 = '_15'
    '''
    15 standard edition.
    '''

    _15a = '_15a'
    '''
    15a standard edition.
    '''

    _65 = '_65'
    '''
    65 standard edition.
    '''

    _71 = '_71'
    '''
    71 standard edition.
    '''

    _74 = '_74'
    '''
    74 standard edition.
    '''

    _80e1 = '_80e1'
    '''
    80e1 standard edition.
    '''

    _82 = '_82'
    '''
    82 standard edition.
    '''

    _831996e1 = '_831996e1'
    '''
    83(1996)e1 standard edition.
    '''

    _85 = '_85'
    '''
    85 standard edition.
    '''

    _851990e1 = '_851990e1'
    '''
    85(1990)e1 standard edition.
    '''

    _871995 = '_871995'
    '''
    87(1995) standard edition.
    '''

    _87e1 = '_87e1'
    '''
    87e1 standard edition.
    '''

    _88 = '_88'
    '''
    88 standard edition.
    '''

    _90e1 = '_90e1'
    '''
    90e1 standard edition.
    '''

    _91 = '_91'
    '''
    91 standard edition.
    '''

    _92 = '_92'
    '''
    92 standard edition.
    '''

    _94 = '_94'
    '''
    94 standard edition.
    '''

    _941999 = '_941999'
    '''
    94(1999) standard edition.
    '''

    _942004 = '_942004'
    '''
    94(2004) standard edition.
    '''

    _942010 = '_942010'
    '''
    94(2010) standard edition.
    '''

    _94e1 = '_94e1'
    '''
    94e1 standard edition.
    '''

    _95 = '_95'
    '''
    95 standard edition.
    '''

    _952000e1 = '_952000e1'
    '''
    95(2000)e1 standard edition.
    '''

    _96 = '_96'
    '''
    96 standard edition.
    '''

    _962002e1 = '_962002e1'
    '''
    96(2002)e1 standard edition.
    '''

    _96a = '_96a'
    '''
    96a standard edition.
    '''

    _96e1 = '_96e1'
    '''
    96e1 standard edition.
    '''

    _97 = '_97'
    '''
    97 standard edition.
    '''

    _972002 = '_972002'
    '''
    97(2002) standard edition.
    '''

    _972003 = '_972003'
    '''
    97(2003) standard edition.
    '''

    _972008 = '_972008'
    '''
    97(2008) standard edition.
    '''

    _97a = '_97a'
    '''
    97a standard edition.
    '''

    _97a2004 = '_97a2004'
    '''
    97a(2004) standard edition.
    '''

    _98 = '_98'
    '''
    98 standard edition.
    '''

    _98a = '_98a'
    '''
    98a standard edition.
    '''

    _99 = '_99'
    '''
    99 standard edition.
    '''

    _992004e1 = '_992004e1'
    '''
    99(2004)e1 standard edition.
    '''

    _992005 = '_992005'
    '''
    99(2005) standard edition.
    '''

    _992009 = '_992009'
    '''
    99(2009) standard edition.
    '''

    _99a = '_99a'
    '''
    99a standard edition.
    '''

    _99a2004 = '_99a2004'
    '''
    99a(2004) standard edition.
    '''

    _99e1 = '_99e1'
    '''
    99e1 standard edition.
    '''

    _99e2 = '_99e2'
    '''
    99e2 standard edition.
    '''

    none = 'none'
    '''
    No kind of standard.
    '''

    unknown = 'unknown'
    '''
    Unknown kind of standard.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ASTMStandardKind(Enum):
    '''
    List of ASTM standards.
    '''

    D1169 = 'D1169'
    '''
    Standard Test Method for Specific Resistance (Resistivity) of Electrical
    Insulating Liquids.
    '''

    D1275 = 'D1275'
    '''
    Standard Test Method for Corrosive Sulfur in Electrical Insulating
    Oils.
    '''

    D1298 = 'D1298'
    '''
    Standard Test Method for Density, Relative Density, or API Gravity
    of Crude Petroleum and Liquid Petroleum Products by Hydrometer Method
    -or-
    Standard Test Method for Density, Relative Density (Specific Gravity),
    or API Gravity of Crude Petroleum and Liquid Petroleum Products by
    Hydrometer Method.
    '''

    D149 = 'D149'
    '''
    Standard Test Method for Dielectric Breakdown Voltage and Dielectric
    Strength of Solid Electrical Insulating Materials at Commercial Power
    Frequencies.
    '''

    D1500 = 'D1500'
    '''
    Standard Test Method for ASTM Color of Petroleum Products (ASTM Color
    Scale).
    '''

    D1524 = 'D1524'
    '''
    Standard Test Method for Visual Examination of Used Electrical Insulating
    Oils of Petroleum Origin in the Field.
    '''

    D1533 = 'D1533'
    '''
    Standard Test Method for Water in Insulating Liquids by Coulometric
    Karl Fischer Titration.
    '''

    D1816 = 'D1816'
    '''
    Standard Test Method for Dielectric Breakdown Voltage of Insulating
    Liquids Using VDE Electrodes.
    '''

    D2029 = 'D2029'
    '''
    Standard Test Methods for Water Vapor Content of Electrical Insulating
    Gases by Measurement of Dew Point.
    '''

    D2112 = 'D2112'
    '''
    Standard Test Method for Oxidation Stability of Inhibited Mineral Insulating
    Oil by Pressure Vessel.
    '''

    D2129 = 'D2129'
    '''
    Standard Test Method for Color of Clear Electrical Insulating Liquids
    (Platinum-Cobalt Scale).
    '''

    D2140 = 'D2140'
    '''
    Standard Practice for Calculating Carbon-Type Composition of Insulating
    Oils of Petroleum Origin -or-
    Standard Test Method for Carbon-Type Composition of Insulating Oils
    of Petroleum Origin.
    '''

    D2144 = 'D2144'
    '''
    Standard Practices for Examination of Electrical Insulating Oils by
    Infrared Absorption -or-
    Standard Test Methods for Examination of Electrical Insulating Oils
    by Infrared Absorption.
    '''

    D2668 = 'D2668'
    '''
    Standard Test Method for 2,6-di-tert-Butyl- p-Cresol and 2,6-di-tert-Butyl
    Phenol in Electrical Insulating Oil by Infrared Absorption -or-
    Standard Test Method for 2,6-Ditertiary-Butyl Para Cresol and 2,6-Ditertiary-Butyl
    Phenol in Electrical Insulating Oil by Infrared Absorption.
    '''

    D3612 = 'D3612'
    '''
    Standard Test Method for Analysis of Gases Dissolved in Electrical
    Insulating Oil by Gas Chromatography.
    '''

    D4052 = 'D4052'
    '''
    Standard Test Method for Density, Relative Density, and API Gravity
    of Liquids by Digital Density Meter -or-
    Standard Test Method for Density and Relative Density of Liquids by
    Digital Density Meter.
    '''

    D4059 = 'D4059'
    '''
    Standard Test Method for Analysis of Polychlorinated Biphenyls in Insulating
    Liquids by Gas Chromatography.
    '''

    D4230 = 'D4230'
    '''
    Standard Test Method of Measuring Humidity with Cooled-Surface Condensation
    (Dew-Point) Hygrometer.
    '''

    D4243 = 'D4243'
    '''
    Standard Test Method for Measurement of Average Viscometric Degree
    of Polymerization of New and Aged Electrical Papers and Boards.
    '''

    D445 = 'D445'
    '''
    Standard Test Method for Kinematic Viscosity of Transparent and Opaque
    Liquids (and Calculation of Dynamic Viscosity) -or-
    Standard Method Of Test For Viscosity Of Transparent And Opaque Liquids
    (Kinematic And Dynamic Viscosities).
    '''

    D4768 = 'D4768'
    '''
    Standard Test Method for Analysis of 2,6-Ditertiary-Butyl Para-Cresol
    and 2,6-Ditertiary-Butyl Phenol in Insulating Liquids by Gas Chromatography.
    '''

    D5837 = 'D5837'
    '''
    Standard Test Method for Furanic Compounds in Electrical Insulating
    Liquids by High-Performance Liquid Chromatography (HPLC).
    '''

    D5853 = 'D5853'
    '''
    Standard Test Method for Pour Point of Crude Oils.
    '''

    D5949 = 'D5949'
    '''
    Standard Test Method for Pour Point of Petroleum Products (Automatic
    Pressure Pulsing Method).
    '''

    D5950 = 'D5950'
    '''
    Standard Test Method for Pour Point of Petroleum Products (Automatic
    Tilt Method).
    '''

    D5985 = 'D5985'
    '''
    Standard Test Method for Pour Point of Petroleum Products (Rotational
    Method).
    '''

    D6304 = 'D6304'
    '''
    Standard Test Method for Determination of Water in Petroleum Products,
    Lubricating Oils, and Additives by Coulometric Karl Fischer Titration.
    '''

    D6749 = 'D6749'
    '''
    Standard Test Method for Pour Point of Petroleum Products (Automatic
    Air Pressure Method).
    '''

    D6786 = 'D6786'
    '''
    Standard Test Method for Particle Count in Mineral Insulating Oil Using
    Automatic Optical Particle Counters.
    '''

    D6892 = 'D6892'
    '''
    Standard Test Method for Pour Point of Petroleum Products (Robotic
    Tilt Method).
    '''

    D7151 = 'D7151'
    '''
    Standard Test Method for Determination of Elements in Insulating Oils
    by Inductively Coupled Plasma Atomic Emission Spectrometry (ICP-AES).
    '''

    D7346 = 'D7346'
    '''
    Standard Test Method for No Flow Point and Pour Point of Petroleum
    Products and Liquid Fuels -or-
    Standard Test Method for No Flow Point and Pour Point of Petroleum
    Products -or-
    Standard Test Method for No Flow Point of Petroleum Products.
    '''

    D828 = 'D828'
    '''
    Standard Test Method for Tensile Properties of Paper and Paperboard
    Using Constant-Rate-of-Elongation Apparatus (Withdrawn 2009).
    '''

    D877 = 'D877'
    '''
    Standard Test Method for Dielectric Breakdown Voltage of Insulating
    Liquids Using Disk Electrodes.
    '''

    D877D877M = 'D877D877M'
    '''
    Standard Test Method for Dielectric Breakdown Voltage of Insulating
    Liquids Using Disk Electrodes.
    '''

    D92 = 'D92'
    '''
    Standard Test Method for Flash and Fire Points by Cleveland Open Cup
    Tester -or-
    Standard Test Method for Flash and Fire Points by Cleveland Open Cup.
    '''

    D924 = 'D924'
    '''
    Standard Test Method for Dissipation Factor (or Power Factor) and Relative
    Permittivity (Dielectric Constant) of Electrical Insulating Liquids.
    '''

    D93 = 'D93'
    '''
    Standard Test Methods for Flash Point by Pensky-Martens Closed Cup
    Tester -or-
    Standard Test Method for Flash Point by Pensky-Martens Closed Tester
    -or-
    Standard Method Of Test For Flash Point by Pensky-Martens Closed Tester.
    '''

    D97 = 'D97'
    '''
    Standard Test Method for Pour Point of Petroleum Products -or-
    Standard Test Method for Pour Point of Petroleum Oils.
    '''

    D974 = 'D974'
    '''
    Standard Test Method for Acid and Base Number by Color-Indicator Titration.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AccumulationKind(Enum):
    '''
    Kind of accumulation behaviour for read / measured values from individual
    end points.
    '''

    boundedQuantity = 'boundedQuantity'
    '''
    A time-independent cumulative quantity much like a 'bulkQuantity' or
    a 'latchingQuantity', except that the accumulation stops at the maximum
    or minimum values. When the maximum is reached, any additional positive
    accumulation is discarded, but negative accumulation may be accepted
    (thus lowering the counter.) Likewise, when the negative bound is reached,
    any additional negative accumulation is discarded, but positive accumulation
    is accepted (thus increasing the counter.)
    '''

    bulkQuantity = 'bulkQuantity'
    '''
    A value from a register which represents the bulk quantity of a commodity.
    This quantity is computed as the integral of the commodity usage rate.
    This value is typically used as the basis for the dial reading at the
    meter, and as a result, will roll over upon reaching a maximum dial
    value.
    Note 1: With the metering system, the roll-over behaviour typically
    implies a roll-under behavior so that the value presented is always
    a positive value (e.g. unsigned integer or positive decimal.) However,
    when communicating data between enterprise applications a negative
    value might occur in a case such as net metering.
    Note 2: A 'bulkQuantity' refers primarily to the dial reading and not
    the consumption over a specific period of time.
    '''

    continuousCumulative = 'continuousCumulative'
    '''
    The sum of the previous billing period values and the present period
    value.
    Note: 'continuousCumulative' is commonly used in conjunction with 'demand',
    and it would represent the cumulative sum of the previous billing period
    maximum demand values (as occurring with each demand reset) summed
    with the present period maximum demand value (which has yet to be reset.)
    '''

    cumulative = 'cumulative'
    '''
    The sum of the previous billing period values.
    Note: 'cumulative' is commonly used in conjunction with �demand.� Each
    demand reset causes the maximum demand value for the present billing
    period (since the last demand reset) to accumulate as an accumulative
    total of all maximum demands. So instead of 'zeroing' the demand register,
    a demand reset has the effect of adding the present maximum demand
    to this accumulating total.
    '''

    deltaData = 'deltaData'
    '''
    The difference between the value at the end of the prescribed interval
    and the beginning of the interval. This is used for incremental interval
    data.
    Note: One common application would be for load profile data, another
    use might be to report the number of events within an interval (such
    as the number of equipment energisations within the specified period
    of time.)
    '''

    indicating = 'indicating'
    '''
    As if a needle is swung out on the meter face to a value to indicate
    the current value.
    Note: An 'indicating' value is typically measured over hundreds of
    milliseconds or greater, or may imply a �pusher� mechanism to capture
    a value. Compare this to 'instantaneous' which is measured over a shorter
    period of time.
    '''

    instantaneous = 'instantaneous'
    '''
    Typically measured over the fastest period of time allowed by the definition
    of the metric (usually milliseconds or tens of milliseconds.)
    Note: 'instantaneous' was moved to attribute #3 in Ed.2 of IEC 61968-9,
    from attribute #1 in Ed.1 of IEC 61968-9.
    '''

    latchingQuantity = 'latchingQuantity'
    '''
    When this description is applied to a metered value, it implies that
    the value is a time-independent cumulative quantity much like a 'bulkQuantity',
    except that it latches upon the maximum value upon reaching that value.
    Any additional accumulation (positive or negative) is discarded until
    a reset occurs.
    Note: A 'latchingQuantity' may also occur in the downward direction
    � upon reaching a minimum value. The terms 'maximum' or 'minimum' (for
    'aggregate') will usually be included when this type of accumulation
    behaviour is present.
    When this description is applied to an encoded value (UOM= 'Code'),
    it implies that the value has one or more bits which are latching.
    The condition that caused the bit to be set may have long since evaporated.
    In either case, the timestamp that accompanies the value may not coincide
    with the moment the value was initially set.
    In both cases a system will need to perform an operation to clear the
    latched value.
    '''

    none = 'none'
    '''
    Not applicable, or implied by the unit of measure.
    '''

    summation = 'summation'
    '''
    A form of accumulation which is selective with respect to time.
    Note : 'summation' could be considered a specialisation of 'bulkQuantity'
    as it selectively accumulates pulses over a timing pattern (while 'bulkQuantity'
    accumulates pulses all of the time).
    '''

    timeDelay = 'timeDelay'
    '''
    A form of computation which introduces a time delay characteristic
    to the data value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ActionType(Enum):
    '''
    Action type associated with an ActionRequest against a ParticipantInterfaces::Trade.
    '''

    CANCEL = 'CANCEL'
    '''
    Cancel a trade.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class AdderType(Enum):
    '''
    BASELI NE
    NEGOTIATED
    '''

    BASELINE = 'BASELINE'
    '''
    '''

    NEGOTIATED = 'NEGOTIATED'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AggregateKind(Enum):
    '''
    Kind of aggregation for read / measured values from multiple end points.
    '''

    average = 'average'
    '''
    The value represents average.
    '''

    excess = 'excess'
    '''
    The value represents an amount over which a threshold was exceeded.
    '''

    fifthMaximum = 'fifthMaximum'
    '''
    The fifth highest value observed.
    '''

    fourthMaximum = 'fourthMaximum'
    '''
    The fourth highest value observed.
    '''

    highThreshold = 'highThreshold'
    '''
    The value represents a programmed high threshold.
    '''

    lowThreshold = 'lowThreshold'
    '''
    The value represents a programmed low threshold.
    '''

    maximum = 'maximum'
    '''
    The highest value observed.
    '''

    minimum = 'minimum'
    '''
    The smallest value observed.
    '''

    nominal = 'nominal'
    '''
    The nominal value.
    '''

    none = 'none'
    '''
    Not applicable.
    '''

    normal = 'normal'
    '''
    The normal value.
    '''

    secondMaximum = 'secondMaximum'
    '''
    The second highest value observed.
    '''

    secondMinimum = 'secondMinimum'
    '''
    The second smallest value observed.
    '''

    sum = 'sum'
    '''
    The accumulated sum.
    '''

    thirdMaximum = 'thirdMaximum'
    '''
    The third highest value observed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class AlarmDisplayType(Enum):
    '''
    '''

    Appear = 'Appear'
    '''
    '''

    Disappear = 'Disappear'
    '''
    '''

    Fleeting = 'Fleeting'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class AllocationEnergyTypeCode(Enum):
    '''
    '''

    ACNG = 'ACNG'
    '''
    '''

    BS = 'BS'
    '''
    '''

    DAPE = 'DAPE'
    '''
    '''

    DASE = 'DASE'
    '''
    '''

    ESRT = 'ESRT'
    '''
    '''

    ESYS = 'ESYS'
    '''
    '''

    ETC = 'ETC'
    '''
    '''

    HASE = 'HASE'
    '''
    '''

    LMPM = 'LMPM'
    '''
    '''

    MINL = 'MINL'
    '''
    '''

    MLE = 'MLE'
    '''
    '''

    MSSLFE = 'MSSLFE'
    '''
    '''

    OE = 'OE'
    '''
    '''

    OTHER = 'OTHER'
    '''
    '''

    OVGN = 'OVGN'
    '''
    '''

    PE = 'PE'
    '''
    '''

    RCNG = 'RCNG'
    '''
    '''

    RE = 'RE'
    '''
    '''

    RED = 'RED'
    '''
    '''

    RMRD = 'RMRD'
    '''
    '''

    RMRH = 'RMRH'
    '''
    '''

    RMRR = 'RMRR'
    '''
    '''

    RMRS = 'RMRS'
    '''
    '''

    RMRT = 'RMRT'
    '''
    '''

    RSYS = 'RSYS'
    '''
    '''

    RTSSE = 'RTSSE'
    '''
    '''

    SDWN = 'SDWN'
    '''
    '''

    SE = 'SE'
    '''
    '''

    SLIC = 'SLIC'
    '''
    '''

    SRE = 'SRE'
    '''
    '''

    STRT = 'STRT'
    '''
    '''

    SUMR = 'SUMR'
    '''
    '''

    TCNG = 'TCNG'
    '''
    '''

    TEST = 'TEST'
    '''
    '''

    TOR = 'TOR'
    '''
    '''

    VS = 'VS'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AmiBillingReadyKind(Enum):
    '''
    Lifecycle states of the metering installation at a usage point with respect
    to readiness for billing via advanced metering infrastructure reads.
    '''

    amiCapable = 'amiCapable'
    '''
    Usage point is equipped with an AMI capable meter that is not yet currently
    equipped with a communications module.
    '''

    amiDisabled = 'amiDisabled'
    '''
    Usage point is equipped with an AMI capable meter; however, the AMI
    functionality has been disabled or is not being used.
    '''

    billingApproved = 'billingApproved'
    '''
    Usage point is equipped with an operating AMI capable meter and accuracy
    has been certified for billing purposes.
    '''

    enabled = 'enabled'
    '''
    Usage point is equipped with an AMI capable meter having communications
    capability.
    '''

    nonAmi = 'nonAmi'
    '''
    Usage point is equipped with a non AMI capable meter.
    '''

    nonMetered = 'nonMetered'
    '''
    Usage point is not currently equipped with a meter.
    '''

    operable = 'operable'
    '''
    Usage point is equipped with an AMI capable meter that is functioning
    and communicating with the AMI network.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AnalogLimitType(Enum):
    '''
    Limit type specified for AnalogLimits.
    '''

    BranchLongTerm = 'BranchLongTerm'
    '''
    Branch Long Term Limit
    '''

    BranchMediumTerm = 'BranchMediumTerm'
    '''
    Branch Medium Term Limit
    '''

    BranchShortTerm = 'BranchShortTerm'
    '''
    Branch Short Term Limit
    '''

    VoltageHigh = 'VoltageHigh'
    '''
    Voltage High Limit
    '''

    VoltageLow = 'VoltageLow'
    '''
    Voltage Low Limit
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AnalogToDigitalLogicKind(Enum):
    '''
    Categories of analog to digital (or logical result) comparison.
    '''

    eq = 'eq'
    '''
    Equal (like) comparison operation.
    '''

    ge = 'ge'
    '''
    Greater or equal comparison operation.
    '''

    gt = 'gt'
    '''
    Greater than comparison operation.
    '''

    le = 'le'
    '''
    Less or equal comparison operation.
    '''

    lt = 'lt'
    '''
    Less than comparison operation.
    '''

    ne = 'ne'
    '''
    Not equal (unlike) comparison operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AnalyticKind(Enum):
    '''
    Possible kinds of analytics.
    '''

    agingAnalytic = 'agingAnalytic'
    '''
    Analytic evaluates aging.
    '''

    faultAnalytic = 'faultAnalytic'
    '''
    Analytic evaluates fault.
    '''

    healthAnalytic = 'healthAnalytic'
    '''
    Analytic evaluates asset health.
    '''

    other = 'other'
    '''
    Analytic evaluates other factor.
    '''

    replacementAnalytic = 'replacementAnalytic'
    '''
    Analytic evaluates need for replacement.
    '''

    riskAnalytic = 'riskAnalytic'
    '''
    Analytic evaluates risk.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AnchorKind(Enum):
    '''
    Kind of anchor.
    '''

    concrete = 'concrete'
    '''
    '''

    helix = 'helix'
    '''
    '''

    multiHelix = 'multiHelix'
    '''
    '''

    other = 'other'
    '''
    '''

    rod = 'rod'
    '''
    '''

    screw = 'screw'
    '''
    '''

    unknown = 'unknown'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class AncillaryCommodityType(Enum):
    '''
    ancillary serivce types
    '''

    NONSPIN = 'NONSPIN'
    '''
    non spinning reserve
    '''

    REGDN = 'REGDN'
    '''
    regulation down
    '''

    REGUP = 'REGUP'
    '''
    regulation up
    '''

    SPIN = 'SPIN'
    '''
    spinning reserve
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 ApnodeType(Enum):
    '''
    Aggregate Node Types for example:
    AG - Aggregated Generation
    CPZ - Custom Price Zone
    DPZ - Default Price Zone
    LAP - Load Aggregation Point
    TH - Trading Hub
    SYS - System Zone
    CA - Control Area
    GA - generic aggregation
    EHV - 500 kV
    GH - generic hub
    ZN - zone
    INT - Interface
    BUS - Bus
    '''

    AG = 'AG'
    '''
    Aggregated Generation
    '''

    BUS = 'BUS'
    '''
    Bus
    '''

    CA = 'CA'
    '''
    Control Area
    '''

    CPZ = 'CPZ'
    '''
    Custom Price Zone
    '''

    DCA = 'DCA'
    '''
    Designated Congestion Area
    '''

    DPZ = 'DPZ'
    '''
    Default Price Zone
    '''

    EHV = 'EHV'
    '''
    500 kV - Extra High Voltage aggregate price nodes
    '''

    GA = 'GA'
    '''
    generic aggregation
    '''

    GH = 'GH'
    '''
    generic hub
    '''

    INT = 'INT'
    '''
    Interface
    '''

    SYS = 'SYS'
    '''
    System Zone
    '''

    TH = 'TH'
    '''
    Trading Hub
    '''

    ZN = 'ZN'
    '''
    Zone
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ApplicationSecurityKind(Enum):
    '''
    Specifies the expected security mechanism, per IEC 62351-4, to be utilized.
    '''

    endToEndSecure = 'endToEndSecure'
    '''
    Indicates that E2E-security shall be used in order to allow establishment
    of an MMS association.
    '''

    nonSecure = 'nonSecure'
    '''
    Indicates that an application security shall not be used in order to
    allow establishment of an MSS association.
    '''

    secure = 'secure'
    '''
    Indicates that the A-security-profile as specified in Clause 11 (or
    IEC TS 62351-4:2007) shall be used in order to allow establishment
    of an MMS association.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AreaControlMode(Enum):
    '''
    Area's present control mode.
    '''

    CF = 'CF'
    '''
    CF = Constant Frequency
    '''

    CTL = 'CTL'
    '''
    Constant Tie-Line
    '''

    OFF = 'OFF'
    '''
    Off control
    '''

    TLB = 'TLB'
    '''
    Tie-Line Bias
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AreaKind(Enum):
    '''
    Enumeration for the type of area defined; e.g., county, state, parish,
    zipcode, etc.
    '''

    borough = 'borough'
    '''
    Enumeration for the type of area defined for the borough
    '''

    county = 'county'
    '''
    Enumeration for the type of area defined for the county
    '''

    parish = 'parish'
    '''
    Enumeration for the type of area defined for the parish
    '''

    serviceArea = 'serviceArea'
    '''
    Enumeration for the type of area defined for the service area
    '''

    state = 'state'
    '''
    Enumeration for the type of area defined for the state
    '''

    township = 'township'
    '''
    Enumeration for the type of area defined for the township
    '''

    ward = 'ward'
    '''
    Enumeration for the type of area defined for the ward
    '''

    zipcode = 'zipcode'
    '''
    Enumeration for the type of area defined for the zipcode
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AssetFailureClassification(Enum):
    '''
    Classifications of asset failures.
    '''

    defect = 'defect'
    '''
    Failure due to defect.
    '''

    major = 'major'
    '''
    Major failure.
    '''

    majorNeedsReplacement = 'majorNeedsReplacement'
    '''
    Major failure � asset needs to be replaced.
    '''

    minor = 'minor'
    '''
    Minor failure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetFailureMode(Enum):
    '''
    What asset has failed to be able to do.
    Reason for breaker failure.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood (PAB 2016/01/09).
    '''

    failToCarryLoad = 'failToCarryLoad'
    '''
    Failure to carry load.
    '''

    failToClose = 'failToClose'
    '''
    Failure to close.
    '''

    failToInterrupt = 'failToInterrupt'
    '''
    Failure to interrupt.
    '''

    failToOpen = 'failToOpen'
    '''
    Failure to open.
    '''

    failToProvideInsulationLevel = 'failToProvideInsulationLevel'
    '''
    Failure to provide insulation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetGroupKind(Enum):
    '''
    Possible kinds of asset groups.
    '''

    analysisGroup = 'analysisGroup'
    '''
    Group is used for analysis purposes.
    '''

    complianceGroup = 'complianceGroup'
    '''
    Group is used for compliance purposes.
    '''

    functionalGroup = 'functionalGroup'
    '''
    Group is used for functional purposes, for example assets which are
    grouped together because they are part of a for a particular function
    - such as a group of feeders.
    '''

    inventoryGroup = 'inventoryGroup'
    '''
    Group is used for inventory purposes.
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetHazardKind(Enum):
    '''
    Type of hazard that is posed to asset in this location.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood (PAB 2016/01/09).
    '''

    ambientTempAbove38 = 'ambientTempAbove38'
    '''
    Subject to ambient temperature above 38 �C.
    '''

    ambientTempBelowMinus12 = 'ambientTempBelowMinus12'
    '''
    Subject to ambient temperature of below -12 �C.
    '''

    childrenAtPlay = 'childrenAtPlay'
    '''
    Children play in area (stray kite/ball hazard).
    '''

    fishingArea = 'fishingArea'
    '''
    Fishing in area (fishing pole/line hazard).
    '''

    other = 'other'
    '''
    If other, look at type field for more information.
    '''

    vegetation = 'vegetation'
    '''
    Vegetation growing below asset that may cause problem.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetKind(Enum):
    '''
    Kinds of assets or asset components.
    '''

    breakerAirBlastBreaker = 'breakerAirBlastBreaker'
    '''
    Air blast circuit breaker.
    '''

    breakerBulkOilBreaker = 'breakerBulkOilBreaker'
    '''
    Bulk oil circuit breaker.
    '''

    breakerInsulatingStackAssembly = 'breakerInsulatingStackAssembly'
    '''
    Breaker insulating stack assembly (for live tank breaker).
    '''

    breakerMinimumOilBreaker = 'breakerMinimumOilBreaker'
    '''
    Minimum oil circuit breaker.
    '''

    breakerSF6DeadTankBreaker = 'breakerSF6DeadTankBreaker'
    '''
    SF6 dead tank breaker.
    '''

    breakerSF6LiveTankBreaker = 'breakerSF6LiveTankBreaker'
    '''
    SF6 live tank breaker.
    '''

    breakerTankAssembly = 'breakerTankAssembly'
    '''
    Breaker tank assembly.
    '''

    other = 'other'
    '''
    Other type of Asset. The type attribute may provide more details in
    this case.
    '''

    transformer = 'transformer'
    '''
    Transformer.
    '''

    transformerTank = 'transformerTank'
    '''
    Transformer tank.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetLifecycleStateKind(Enum):
    '''
    Lifecycle states an asset can be in.
    While the possible lifecycle states are standardized, the allowed transitions
    are not - they are intended to be defined by the business process requirements
    of local implementations.
    '''

    disposedOf = 'disposedOf'
    '''
    Asset disposed of.
    '''

    manufactured = 'manufactured'
    '''
    Asset manufactured.
    '''

    purchased = 'purchased'
    '''
    Asset purchased.
    '''

    received = 'received'
    '''
    Asset received.
    '''

    retired = 'retired'
    '''
    Asset retired.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetModelUsageKind(Enum):
    '''
    Usage for an asset model.
    '''

    customerSubstation = 'customerSubstation'
    '''
    Asset model is intended for use in customer substation.
    '''

    distributionOverhead = 'distributionOverhead'
    '''
    Asset model is intended for use in distribution overhead network.
    '''

    distributionUnderground = 'distributionUnderground'
    '''
    Asset model is intended for use in underground distribution network.
    '''

    other = 'other'
    '''
    Other kind of asset model usage.
    '''

    streetlight = 'streetlight'
    '''
    Asset model is intended for use as streetlight.
    '''

    substation = 'substation'
    '''
    Asset model is intended for use in substation.
    '''

    transmission = 'transmission'
    '''
    Asset model is intended for use in transmission network.
    '''

    unknown = 'unknown'
    '''
    Usage of the asset model is unknown.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AssetStringKind(Enum):
    '''
    Definition of type of string useful in asset domain.
    '''

    visualExamRemarks = 'visualExamRemarks'
    '''
    Remarks related to a visual exam.
    Could be used for remarks on oil appearance resulting from visual examination,
    including sediment, appearance, free water.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AssetTemperaturePressureAnalogKind(Enum):
    '''
    Analogs representing temperatures or pressures related to assets.
    '''

    oilPressureAtValve = 'oilPressureAtValve'
    '''
    Oil pressure at valve (in KPa).
    '''

    oilTemperatureAtValve = 'oilTemperatureAtValve'
    '''
    Oil temperature at valve (in �C).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @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://iec.ch/TC57/CIM100#'
    @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 AtmosphericAnalogKind(Enum):
    '''
    Kinds of analogs (floats) measuring an atmospheric condition.
    '''

    albedo = 'albedo'
    '''
    '''

    ambientTemperature = 'ambientTemperature'
    '''
    The temperature measured b<font color="#0f0f0f">y a thermometer exposed
    to the air in a place sheltered from direct solar radiation. </font>Also
    known as "dry bulb" because<font color="#0f0f0f"> the air temperature
    is indicated by a thermometer not affecte</font>d by the moisture of
    the air.
    '''

    atmosphericPressure = 'atmosphericPressure'
    '''
    '''

    ceiling = 'ceiling'
    '''
    '''

    dewPoint = 'dewPoint'
    '''
    The temperature to which air must be cooled at constant pressure and
    constant water-vapor content in order for saturation to occur. In other
    words, it is the temperature at which water vapor starts to condense
    out of the air.
    '''

    heatIndex = 'heatIndex'
    '''
    The temperature of how hot it "feels like" for a given combination
    of warm air temperature and relative humidity.
    '''

    horizontalVisibility = 'horizontalVisibility'
    '''
    '''

    humidity = 'humidity'
    '''
    '''

    ice = 'ice'
    '''
    '''

    illuminanceDiffuseHorizontal = 'illuminanceDiffuseHorizontal'
    '''
    '''

    illuminanceDirectNormal = 'illuminanceDirectNormal'
    '''
    '''

    illuminanceGlobalHorizontal = 'illuminanceGlobalHorizontal'
    '''
    '''

    irradianceDiffuseHorizonal = 'irradianceDiffuseHorizonal'
    '''
    '''

    irradianceDirectNormal = 'irradianceDirectNormal'
    '''
    '''

    irradianceExtraTerrestrialHorizontal = 'irradianceExtraTerrestrialHorizontal'
    '''
    '''

    irradianceExtraTerrestrialVertical = 'irradianceExtraTerrestrialVertical'
    '''
    '''

    irradianceGlobalHorizontal = 'irradianceGlobalHorizontal'
    '''
    '''

    luminanceZenith = 'luminanceZenith'
    '''
    '''

    precipitation = 'precipitation'
    '''
    '''

    rain = 'rain'
    '''
    '''

    skyCoverageOpaque = 'skyCoverageOpaque'
    '''
    '''

    skyCoverageTotal = 'skyCoverageTotal'
    '''
    '''

    snow = 'snow'
    '''
    Snow amount over a specified period of time.
    '''

    verticalVisibility = 'verticalVisibility'
    '''
    '''

    windChill = 'windChill'
    '''
    The temperature of how cold it "feels like" based on the rate of heat
    loss from exposed skin caused by the effects of wind and cold temperatures.
    '''

    windSpeedGust = 'windSpeedGust'
    '''
    Maximum instantaneous wind speed in the 10 minute period preceding
    a moment in time so long as more than 10 knots of difference has been
    exhibited between peaks and lulls during that 10 minute time period.
    0 value means no gusts during preceding 10 minute period.
    '''

    windSpeedInstantaneous = 'windSpeedInstantaneous'
    '''
    Wind speed at a moment in time.
    '''

    windSpeedPeak = 'windSpeedPeak'
    '''
    Peak instantaneous wind speed in the 60 minutes preceding a moment
    in time as long as peak speed greater than 25 knots.
    0 value means speed did not exceed 25 knots during preceding 60 minutes.
    '''

    windSpeedSustained = 'windSpeedSustained'
    '''
    Average instantaneous wind speed over the 2-minute time period preceding
    a moment in time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class AutomaticDispInstTypeCommitment(Enum):
    '''
    Commitment instruction types.
    '''

    DR_ADJUSTMENT = 'DR_ADJUSTMENT'
    '''
    Distributed Resource adjustment for a distributed resource that is
    already deployed (committed).
    '''

    DR_DEPLOY = 'DR_DEPLOY'
    '''
    Distributed Resource Deployment
    '''

    DR_RELEASE = 'DR_RELEASE'
    '''
    Distributed Resource Release
    '''

    SHUT_DOWN = 'SHUT_DOWN'
    '''
    Shut down instruction type
    '''

    START_UP = 'START_UP'
    '''
    Start up instruction type
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 AutomaticDispatchMode(Enum):
    '''
    Automatic Dispatch mode.
    '''

    CONTINGENCY = 'CONTINGENCY'
    '''
    Contingnency occurance, redispatch of contingency reserves
    '''

    INTERVAL = 'INTERVAL'
    '''
    '''

    MANUAL = 'MANUAL'
    '''
    Operator override
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 BidCalculationBasis(Enum):
    '''
    The basis used to calculate the bid price curve for an energy default bid.
    '''

    COST_BASED = 'COST_BASED'
    '''
    Based on unit generation characteristics and a cost of fuel.
    '''

    LMP_BASED = 'LMP_BASED'
    '''
    Based on prices paid at particular pricing location.
    '''

    NEGOTIATED = 'NEGOTIATED'
    '''
    An amount negotiated with the designated Independent Entity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BidMitigationStatus(Enum):
    '''
    For example:
    'S' - Mitigated by SMPM because of "misconduct"
    'L; - Mitigated by LMPM because of "misconduct"
    'R' - Modified by LMPM because of RMR rules
    'M' - Mitigated because of "misconduct" both by SMPM and LMPM
    'B' - Mitigated because of "misconduct" both by SMPM and modified by LMLM
    because of RMR rules
    'O' - original
    '''

    B = 'B'
    '''
    '''

    L = 'L'
    '''
    '''

    M = 'M'
    '''
    '''

    O = 'O'
    '''
    '''

    R = 'R'
    '''
    '''

    S = 'S'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BidMitigationType(Enum):
    '''
    For example:
    Initial
    Final
    '''

    F = 'F'
    '''
    '''

    I = 'I'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class BidPriceCapType(Enum):
    '''
    '''

    AS = 'AS'
    '''
    '''

    ENERGY = 'ENERGY'
    '''
    '''

    RUC = 'RUC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class BidStatusType(Enum):
    '''
    Status indication for bids
    CV - Conditionally Valid Bid
    CM - Conditionally Modified Bid
    V - Valid Bid
    M - Modified Bid
    RJ - Rejected Bid
    I - Invalid Bid
    CX - Cancelled Bid
    O - Obsolete Bid
    CL - Clean Bid
    RP - Replicated Bid
    '''

    CL = 'CL'
    '''
    Clean
    '''

    CM = 'CM'
    '''
    '''

    CV = 'CV'
    '''
    '''

    CX = 'CX'
    '''
    '''

    I = 'I'
    '''
    '''

    M = 'M'
    '''
    '''

    O = 'O'
    '''
    '''

    RJ = 'RJ'
    '''
    '''

    RP = 'RP'
    '''
    Replicated
    '''

    V = 'V'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BidType(Enum):
    '''
    For example:
    DEFAULT_ENERGY_BID
    DEFAULT_STARTUP_BID
    DEFAULT_MINIMUM_LOAD_BID
    '''

    DEFAULT_ENERGY_BID = 'DEFAULT_ENERGY_BID'
    '''
    '''

    DEFAULT_MINIMUM_LOAD_BID = 'DEFAULT_MINIMUM_LOAD_BID'
    '''
    '''

    DEFAULT_STARTUP_BID = 'DEFAULT_STARTUP_BID'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BidTypeRMR(Enum):
    '''
    Bid self schedule type has two types as the required output of requirements
    and qualified pre-dispatch.
    '''

    QUALIFIED_PREDISPATCH = 'QUALIFIED_PREDISPATCH'
    '''
    Output of requirements bid self schedule type.
    '''

    REQUIREMENTS = 'REQUIREMENTS'
    '''
    Qualified pre-dispatch bid self schedule type.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BillMediaKind(Enum):
    '''
    Kind of bill media.
    '''

    electronic = 'electronic'
    '''
    '''

    other = 'other'
    '''
    '''

    paper = 'paper'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BoilerControlMode(Enum):
    '''
    Boiler control mode.
    '''

    coordinated = 'coordinated'
    '''
    Coordinated.
    '''

    following = 'following'
    '''
    Following.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BreakerApplicationKind(Enum):
    '''
    Classifications of network roles in which breakers can be deployed. The
    classifications are intended to reflect both criticality of breaker in
    network operations and typical usage experienced by breaker.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood (PAB 2016/01/09).
    '''

    busBreaker = 'busBreaker'
    '''
    Bus breaker.
    '''

    busTieBreaker = 'busTieBreaker'
    '''
    Bus tie breaker.
    '''

    capacitorOrReactorBankBreaker = 'capacitorOrReactorBankBreaker'
    '''
    Capacitor or reactor breaker.
    '''

    feederBreaker = 'feederBreaker'
    '''
    Feeder breaker.
    '''

    other = 'other'
    '''
    Other type of breaker application.
    '''

    spare = 'spare'
    '''
    Spare breaker.
    '''

    stepUpTransformerBreakerFossil = 'stepUpTransformerBreakerFossil'
    '''
    Step-up transformer breaker for fossil generator.
    '''

    stepUpTransformerBreakerHydro = 'stepUpTransformerBreakerHydro'
    '''
    Step-up transformer breaker for hydro generator.
    '''

    stepUpTransformerBreakerNuclear = 'stepUpTransformerBreakerNuclear'
    '''
    Step-up transformer breaker for nuclear generator.
    '''

    stepUpTransformerBreakerPumpedStorage = 'stepUpTransformerBreakerPumpedStorage'
    '''
    Step-up transformer breaker for pumped storage.
    '''

    substationTransformerBreaker = 'substationTransformerBreaker'
    '''
    Substation transformer breaker.
    '''

    transmissionFlowGateLineBreaker = 'transmissionFlowGateLineBreaker'
    '''
    Transmission flow gate line breaker.
    '''

    transmissionLineBreaker = 'transmissionLineBreaker'
    '''
    Transmission line breaker.
    '''

    transmissionTieLineBreaker = 'transmissionTieLineBreaker'
    '''
    Transmission tie line breaker.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 BreakerFailureReasonKind(Enum):
    '''
    Reason for breaker failure.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood (PAB 2016/01/09).
    '''

    SF6BlastValveFailure = 'SF6BlastValveFailure'
    '''
    SF6 blast valve failure.
    '''

    SF6PufferFailure = 'SF6PufferFailure'
    '''
    SF6 puffer valve failure.
    '''

    blastValveFailure = 'blastValveFailure'
    '''
    Blast valve failure.
    '''

    bushingFailure = 'bushingFailure'
    '''
    Bushing failure.
    '''

    closeCoilOpenShortedFailed = 'closeCoilOpenShortedFailed'
    '''
    Close coil open shorted failure.
    '''

    contaminatedAir = 'contaminatedAir'
    '''
    Contaminated air.
    '''

    contaminatedArcChutes = 'contaminatedArcChutes'
    '''
    Contaminated arc chutes.
    '''

    contaminatedGas = 'contaminatedGas'
    '''
    Contaminated gas.
    '''

    contaminatedGasAir = 'contaminatedGasAir'
    '''
    Contaminated gas or air.
    '''

    controlCircuitFailure = 'controlCircuitFailure'
    '''
    Control circuit failure.
    '''

    degradedLubrication = 'degradedLubrication'
    '''
    Degraded lubrication.
    '''

    externalOrInternalContamination = 'externalOrInternalContamination'
    '''
    External or internal contamination.
    '''

    highPressureAirPlant = 'highPressureAirPlant'
    '''
    High pressure air plant.
    '''

    highResistanceLoadPath = 'highResistanceLoadPath'
    '''
    High resistance load path.
    '''

    highResistancePath = 'highResistancePath'
    '''
    High resistance path.
    '''

    interrupterContactFailure = 'interrupterContactFailure'
    '''
    Interrupter contact failure.
    '''

    interrupterFailure = 'interrupterFailure'
    '''
    Interrupter failure.
    '''

    linkageFailure = 'linkageFailure'
    '''
    Linkage failure.
    '''

    lossOfOil = 'lossOfOil'
    '''
    Loss of oil.
    '''

    lossOfVacuum = 'lossOfVacuum'
    '''
    Loss of vacuum.
    '''

    lowGasPressure = 'lowGasPressure'
    '''
    Low gas pressure.
    '''

    mechanismFailure = 'mechanismFailure'
    '''
    Blast valve failure.
    '''

    mechanismOrLinkageFailure = 'mechanismOrLinkageFailure'
    '''
    Mechanism or linkage failure.
    '''

    oilRelatedFailure = 'oilRelatedFailure'
    '''
    Oil-related failure.
    '''

    poorOilQuality = 'poorOilQuality'
    '''
    Poor oil quality.
    '''

    rackingMechanismFailure = 'rackingMechanismFailure'
    '''
    Racking mechanism failure.
    '''

    resistorFailure = 'resistorFailure'
    '''
    Resistor failure.
    '''

    resistorGradingCapacitorFailure = 'resistorGradingCapacitorFailure'
    '''
    Resistor grading capacitor failure.
    '''

    solidDielectricFailure = 'solidDielectricFailure'
    '''
    Solid dielectric failure.
    '''

    storedEnergyFailure = 'storedEnergyFailure'
    '''
    Stored energy failure.
    '''

    tripCoilOpenShortedFailed = 'tripCoilOpenShortedFailed'
    '''
    Trip coil open shorted failure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 BreakerMaintenanceKind(Enum):
    '''
    Possible types of breaker maintenance work.
    '''

    externalOutOfService = 'externalOutOfService'
    '''
    External out-of-service inspection and maintenance.
    '''

    internalOutOfService = 'internalOutOfService'
    '''
    Internal (interrupter) inspection and maintenance (breaker out of service).
    '''

    interrupterOverhaul = 'interrupterOverhaul'
    '''
    Overhaul of breaker interrupter unit.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class BreakerRepairItemKind(Enum):
    '''
    Breaker components and problem areas which can be the focus of a repair
    work task.
    '''

    SF6GasLeak = 'SF6GasLeak'
    '''
    SF6 gas leak repair.
    '''

    airCompressor = 'airCompressor'
    '''
    Air compressor repair.
    '''

    auxiliarySwitchAndLinkage = 'auxiliarySwitchAndLinkage'
    '''
    Auxiliary switch and linkage repair.
    '''

    busConnection = 'busConnection'
    '''
    Bus connection repair.
    '''

    checkValve = 'checkValve'
    '''
    Check valve repair.
    '''

    closeCoil = 'closeCoil'
    '''
    Close coil repair.
    '''

    contactor = 'contactor'
    '''
    Contactor repair.
    '''

    controlCircuit = 'controlCircuit'
    '''
    Control circuit repair.
    '''

    corrosion = 'corrosion'
    '''
    Corrosion repair.
    '''

    gasDensitySupervision = 'gasDensitySupervision'
    '''
    Gas density supervision repair.
    '''

    heaterOrThermostat = 'heaterOrThermostat'
    '''
    Heater or thermostat repair.
    '''

    hydraulicFluidLeak = 'hydraulicFluidLeak'
    '''
    Hydraulic fluid leak repair.
    '''

    interrupterAssembly = 'interrupterAssembly'
    '''
    Interrupter assembly repair.
    '''

    other = 'other'
    '''
    Other type of repair.
    '''

    positionIndicator = 'positionIndicator'
    '''
    Position indicator repair.
    '''

    pressureSwitch = 'pressureSwitch'
    '''
    Pressure switch repair.
    '''

    pumpOrMotor = 'pumpOrMotor'
    '''
    Pump or motor repair.
    '''

    relay = 'relay'
    '''
    Relay repair.
    '''

    storedEnergySystem = 'storedEnergySystem'
    '''
    Stored energy system repair.
    '''

    tripCoil = 'tripCoil'
    '''
    Trip coil repair.
    '''

    tripControlValve = 'tripControlValve'
    '''
    Trip control valve repair.
    '''

    wiring = 'wiring'
    '''
    Wiring repair.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 BushingInsulationPfTestKind(Enum):
    '''
    Kind of PF test for bushing insulation.
    '''

    c1 = 'c1'
    '''
    Power factor tap-to-ground.
    '''

    c2 = 'c2'
    '''
    Power factor tap-to-conductor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CIGREStandardEditionKind(Enum):
    '''
    List of editions for CIGRE standards.
    '''

    _2000 = '_2000'
    '''
    2000 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CIGREStandardKind(Enum):
    '''
    List of CIGRE standards.
    '''

    TB170 = 'TB170'
    '''
    CIGRE Technical Brochure 170 Static Electrification in Power Transformers.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CRRCategoryType(Enum):
    '''
    Congestion Revenue Rights category types.
    '''

    NSR = 'NSR'
    '''
    Network Service
    '''

    PTP = 'PTP'
    '''
    Point to Point
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CRRHedgeType(Enum):
    '''
    Congestion Revenue Right hedge type.
    '''

    OBLIGATION = 'OBLIGATION'
    '''
    '''

    OPTION = 'OPTION'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CRRRoleType(Enum):
    '''
    Role types an organisation can play with respect to a congestion revenue
    right.
    '''

    BUYER = 'BUYER'
    '''
    '''

    OWNER = 'OWNER'
    '''
    '''

    SELLER = 'SELLER'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CRRSegmentType(Enum):
    '''
    Type of the CRR, from the possible type definitions in the CRR System (e.g.
    'LSE', 'ETC').
    '''

    AUC = 'AUC'
    '''
    '''

    CAP = 'CAP'
    '''
    '''

    CF = 'CF'
    '''
    '''

    CVR = 'CVR'
    '''
    Converted rights.
    '''

    ETC = 'ETC'
    '''
    Existing Transmission Contract.
    '''

    LSE = 'LSE'
    '''
    Load Serving Entity.
    '''

    MT = 'MT'
    '''
    Merchant transmission.
    '''

    TOR = 'TOR'
    '''
    Transmission Ownership Rights.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 CalculationIntervalUnitKind(Enum):
    '''
    Units in which calculation interval period is defined.
    '''

    cycle = 'cycle'
    '''
    Period expressed in cycles.
    '''

    day = 'day'
    '''
    Period expressed in days.
    '''

    hour = 'hour'
    '''
    Period expressed in hours.
    '''

    milliSecond = 'milliSecond'
    '''
    Period expressed in milli-seconds.
    '''

    minute = 'minute'
    '''
    Period expressed in minutes.
    '''

    month = 'month'
    '''
    Period expressed in months.
    '''

    perCycle = 'perCycle'
    '''
    Period expressed in per-cycle.
    '''

    season = 'season'
    '''
    Period expressed in seasons.
    '''

    second = 'second'
    '''
    Period expressed in seconds.
    '''

    week = 'week'
    '''
    Period expressed in weeks.
    '''

    year = 'year'
    '''
    Period expressed in years.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CalculationKind(Enum):
    '''
    Categorisation of calculation operation that can be done to Measurement.
    '''

    div = 'div'
    '''
    Division operation the input values (operands).
    '''

    mul = 'mul'
    '''
    Multiplication operation the input values (operands).
    '''

    sqrt = 'sqrt'
    '''
    Square root operator - only one input value (operands).
    '''

    sum = 'sum'
    '''
    Summation operation over the input values (operands).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CalculationModeKind(Enum):
    '''
    The mode of the calculation (total, periodic, sliding).
    .
    '''

    period = 'period'
    '''
    Calcuation is for fixed period.
    '''

    sliding = 'sliding'
    '''
    Calculation is for sliding period.
    '''

    total = 'total'
    '''
    Calculation is for total period.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CalculationTechniqueKind(Enum):
    '''
    Possible calculation techniques.
    '''

    average = 'average'
    '''
    Result is average value for period.
    '''

    maximum = 'maximum'
    '''
    Result is maximum value for period.
    '''

    minimum = 'minimum'
    '''
    Result is minimum value for period.
    '''

    trueRMS = 'trueRMS'
    '''
    Result is RMS value for period.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ChargeKind(Enum):
    '''
    Kind of charge.
    '''

    auxiliaryCharge = 'auxiliaryCharge'
    '''
    Any other charge which is not a consumptionCharge or demandCharge.
    For example: debt recovery, arrears, standing charge or charge for
    another service such as street lighting.
    '''

    consumptionCharge = 'consumptionCharge'
    '''
    The charge levied for the actual usage of the service, normally expressed
    in terms of a tariff. For example: usage x price per kWh = total charge
    for consumption.
    '''

    demandCharge = 'demandCharge'
    '''
    The charge related to the usage within a defined time interval, normally
    expressed in terms of a tariff. For example: a maximum-demand tariff
    will levy an additional charge on top of the consumption charge if
    the usage exceeds a defined limit per hour.
    '''

    other = 'other'
    '''
    Other kind of charge.
    '''

    taxCharge = 'taxCharge'
    '''
    Any charge that is classified as a tax of a kind. For example: VAT,
    GST, TV tax, etc.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CheckOutType(Enum):
    '''
    To indicate a check out type such as adjusted capacity or dispatch capacity.
    '''

    AFTER_THE_FACT = 'AFTER_THE_FACT'
    '''
    '''

    PRE_HOUR = 'PRE_HOUR'
    '''
    '''

    PRE_SCHEDULE = 'PRE_SCHEDULE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ChequeKind(Enum):
    '''
    Kind of cheque.
    '''

    bankOrder = 'bankOrder'
    '''
    Payment order used by a bank.
    '''

    other = 'other'
    '''
    Other kind of cheque.
    '''

    postalOrder = 'postalOrder'
    '''
    Payment order used by institutions other than banks.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class CleanTradeProductType(Enum):
    '''
    '''

    APN = 'APN'
    '''
    Energy Trades at Aggregated Pricing Nodes
    '''

    CPT = 'CPT'
    '''
    Converted Physical Energy Trade
    '''

    NRT = 'NRT'
    '''
    Non-Spinning Reserve Trade
    '''

    PHY = 'PHY'
    '''
    Physical Energy Tra
    '''

    RDT = 'RDT'
    '''
    Regulation Down Trade
    '''

    RUT = 'RUT'
    '''
    Regulation Up Trade
    '''

    SRT = 'SRT'
    '''
    Spinning Reserve Trade
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ClearanceActionKind(Enum):
    '''
    Type of clearance action.
    '''

    issue = 'issue'
    '''
    Issue clearance.
    '''

    release = 'release'
    '''
    Release clearance.
    '''

    update = 'update'
    '''
    Update clearance.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CloudKind(Enum):
    '''
    Kind of cloud.
    '''

    altoCumulus = 'altoCumulus'
    '''
    '''

    altoStratus = 'altoStratus'
    '''
    '''

    cirroCumulus = 'cirroCumulus'
    '''
    '''

    cirroStratus = 'cirroStratus'
    '''
    '''

    cirrus = 'cirrus'
    '''
    '''

    cumuloNimbus = 'cumuloNimbus'
    '''
    '''

    cumulus = 'cumulus'
    '''
    '''

    nimboStratus = 'nimboStratus'
    '''
    '''

    other = 'other'
    '''
    '''

    stratoCumulus = 'stratoCumulus'
    '''
    '''

    stratus = 'stratus'
    '''
    '''

    toweringCumulus = 'toweringCumulus'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 CommitmentType(Enum):
    '''
    For example:
    SELF - Self commitment
    ISO - New commitment for this market period
    UC - Existing commitment that was a hold over from a previous market
    '''

    ISO = 'ISO'
    '''
    '''

    SELF = 'SELF'
    '''
    '''

    UC = 'UC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CommodityKind(Enum):
    '''
    Kind of commodity being measured.
    '''

    air = 'air'
    '''
    Atmospheric air
    '''

    carbon = 'carbon'
    '''
    The element has an atomic number of 6.
    '''

    ch4 = 'ch4'
    '''
    Methane CH4
    '''

    co2 = 'co2'
    '''
    Carbon Dioxide CO2
    '''

    communication = 'communication'
    '''
    A measurement of the communication infrastructure itself.
    '''

    coolingFluid = 'coolingFluid'
    '''
    The cool fluid returns warmer than when it was sent. The heat conveyed
    may be metered.
    '''

    electricityPrimaryMetered = 'electricityPrimaryMetered'
    '''
    It is possible for a meter to be outfitted with an external VT and/or
    CT. The meter might not be aware of these devices, and the display
    not compensate for their presence. Ultimately, when these scalars are
    applied, the value that represents the service value is called the
    �primary metered� value. The �index� in sub-category 3 mirrors those
    of sub-category 0.
    '''

    electricitySecondaryMetered = 'electricitySecondaryMetered'
    '''
    All types of metered quantities. This type of reading comes from the
    meter and represents a �secondary� metered value.
    '''

    hch = 'hch'
    '''
    Hexachlorocyclohexane HCH
    '''

    heatingFluid = 'heatingFluid'
    '''
    This fluid is likely in liquid form. It is not necessarily water or
    water based. The warm fluid returns cooler than when it was sent. The
    heat conveyed may be metered.
    '''

    insulativeGas = 'insulativeGas'
    '''
    (SF6 is found separately below.)
    '''

    insulativeOil = 'insulativeOil'
    '''
    Oil that is used in transformers to provide insulation and heat conduction.
    '''

    internet = 'internet'
    '''
    Internet service
    '''

    naturalGas = 'naturalGas'
    '''
    A naturally occurring hydrocarbon gas mixture.
    '''

    none = 'none'
    '''
    Not Applicable
    '''

    nonpotableWater = 'nonpotableWater'
    '''
    Reclaimed water � possibly used for irrigation but not sufficiently
    treated to be considered safe for drinking.
    '''

    nox = 'nox'
    '''
    Nitrous Oxides NOX
    '''

    pfc = 'pfc'
    '''
    Perfluorocarbons PFC
    '''

    potableWater = 'potableWater'
    '''
    Drinkable water
    '''

    propane = 'propane'
    '''
    The formula is C3H8
    '''

    refuse = 'refuse'
    '''
    trash
    '''

    sf6 = 'sf6'
    '''
    Sulfurhexafluoride SF6
    '''

    so2 = 'so2'
    '''
    Sulfur Dioxide SO2
    '''

    steam = 'steam'
    '''
    Water in steam form, usually used for heating.
    '''

    tvLicence = 'tvLicence'
    '''
    Television
    '''

    wasteWater = 'wasteWater'
    '''
    (Sewerage)
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 ConditionFactorKind(Enum):
    '''
    Kind of condition factor.
    '''

    accountAllocation = 'accountAllocation'
    '''
    '''

    labor = 'labor'
    '''
    '''

    material = 'material'
    '''
    '''

    other = 'other'
    '''
    '''

    travel = 'travel'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ConstraintLimitType(Enum):
    '''
    Binding constraint results limit type, For example:
    MAXIMUM
    MINIMUM
    '''

    MAXIMUM = 'MAXIMUM'
    '''
    '''

    MINIMUM = 'MINIMUM'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ConstraintRampType(Enum):
    '''
    Constraint Ramp type.
    '''

    FAST = 'FAST'
    '''
    '''

    SLOW = 'SLOW'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ContingencyEquipmentStatusKind(Enum):
    '''
    Indicates the state which the contingency equipment is to be in when the
    contingency is applied.
    '''

    inService = 'inService'
    '''
    The equipment is to be put into service.
    '''

    outOfService = 'outOfService'
    '''
    The equipment is to be taken out of service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Contingency'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ContractType(Enum):
    '''
    Transmission Contract Type, For example:
    O - Other
    TE - Transmission Export
    TI - Transmission Import
    ETC - Existing Transmission Contract
    RMT - RMT Contract
    TOR - Transmission Ownership Right
    RMR - Reliability Must Run Contract
    CVR - Converted contract
    '''

    CVR = 'CVR'
    '''
    CVR - Converted contract.
    '''

    ETC = 'ETC'
    '''
    ETC - Existing Transmission Contract
    '''

    O = 'O'
    '''
    O - Other
    '''

    RMR = 'RMR'
    '''
    RMR - Reliability Must Run Contract
    '''

    RMT = 'RMT'
    '''
    RMT - RMT Contract
    '''

    TE = 'TE'
    '''
    TE - Transmission Export
    '''

    TI = 'TI'
    '''
    TI - Transmission Import
    '''

    TOR = 'TOR'
    '''
    TOR - Transmission Ownership Right
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ControlArea'
    @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://iec.ch/TC57/CIM100#'
    @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 CoolingKind(Enum):
    '''
    Kind of cooling.
    '''

    forcedAir = 'forcedAir'
    '''
    '''

    forcedOilAndAir = 'forcedOilAndAir'
    '''
    '''

    other = 'other'
    '''
    '''

    selfCooling = 'selfCooling'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CorporateStandardKind(Enum):
    '''
    Kind of corporate standard.
    '''

    experimental = 'experimental'
    '''
    Asset model is used experimentally.
    '''

    other = 'other'
    '''
    Other kind of corporate standard for the asset model.
    '''

    standard = 'standard'
    '''
    Asset model is used as corporate standard.
    '''

    underEvaluation = 'underEvaluation'
    '''
    Asset model usage is under evaluation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CostBasis(Enum):
    '''
    For example:
    Bid Cost
    Proxy Cost
    Registered Cost
    '''

    BIDC = 'BIDC'
    '''
    '''

    PRXC = 'PRXC'
    '''
    '''

    REGC = 'REGC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 CoverageCodeKind(Enum):
    '''
    Kinds of weather condition coverage.
    '''

    brief = 'brief'
    '''
    '''

    frequent = 'frequent'
    '''
    '''

    intermittant = 'intermittant'
    '''
    '''

    isolated = 'isolated'
    '''
    '''

    numerous = 'numerous'
    '''
    '''

    occasional = 'occasional'
    '''
    '''

    partly = 'partly'
    '''
    '''

    patchy = 'patchy'
    '''
    '''

    periodsOf = 'periodsOf'
    '''
    '''

    scattered = 'scattered'
    '''
    '''

    widespread = 'widespread'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @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 - assigned, arrived, etc.
    '''

    arrived = 'arrived'
    '''
    the crew is on site at the outage 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 has been dispatched to work on an outage
    '''

    fieldComplete = 'fieldComplete'
    '''
    the crew has corrected the outage in the field. The equipment or other
    devices may not be energized at this time.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 HVDC 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://iec.ch/TC57/CIM100#'
    @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 HVDC 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://iec.ch/TC57/CIM100#'
    @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 Currency(Enum):
    '''
    Monetary currencies. ISO 4217 standard including 3-character currency code.
    '''

    AED = 'AED'
    '''
    United Arab Emirates dirham.
    '''

    AFN = 'AFN'
    '''
    Afghan afghani.
    '''

    ALL = 'ALL'
    '''
    Albanian lek.
    '''

    AMD = 'AMD'
    '''
    Armenian dram.
    '''

    ANG = 'ANG'
    '''
    Netherlands Antillean guilder.
    '''

    AOA = 'AOA'
    '''
    Angolan kwanza.
    '''

    ARS = 'ARS'
    '''
    Argentine peso.
    '''

    AUD = 'AUD'
    '''
    Australian dollar.
    '''

    AWG = 'AWG'
    '''
    Aruban florin.
    '''

    AZN = 'AZN'
    '''
    Azerbaijani manat.
    '''

    BAM = 'BAM'
    '''
    Bosnia and Herzegovina convertible mark.
    '''

    BBD = 'BBD'
    '''
    Barbados dollar.
    '''

    BDT = 'BDT'
    '''
    Bangladeshi taka.
    '''

    BGN = 'BGN'
    '''
    Bulgarian lev.
    '''

    BHD = 'BHD'
    '''
    Bahraini dinar.
    '''

    BIF = 'BIF'
    '''
    Burundian franc.
    '''

    BMD = 'BMD'
    '''
    Bermudian dollar (customarily known as Bermuda dollar).
    '''

    BND = 'BND'
    '''
    Brunei dollar.
    '''

    BOB = 'BOB'
    '''
    Boliviano.
    '''

    BOV = 'BOV'
    '''
    Bolivian Mvdol (funds code).
    '''

    BRL = 'BRL'
    '''
    Brazilian real.
    '''

    BSD = 'BSD'
    '''
    Bahamian dollar.
    '''

    BTN = 'BTN'
    '''
    Bhutanese ngultrum.
    '''

    BWP = 'BWP'
    '''
    Botswana pula.
    '''

    BYR = 'BYR'
    '''
    Belarusian ruble.
    '''

    BZD = 'BZD'
    '''
    Belize dollar.
    '''

    CAD = 'CAD'
    '''
    Canadian dollar.
    '''

    CDF = 'CDF'
    '''
    Congolese franc.
    '''

    CHF = 'CHF'
    '''
    Swiss franc.
    '''

    CLF = 'CLF'
    '''
    Unidad de Fomento (funds code), Chile.
    '''

    CLP = 'CLP'
    '''
    Chilean peso.
    '''

    CNY = 'CNY'
    '''
    Chinese yuan.
    '''

    COP = 'COP'
    '''
    Colombian peso.
    '''

    COU = 'COU'
    '''
    Unidad de Valor Real.
    '''

    CRC = 'CRC'
    '''
    Costa Rican colon.
    '''

    CUC = 'CUC'
    '''
    Cuban convertible peso.
    '''

    CUP = 'CUP'
    '''
    Cuban peso.
    '''

    CVE = 'CVE'
    '''
    Cape Verde escudo.
    '''

    CZK = 'CZK'
    '''
    Czech koruna.
    '''

    DJF = 'DJF'
    '''
    Djiboutian franc.
    '''

    DKK = 'DKK'
    '''
    Danish krone.
    '''

    DOP = 'DOP'
    '''
    Dominican peso.
    '''

    DZD = 'DZD'
    '''
    Algerian dinar.
    '''

    EEK = 'EEK'
    '''
    Estonian kroon.
    '''

    EGP = 'EGP'
    '''
    Egyptian pound.
    '''

    ERN = 'ERN'
    '''
    Eritrean nakfa.
    '''

    ETB = 'ETB'
    '''
    Ethiopian birr.
    '''

    EUR = 'EUR'
    '''
    Euro.
    '''

    FJD = 'FJD'
    '''
    Fiji dollar.
    '''

    FKP = 'FKP'
    '''
    Falkland Islands pound.
    '''

    GBP = 'GBP'
    '''
    Pound sterling.
    '''

    GEL = 'GEL'
    '''
    Georgian lari.
    '''

    GHS = 'GHS'
    '''
    Ghanaian cedi.
    '''

    GIP = 'GIP'
    '''
    Gibraltar pound.
    '''

    GMD = 'GMD'
    '''
    Gambian dalasi.
    '''

    GNF = 'GNF'
    '''
    Guinean franc.
    '''

    GTQ = 'GTQ'
    '''
    Guatemalan quetzal.
    '''

    GYD = 'GYD'
    '''
    Guyanese dollar.
    '''

    HKD = 'HKD'
    '''
    Hong Kong dollar.
    '''

    HNL = 'HNL'
    '''
    Honduran lempira.
    '''

    HRK = 'HRK'
    '''
    Croatian kuna.
    '''

    HTG = 'HTG'
    '''
    Haitian gourde.
    '''

    HUF = 'HUF'
    '''
    Hungarian forint.
    '''

    IDR = 'IDR'
    '''
    Indonesian rupiah.
    '''

    ILS = 'ILS'
    '''
    Israeli new sheqel.
    '''

    INR = 'INR'
    '''
    Indian rupee.
    '''

    IQD = 'IQD'
    '''
    Iraqi dinar.
    '''

    IRR = 'IRR'
    '''
    Iranian rial.
    '''

    ISK = 'ISK'
    '''
    Icelandic kr�na.
    '''

    JMD = 'JMD'
    '''
    Jamaican dollar.
    '''

    JOD = 'JOD'
    '''
    Jordanian dinar.
    '''

    JPY = 'JPY'
    '''
    Japanese yen.
    '''

    KES = 'KES'
    '''
    Kenyan shilling.
    '''

    KGS = 'KGS'
    '''
    Kyrgyzstani som.
    '''

    KHR = 'KHR'
    '''
    Cambodian riel.
    '''

    KMF = 'KMF'
    '''
    Comoro franc.
    '''

    KPW = 'KPW'
    '''
    North Korean won.
    '''

    KRW = 'KRW'
    '''
    South Korean won.
    '''

    KWD = 'KWD'
    '''
    Kuwaiti dinar.
    '''

    KYD = 'KYD'
    '''
    Cayman Islands dollar.
    '''

    KZT = 'KZT'
    '''
    Kazakhstani tenge.
    '''

    LAK = 'LAK'
    '''
    Lao kip.
    '''

    LBP = 'LBP'
    '''
    Lebanese pound.
    '''

    LKR = 'LKR'
    '''
    Sri Lanka rupee.
    '''

    LRD = 'LRD'
    '''
    Liberian dollar.
    '''

    LSL = 'LSL'
    '''
    Lesotho loti.
    '''

    LTL = 'LTL'
    '''
    Lithuanian litas.
    '''

    LVL = 'LVL'
    '''
    Latvian lats.
    '''

    LYD = 'LYD'
    '''
    Libyan dinar.
    '''

    MAD = 'MAD'
    '''
    Moroccan dirham.
    '''

    MDL = 'MDL'
    '''
    Moldovan leu.
    '''

    MGA = 'MGA'
    '''
    Malagasy ariary.
    '''

    MKD = 'MKD'
    '''
    Macedonian denar.
    '''

    MMK = 'MMK'
    '''
    Myanma kyat.
    '''

    MNT = 'MNT'
    '''
    Mongolian tugrik.
    '''

    MOP = 'MOP'
    '''
    Macanese pataca.
    '''

    MRO = 'MRO'
    '''
    Mauritanian ouguiya.
    '''

    MUR = 'MUR'
    '''
    Mauritian rupee.
    '''

    MVR = 'MVR'
    '''
    Maldivian rufiyaa.
    '''

    MWK = 'MWK'
    '''
    Malawian kwacha.
    '''

    MXN = 'MXN'
    '''
    Mexican peso.
    '''

    MYR = 'MYR'
    '''
    Malaysian ringgit.
    '''

    MZN = 'MZN'
    '''
    Mozambican metical.
    '''

    NAD = 'NAD'
    '''
    Namibian dollar.
    '''

    NGN = 'NGN'
    '''
    Nigerian naira.
    '''

    NIO = 'NIO'
    '''
    Cordoba oro.
    '''

    NOK = 'NOK'
    '''
    Norwegian krone.
    '''

    NPR = 'NPR'
    '''
    Nepalese rupee.
    '''

    NZD = 'NZD'
    '''
    New Zealand dollar.
    '''

    OMR = 'OMR'
    '''
    Omani rial.
    '''

    PAB = 'PAB'
    '''
    Panamanian balboa.
    '''

    PEN = 'PEN'
    '''
    Peruvian nuevo sol.
    '''

    PGK = 'PGK'
    '''
    Papua New Guinean kina.
    '''

    PHP = 'PHP'
    '''
    Philippine peso.
    '''

    PKR = 'PKR'
    '''
    Pakistani rupee.
    '''

    PLN = 'PLN'
    '''
    Polish zloty.
    '''

    PYG = 'PYG'
    '''
    Paraguayan guaran�.
    '''

    QAR = 'QAR'
    '''
    Qatari rial.
    '''

    RON = 'RON'
    '''
    Romanian new leu.
    '''

    RSD = 'RSD'
    '''
    Serbian dinar.
    '''

    RUB = 'RUB'
    '''
    Russian rouble.
    '''

    RWF = 'RWF'
    '''
    Rwandan franc.
    '''

    SAR = 'SAR'
    '''
    Saudi riyal.
    '''

    SBD = 'SBD'
    '''
    Solomon Islands dollar.
    '''

    SCR = 'SCR'
    '''
    Seychelles rupee.
    '''

    SDG = 'SDG'
    '''
    Sudanese pound.
    '''

    SEK = 'SEK'
    '''
    Swedish krona/kronor.
    '''

    SGD = 'SGD'
    '''
    Singapore dollar.
    '''

    SHP = 'SHP'
    '''
    Saint Helena pound.
    '''

    SLL = 'SLL'
    '''
    Sierra Leonean leone.
    '''

    SOS = 'SOS'
    '''
    Somali shilling.
    '''

    SRD = 'SRD'
    '''
    Surinamese dollar.
    '''

    STD = 'STD'
    '''
    S�o Tom� and Pr�ncipe dobra.
    '''

    SYP = 'SYP'
    '''
    Syrian pound.
    '''

    SZL = 'SZL'
    '''
    Lilangeni.
    '''

    THB = 'THB'
    '''
    Thai baht.
    '''

    TJS = 'TJS'
    '''
    Tajikistani somoni.
    '''

    TMT = 'TMT'
    '''
    Turkmenistani manat.
    '''

    TND = 'TND'
    '''
    Tunisian dinar.
    '''

    TOP = 'TOP'
    '''
    Tongan pa'anga.
    '''

    TRY = 'TRY'
    '''
    Turkish lira.
    '''

    TTD = 'TTD'
    '''
    Trinidad and Tobago dollar.
    '''

    TWD = 'TWD'
    '''
    New Taiwan dollar.
    '''

    TZS = 'TZS'
    '''
    Tanzanian shilling.
    '''

    UAH = 'UAH'
    '''
    Ukrainian hryvnia.
    '''

    UGX = 'UGX'
    '''
    Ugandan shilling.
    '''

    USD = 'USD'
    '''
    United States dollar.
    '''

    UYU = 'UYU'
    '''
    Uruguayan peso.
    '''

    UZS = 'UZS'
    '''
    Uzbekistan som.
    '''

    VEF = 'VEF'
    '''
    Venezuelan bol�var fuerte.
    '''

    VND = 'VND'
    '''
    Vietnamese Dong.
    '''

    VUV = 'VUV'
    '''
    Vanuatu vatu.
    '''

    WST = 'WST'
    '''
    Samoan tala.
    '''

    XAF = 'XAF'
    '''
    CFA franc BEAC.
    '''

    XCD = 'XCD'
    '''
    East Caribbean dollar.
    '''

    XOF = 'XOF'
    '''
    CFA Franc BCEAO.
    '''

    XPF = 'XPF'
    '''
    CFP franc.
    '''

    YER = 'YER'
    '''
    Yemeni rial.
    '''

    ZAR = 'ZAR'
    '''
    South African rand.
    '''

    ZMK = 'ZMK'
    '''
    Zambian kwacha.
    '''

    ZWL = 'ZWL'
    '''
    Zimbabwe dollar.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class CurrentStatusSC(Enum):
    '''
    ACTIVE
    INACTIVE
    '''

    ACTIVE = 'ACTIVE'
    '''
    '''

    INACTIVE = 'INACTIVE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 CustomerBillingKind(Enum):
    '''
    Kind of customer billing.
    '''

    consolidatedEss = 'consolidatedEss'
    '''
    Consolidated bill from energy service supplier (ESS).
    '''

    consolidatedUdc = 'consolidatedUdc'
    '''
    Consolidated bill from utility distribution company (UDC).
    '''

    other = 'other'
    '''
    '''

    separateEssUdc = 'separateEssUdc'
    '''
    Separate bills from ESS and UDC.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCustomers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class CustomerKind(Enum):
    '''
    Kind of customer.
    '''

    commercialIndustrial = 'commercialIndustrial'
    '''
    Commercial industrial customer.
    '''

    energyServiceScheduler = 'energyServiceScheduler'
    '''
    Customer as energy service scheduler.
    '''

    energyServiceSupplier = 'energyServiceSupplier'
    '''
    Customer as energy service supplier.
    '''

    enterprise = 'enterprise'
    '''
    Enterprise customer
    '''

    internalUse = 'internalUse'
    '''
    Internal use customer.
    '''

    other = 'other'
    '''
    Other kind of customer.
    '''

    pumpingLoad = 'pumpingLoad'
    '''
    Pumping load customer.
    '''

    regionalOperator = 'regionalOperator'
    '''
    Regional Operator customer
    '''

    residential = 'residential'
    '''
    Residential customer.
    '''

    residentialAndCommercial = 'residentialAndCommercial'
    '''
    Residential and commercial customer.
    '''

    residentialAndStreetlight = 'residentialAndStreetlight'
    '''
    Residential and streetlight customer.
    '''

    residentialFarmService = 'residentialFarmService'
    '''
    Residential farm service customer.
    '''

    residentialStreetlightOthers = 'residentialStreetlightOthers'
    '''
    Residential streetlight or other related customer.
    '''

    subsidiary = 'subsidiary'
    '''
    Subsidiary customer
    '''

    windMachine = 'windMachine'
    '''
    Wind machine customer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class DAMMarketType(Enum):
    '''
    '''

    DAM = 'DAM'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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 HVDC 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 DERParameterKind(Enum):
    '''
    Specifies the DER parameters related to the unit of power, ramp rate and
    regulation flows.
    '''

    activePower = 'activePower'
    '''
    The amount of power being used, measured in Watts.
    '''

    apparentPower = 'apparentPower'
    '''
    The combination of reactive power and active power, and is the product
    of voltage and current without reference to the phase angle.
    '''

    decreasingRampRate = 'decreasingRampRate'
    '''
    An indication of whether the ramp rate associated with a curve is negative.
    '''

    highFilterBiDirectionalRegulation = 'highFilterBiDirectionalRegulation'
    '''
    AC voltage regulation of high frequency
    '''

    highFilterDownRegulation = 'highFilterDownRegulation'
    '''
    High Pass Frequency Regulation downwards.
    '''

    highFilterUpRegulation = 'highFilterUpRegulation'
    '''
    High Pass Frequency Regulation upwards.
    '''

    increasingRampRate = 'increasingRampRate'
    '''
    An indication of whether the ramp rate associated with a curve is positive.
    '''

    lowFilterBiDirectionalRegulation = 'lowFilterBiDirectionalRegulation'
    '''
    Used to filter out the sinosuidal disturbances to the grid.
    '''

    lowFilterDownRegulation = 'lowFilterDownRegulation'
    '''
    Low Pass Frequency Regulation downwards.
    '''

    lowFilterUpRegulation = 'lowFilterUpRegulation'
    '''
    Low Pass Frequency Regulation upwards.
    '''

    reactivePower = 'reactivePower'
    '''
    The measure of reactance, measured in Vars.
    '''

    voltage = 'voltage'
    '''
    The measure of difference in potential between two points, measured
    in Volts.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DERUnitSymbol(Enum):
    '''
    The units defined for usage in DER related contexts. This class is a subset
    plus possible additions of the UnitSymbol Class in the CIM Domain Package.
    '''

    A = 'A'
    '''
    Current in Ampere.
    '''

    Ah = 'Ah'
    '''
    Ampere-hours, Ampere-hours.
    '''

    As = 'As'
    '''
    Ampere seconds (A�s).
    '''

    Btu = 'Btu'
    '''
    Energy, British Thermal Unit.
    '''

    Hz = 'Hz'
    '''
    Frequency in Hertz (1/s).
    '''

    Q = 'Q'
    '''
    Quantity power, Q.
    '''

    Qh = 'Qh'
    '''
    Quantity energy, Qh.
    '''

    V = 'V'
    '''
    Electric potential in Volt (W/A).
    '''

    VA = 'VA'
    '''
    Apparent power in Volt Ampere (See also real power and reactive power.)
    '''

    VAh = 'VAh'
    '''
    Apparent energy in Volt Ampere hours.
    '''

    VAr = 'VAr'
    '''
    Reactive power in Volt Ampere reactive. The �reactive� or �imaginary�
    component of electrical power (VIsin(phi)). (See also real power and
    apparent power).
    Note: Different meter designs use different methods to arrive at their
    results. Some meters may compute reactive power as an arithmetic value,
    while others compute the value vectorially. The data consumer should
    determine the method in use and the suitability of the measurement
    for the intended purpose.
    '''

    VArh = 'VArh'
    '''
    Reactive energy in Volt Ampere reactive hours.
    '''

    VPerVA = 'VPerVA'
    '''
    Power factor, PF, the ratio of the active power to the apparent power.
    Note: The sign convention used for power factor will differ between
    IEC meters and EEI (ANSI) meters. It is assumed that the data consumers
    understand the type of meter being used and agree on the sign convention
    in use at any given utility.
    '''

    VPerVAr = 'VPerVAr'
    '''
    Power factor, PF, the ratio of the active power to the apparent power.
    Note: The sign convention used for power factor will differ between
    IEC meters and EEI (ANSI) meters. It is assumed that the data consumers
    understand the type of meter being used and agree on the sign convention
    in use at any given utility.
    '''

    Vh = 'Vh'
    '''
    Volt-hour, Volt hours.
    '''

    Vs = 'Vs'
    '''
    Volt second (Ws/A).
    '''

    W = 'W'
    '''
    Real power in Watt (J/s). Electrical power may have real and reactive
    components. The real portion of electrical power (I�R or VIcos(phi)),
    is expressed in Watts. (See also apparent power and reactive power.)
    '''

    WPerA = 'WPerA'
    '''
    Active power per current flow, watt per Ampere.
    '''

    WPers = 'WPers'
    '''
    Ramp rate in Watt per second.
    '''

    Wh = 'Wh'
    '''
    Real energy in Watt hours.
    '''

    deg = 'deg'
    '''
    Plane angle in degrees.
    '''

    degC = 'degC'
    '''
    Relative temperature in degrees Celsius.
    In the SI unit system the symbol is �C. Electric charge is measured
    in coulomb that has the unit symbol C. To distinguish degree Celsius
    form coulomb the symbol used in the UML is degC. Reason for not using
    �C is the special character � is difficult to manage in software.
    '''

    h = 'h'
    '''
    Time, hour = 60 min = 3600 s.
    '''

    min = 'min'
    '''
    Time, minute = 60 s.
    '''

    ohm = 'ohm'
    '''
    Electric resistance in ohm (V/A).
    '''

    ohmPerm = 'ohmPerm'
    '''
    Electric resistance per length in ohm per metre ((V/A)/m).
    '''

    ohmm = 'ohmm'
    '''
    resistivity, Ohm metre, (rho).
    '''

    onePerHz = 'onePerHz'
    '''
    Reciprocal of frequency (1/Hz).
    '''

    s = 's'
    '''
    Time in seconds.
    '''

    therm = 'therm'
    '''
    Energy, Therm.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DINStandardEditionKind(Enum):
    '''
    List of editions for DIN standards.
    '''

    _1985 = '_1985'
    '''
    1985 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DINStandardKind(Enum):
    '''
    List of DIN standards.
    '''

    _51353 = '_51353'
    '''
    Testing of insulating oils; detection of corrosive sulfur; silver strip
    test.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DemographicKind(Enum):
    '''
    Demographic kind of a land property.
    '''

    other = 'other'
    '''
    '''

    rural = 'rural'
    '''
    '''

    urban = 'urban'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DependencyKind(Enum):
    '''
    '''

    mutuallyExclusive = 'mutuallyExclusive'
    '''
    '''

    required = 'required'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DeploymentStateKind(Enum):
    '''
    Possible states of asset deployment.
    '''

    inService = 'inService'
    '''
    Asset in service in deployment location.
    '''

    installed = 'installed'
    '''
    Asset installed in deployment location.
    '''

    notYetInstalled = 'notYetInstalled'
    '''
    Asset not yet installed in deployment location.
    '''

    outOfService = 'outOfService'
    '''
    Asset out of service, but in deployment location.
    '''

    removed = 'removed'
    '''
    Asset removed from deployment location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DesignKind(Enum):
    '''
    Kind of design.
    '''

    asBuilt = 'asBuilt'
    '''
    '''

    estimated = 'estimated'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class DispatchAcceptStatus(Enum):
    '''
    '''

    ACCEPT = 'ACCEPT'
    '''
    '''

    CANNOT = 'CANNOT'
    '''
    '''

    DECLINE = 'DECLINE'
    '''
    '''

    NON_RESPONSE = 'NON_RESPONSE'
    '''
    '''

    OK = 'OK'
    '''
    '''

    PARTIAL = 'PARTIAL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DispatchResponseType(Enum):
    '''
    For example:
    NON_RESPONSE
    ACCEPT
    DECLINE
    PARTIAL
    '''

    ACCEPT = 'ACCEPT'
    '''
    '''

    DECLINE = 'DECLINE'
    '''
    '''

    NON_RESPONSE = 'NON_RESPONSE'
    '''
    '''

    PARTIAL = 'PARTIAL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class DispatchTransactionType(Enum):
    '''
    '''

    Purchase = 'Purchase'
    '''
    '''

    Sale = 'Sale'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class DobleStandardEditionKind(Enum):
    '''
    List of editions for Doble standards.
    '''

    none = 'none'
    '''
    No edition.
    '''

    unknown = 'unknown'
    '''
    Unknown edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DobleStandardKind(Enum):
    '''
    List of Doble standards.
    '''

    methanol = 'methanol'
    '''
    Doble test for methanol.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DroopSignalFeedbackKind(Enum):
    '''
    Governor droop signal feedback source.
    '''

    electricalPower = 'electricalPower'
    '''
    Electrical power feedback (connection indicated as 1 in the block diagrams
    of models, e.g. GovCT1, GovCT2).
    '''

    fuelValveStroke = 'fuelValveStroke'
    '''
    Fuel valve stroke feedback (true stroke) (connection indicated as 2
    in the block diagrams of model, e.g. GovCT1, GovCT2).
    '''

    governorOutput = 'governorOutput'
    '''
    Governor output feedback (requested stroke) (connection indicated as
    3 in the block diagrams of models, e.g. GovCT1, GovCT2).
    '''

    none = 'none'
    '''
    No droop signal feedback, is isochronous governor.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EPAStandardEditionKind(Enum):
    '''
    List of editions for EPA standards.
    '''

    A = 'A'
    '''
    Standard edition A.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EPAStandardKind(Enum):
    '''
    List of EPA standards.
    '''

    _8082 = '_8082'
    '''
    Polychlorinated Biphenyls (PCBs) by Gas Chromatography.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ERTConfidenceKind(Enum):
    '''
    The estimated restoration time (ERT) is the amount of time estimated to
    correct the outage and can have a confidence factor applied such as high
    or low confidence that the ERT will be accomplished. This confidence factor
    may be updated as needed during the outage period - just as the actual
    ERT can be updated.
    '''

    high = 'high'
    '''
    there is a high confidence that the ERT will be accomplished
    '''

    low = 'low'
    '''
    there is a low confidence that the ERT will be accomplished.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 EndDeviceFunctionKind(Enum):
    '''
    Kind of end device function.
    '''

    autonomousDst = 'autonomousDst'
    '''
    Autonomous application of daylight saving time (DST).
    '''

    demandResponse = 'demandResponse'
    '''
    Demand response functions.
    '''

    electricMetering = 'electricMetering'
    '''
    Electricity metering.
    '''

    gasMetering = 'gasMetering'
    '''
    Gas metering.
    '''

    metrology = 'metrology'
    '''
    Presentation of metered values to a user or another system (always
    a function of a meter, but might not be supported by a load control
    unit).
    '''

    onRequestRead = 'onRequestRead'
    '''
    On-request reads.
    '''

    outageHistory = 'outageHistory'
    '''
    Reporting historical power interruption data.
    '''

    relaysProgramming = 'relaysProgramming'
    '''
    Support for one or more relays that may be programmable in the meter
    (and tied to TOU, time pulse, load control or other functions).
    '''

    reverseFlow = 'reverseFlow'
    '''
    Detection and monitoring of reverse flow.
    '''

    waterMetering = 'waterMetering'
    '''
    Water metering.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EnergyPriceIndexType(Enum):
    '''
    For example:
    WHOLESALE
    RETAIL
    BOTH
    '''

    BOTH = 'BOTH'
    '''
    '''

    RETAIL = 'RETAIL'
    '''
    '''

    WHOLESALE = 'WHOLESALE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EnergyProductType(Enum):
    '''
    Energy product type.
    '''

    DYN = 'DYN'
    '''
    Dynamic
    '''

    FIRM = 'FIRM'
    '''
    Firm
    '''

    NFRM = 'NFRM'
    '''
    Non Firm
    '''

    WHL = 'WHL'
    '''
    Wheeling
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EnergyTransactionType(Enum):
    '''
    Defines the state of a transaction.
    '''

    approve = 'approve'
    '''
    Approve
    '''

    deny = 'deny'
    '''
    Deny
    '''

    study = 'study'
    '''
    Study
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class EnergyTypeCode(Enum):
    '''
    Valid Enumerations:
    1) DASE Day Ahead Scheduled Energy;
    2) DSSE Day Ahead Incremental Self Schedule Energy;
    3) DABE Day Ahead Incremental Energy Bid Awarded Energy;
    4) OE Optimal Energy;
    5) HASE Hour ahead pre-dispatched schedule energy;
    6) SRE Standard Ramping Energy;
    7) RED Ramping Energy Deviation;
    8) EDE Exceptional Dispatch energy;
    9) RMRE RMR Energy;
    10) MSSLFE MSSLF Energy;
    11) RE Residual Energy;
    12) MLE Minimum Load Energy;
    13) SE SLIC Energy;
    14) RTSSE Real time self scheduled energy;
    15) DMLE Day ahead minimum load energy;
    16) PE Pumping Energy;
    17) TEE Total Expected Energy;
    18) DAPE - Day-Ahead Pumping Energy;
    '''

    DABE = 'DABE'
    '''
    '''

    DAPE = 'DAPE'
    '''
    '''

    DASE = 'DASE'
    '''
    '''

    DMLE = 'DMLE'
    '''
    '''

    DSSE = 'DSSE'
    '''
    '''

    EDE = 'EDE'
    '''
    '''

    HASE = 'HASE'
    '''
    '''

    MLE = 'MLE'
    '''
    '''

    MSSLFE = 'MSSLFE'
    '''
    '''

    OE = 'OE'
    '''
    '''

    PE = 'PE'
    '''
    '''

    RE = 'RE'
    '''
    '''

    RED = 'RED'
    '''
    '''

    RMRE = 'RMRE'
    '''
    '''

    RTSSE = 'RTSSE'
    '''
    '''

    SE = 'SE'
    '''
    '''

    SRE = 'SRE'
    '''
    '''

    TEE = 'TEE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EnergyTypeKind(Enum):
    '''
    '''

    ConsumerLoad = 'ConsumerLoad'
    '''
    '''

    IndustrialLoad = 'IndustrialLoad'
    '''
    '''

    Other = 'Other'
    '''
    '''

    PVpark = 'PVpark'
    '''
    '''

    WindPark = 'WindPark'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnergyArea'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EnvironmentalDiscreteKind(Enum):
    '''
    Discrete (integer) measuring an environmental condition.
    '''

    cloudCover = 'cloudCover'
    '''
    Cloud cover in octa.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class EquipmentStatusType(Enum):
    '''
    Status of equipment.
    '''

    In = 'In'
    '''
    Equipment is in.
    '''

    Out = 'Out'
    '''
    Equipment is out.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ErpAccountKind(Enum):
    '''
    Kind of ERP account.
    '''

    estimate = 'estimate'
    '''
    '''

    normal = 'normal'
    '''
    '''

    reversal = 'reversal'
    '''
    '''

    statistical = 'statistical'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ErpInvoiceKind(Enum):
    '''
    Kind of ERP invoice.
    '''

    purchase = 'purchase'
    '''
    '''

    sale = 'sale'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ErpInvoiceLineItemKind(Enum):
    '''
    Kind of invoice line item.
    '''

    initial = 'initial'
    '''
    '''

    other = 'other'
    '''
    '''

    recalculation = 'recalculation'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfERPSupport'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExcIEEEST1AUELselectorKind(Enum):
    '''
    Types of connections for the UEL input used in ExcIEEEST1A.
    '''

    ignoreUELsignal = 'ignoreUELsignal'
    '''
    Ignore UEL signal.
    '''

    inputAddedToErrorSignal = 'inputAddedToErrorSignal'
    '''
    UEL input added to error signal.
    '''

    inputHVgateErrorSignal = 'inputHVgateErrorSignal'
    '''
    UEL input HV gate with error signal.
    '''

    inputHVgateVoltageOutput = 'inputHVgateVoltageOutput'
    '''
    UEL input HV gate with voltage regulator output.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExcREXSFeedbackSignalKind(Enum):
    '''
    Types of rate feedback signals.
    '''

    fieldCurrent = 'fieldCurrent'
    '''
    The exciter field current is used.
    '''

    fieldVoltage = 'fieldVoltage'
    '''
    The voltage regulator output voltage is used. It is the same as exciter
    field voltage.
    '''

    outputVoltage = 'outputVoltage'
    '''
    The output voltage of the exciter is used.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExcST6BOELselectorKind(Enum):
    '''
    Types of connections for the OEL input used for static excitation systems
    type 6B.
    '''

    afterUEL = 'afterUEL'
    '''
    The connection is after UEL. Corresponds to <i>OELin</i> = 2 on the
    ExcST6B diagram.
    '''

    beforeUEL = 'beforeUEL'
    '''
    The connection is before UEL. Corresponds to <i>OELin</i> = 1 on the
    ExcST6B diagram.
    '''

    noOELinput = 'noOELinput'
    '''
    No OEL input is used. Corresponds to <i>OELin</i> not = 1 and not =
    2 on the ExcST6B diagram. Original ExcST6B model would have called
    this <i>OELin</i> = 0.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExcST7BOELselectorKind(Enum):
    '''
    Types of connections for the OEL input used for static excitation systems
    type 7B.
    '''

    addVref = 'addVref'
    '''
    The signal is added to <i>Vref</i>. Corresponds to <i>OELin</i> = 1
    on the ExcST7B diagram.
    '''

    inputLVgate = 'inputLVgate'
    '''
    The signal is connected into the input <i>LVGate</i>. Corresponds to
    <i>OELin</i> = 2 on the ExcST7B diagram.
    '''

    noOELinput = 'noOELinput'
    '''
    No OEL input is used. Corresponds to <i>OELin</i> not = 1 and not =
    2 and not = 3 on the ExcST7B diagram. Original ExcST7B model would
    have called this <i>OELin</i> = 0.
    '''

    outputLVgate = 'outputLVgate'
    '''
    The signal is connected into the output <i>LVGate</i>. Corresponds
    to <i>OELin</i> = 3 on the ExcST7B diagram.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExcST7BUELselectorKind(Enum):
    '''
    Types of connections for the UEL input used for static excitation systems
    type 7B.
    '''

    addVref = 'addVref'
    '''
    The signal is added to <i>Vref</i>. Corresponds to <i>UELin</i> = 1
    on the ExcST7B diagram.
    '''

    inputHVgate = 'inputHVgate'
    '''
    The signal is connected into the input <i>HVGate</i>. Corresponds to
    <i>UELin</i> = 2 on the ExcST7B diagram.
    '''

    noUELinput = 'noUELinput'
    '''
    No UEL input is used. Corresponds to <i>UELin</i> not = 1 and not =
    2 and not = 3 on the ExcST7B diagram. Original ExcST7B model would
    have called this <i>UELin</i> = 0.
    '''

    outputHVgate = 'outputHVgate'
    '''
    The signal is connected into the output <i>HVGate</i>. Corresponds
    to <i>UELin</i> = 3 on the ExcST7B diagram.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ExcitationSystemDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ExecutionType(Enum):
    '''
    Execution types of Market Runs.
    '''

    DA = 'DA'
    '''
    Day Ahead
    '''

    HASP = 'HASP'
    '''
    Real TIme Hour Ahead Execution
    '''

    RTD = 'RTD'
    '''
    Real Time Dispatch
    '''

    RTPD = 'RTPD'
    '''
    Real Time Pre-dispatch
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FACTSDeviceKind(Enum):
    '''
    Kind of FACTS device.
    '''

    statcom = 'statcom'
    '''
    Static synchronous compensator.
    '''

    svc = 'svc'
    '''
    Static VAr compensator.
    '''

    tcpar = 'tcpar'
    '''
    Thyristor-controlled phase-angle regulator.
    '''

    tcsc = 'tcsc'
    '''
    Thyristor-controlled series capacitor.
    '''

    tcvl = 'tcvl'
    '''
    Thyristor-controlled voltage limiter.
    '''

    tsbr = 'tsbr'
    '''
    Thyristor-switched braking resistor.
    '''

    tssc = 'tssc'
    '''
    Thyristor-switched series capacitor.
    '''

    upfc = 'upfc'
    '''
    Unified power flow controller.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FScale(Enum):
    '''
    Fujita scale (referred to as EF-scale starting in 2007) for tornado damage.
    A set of wind estimates (not measurements) based on damage. It uses three-second
    gusts estimated at the point of damage based on a judgment of 8 levels
    of damage to 28 indicators. These estimates vary with height and exposure.
    The 3 second gust is not the same wind as in standard surface observations.
    Enumerations based on NOAA conventions.
    '''

    five = 'five'
    '''
    Over 200 mph 3-second gust.
    '''

    four = 'four'
    '''
    166-200 mph 3-second gust.
    '''

    minusNine = 'minusNine'
    '''
    Unknown.
    '''

    one = 'one'
    '''
    86-110 mph 3-second gust.
    '''

    three = 'three'
    '''
    136-165 mph 3-second gust.
    '''

    two = 'two'
    '''
    111-135 mph 3-second gust.
    '''

    zero = 'zero'
    '''
    65-85 mph 3-second gust.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class FacilityKind(Enum):
    '''
    Types of facilities at which an asset can be deployed.
    '''

    distributionPoleTop = 'distributionPoleTop'
    '''
    Distribution pole top.
    '''

    substationDistribution = 'substationDistribution'
    '''
    Distribution substation.
    '''

    substationFossilPlant = 'substationFossilPlant'
    '''
    Fossil plant substation.
    '''

    substationHydroPlant = 'substationHydroPlant'
    '''
    Hydro plant substation.
    '''

    substationNuclearPlant = 'substationNuclearPlant'
    '''
    Nuclear plant substation.
    '''

    substationSubTransmission = 'substationSubTransmission'
    '''
    Subtransmission substation.
    '''

    substationTransmission = 'substationTransmission'
    '''
    Transmission substation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FailureIsolationMethodKind(Enum):
    '''
    How the failure has been isolated.
    '''

    breakerOperation = 'breakerOperation'
    '''
    Isolated via breaker operation.
    '''

    burnedInTheClear = 'burnedInTheClear'
    '''
    Isolated by equipment burning in the clear.
    '''

    fuse = 'fuse'
    '''
    Isolated by fuse.
    '''

    manuallyIsolated = 'manuallyIsolated'
    '''
    Isolated by manual operation.
    '''

    other = 'other'
    '''
    Isolated by other action.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FaultIndicatorResetKind(Enum):
    '''
    Kind of resetting the fault indicators.
    '''

    automatic = 'automatic'
    '''
    '''

    manual = 'manual'
    '''
    '''

    other = 'other'
    '''
    '''

    remote = 'remote'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FlagTypeRMR(Enum):
    '''
    Indicates whether the unit is RMR and it's condition type, for example:
    N' - not an RMR unit
    '1' - RMR Condition 1 unit
    '2' - RMR Condition 2 unit
    '''

    _1 = '_1'
    '''
    '1' - RMR Condition 1 unit
    '''

    _2 = '_2'
    '''
    '2' - RMR Condition 2 unit
    '''

    N = 'N'
    '''
    'N' - not an RMR unit
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FlowDirectionKind(Enum):
    '''
    Kind of flow direction for reading/measured values proper to some commodities
    such as, for example, energy, power, demand.
    '''

    forward = 'forward'
    '''
    "Delivered," or "Imported" as defined 61968-2.
    Forward Active Energy is a positive kWh value as one would naturally
    expect to find as energy is supplied by the utility and consumed at
    the service.
    Forward Reactive Energy is a positive VArh value as one would naturally
    expect to find in the presence of inductive loading.
    In polyphase metering, the forward energy register is incremented when
    the sum of the phase energies is greater than zero:
    <img src="HTS_1.PNG" width="209" height="16" border="0" alt="graphic"/>
    '''

    lagging = 'lagging'
    '''
    Typically used to describe that a power factor is lagging the reference
    value.
    Note 1: When used to describe VA, �lagging� describes a form of measurement
    where reactive power is considered in all four quadrants, but real
    power is considered only in quadrants I and IV.
    Note 2: When used to describe power factor, the term �Lagging� implies
    that the PF is negative. The term �lagging� in this case takes the
    place of the negative sign. If a signed PF value is to be passed by
    the data producer, then the direction of flow enumeration zero (none)
    should be used in order to avoid the possibility of creating an expression
    that employs a double negative. The data consumer should be able to
    tell from the sign of the data if the PF is leading or lagging. This
    principle is analogous to the concept that �Reverse� energy is an implied
    negative value, and to publish a negative reverse value would be ambiguous.
    Note 3: Lagging power factors typically indicate inductive loading.
    '''

    leading = 'leading'
    '''
    Typically used to describe that a power factor is leading the reference
    value.
    Note: Leading power factors typically indicate capacitive loading.
    '''

    net = 'net'
    '''
    |Forward| - |Reverse|, See 61968-2.
    Note: In some systems, the value passed as a �net� value could become
    negative. In other systems the value passed as a �net� value is always
    a positive number, and rolls-over and rolls-under as needed.
    '''

    none = 'none'
    '''
    Not Applicable (N/A)
    '''

    q1minusQ4 = 'q1minusQ4'
    '''
    Q1 minus Q4
    '''

    q1plusQ2 = 'q1plusQ2'
    '''
    Reactive positive quadrants. (The term �lagging� is preferred.)
    '''

    q1plusQ3 = 'q1plusQ3'
    '''
    Quadrants 1 and 3
    '''

    q1plusQ4 = 'q1plusQ4'
    '''
    Quadrants 1 and 4 usually represent forward active energy
    '''

    q2minusQ3 = 'q2minusQ3'
    '''
    Q2 minus Q3
    '''

    q2plusQ3 = 'q2plusQ3'
    '''
    Quadrants 2 and 3 usually represent reverse active energy
    '''

    q2plusQ4 = 'q2plusQ4'
    '''
    Quadrants 2 and 4
    '''

    q3minusQ2 = 'q3minusQ2'
    '''
    Q3 minus Q2
    '''

    q3plusQ4 = 'q3plusQ4'
    '''
    Reactive negative quadrants. (The term �leading� is preferred.)
    '''

    quadrant1 = 'quadrant1'
    '''
    Q1 only
    '''

    quadrant2 = 'quadrant2'
    '''
    Q2 only
    '''

    quadrant3 = 'quadrant3'
    '''
    Q3 only
    '''

    quadrant4 = 'quadrant4'
    '''
    Q4 only
    '''

    reverse = 'reverse'
    '''
    Reverse Active Energy is equivalent to "Received," or "Exported" as
    defined in 61968-2.
    Reverse Active Energy is a positive kWh value as one would expect to
    find when energy is backfed by the service onto the utility network.
    Reverse Reactive Energy is a positive VArh value as one would expect
    to find in the presence of capacitive loading and a leading Power Factor.
    In polyphase metering, the reverse energy register is incremented when
    the sum of the phase energies is less than zero:
    <img src="HTS_1.PNG" width="209" height="16" border="0" alt="graphic"/>
    Note: The value passed as a reverse value is always a positive value.
    It is understood by the label �reverse� that it represents negative
    flow.
    '''

    total = 'total'
    '''
    |Forward| + |Reverse|, See 61968-2.
    The sum of the commodity in all quadrants Q1+Q2+Q3+Q4.
    In polyphase metering, the total energy register is incremented when
    the absolute value of the sum of the phase energies is greater than
    zero:
    <img src="HTS_1.PNG" width="217" height="16" border="0" alt="graphic"/>
    '''

    totalByPhase = 'totalByPhase'
    '''
    In polyphase metering, the total by phase energy register is incremented
    when the sum of the absolute values of the phase energies is greater
    than zero:
    <img src="HTS_1.PNG" width="234" height="16" border="0" alt="graphic"/>
    In single phase metering, the formulas for �Total� and �Total by phase�
    collapse to the same expression. For communication purposes however,
    the �Total� enumeration should be used with single phase meter data.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FlowDirectionType(Enum):
    '''
    Specifies the direction of energy flow in the flowgate.
    '''

    Forward = 'Forward'
    '''
    Forward direction.
    '''

    Reverse = 'Reverse'
    '''
    Reverse direction.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FrancisGovernorControlKind(Enum):
    '''
    Governor control flag for Francis hydro model.
    '''

    electromechanicalElectrohydraulic = 'electromechanicalElectrohydraulic'
    '''
    Electromechanical and electrohydraulic regulator (Cflag=3).
    '''

    mechanicHydraulicTransientFeedback = 'mechanicHydraulicTransientFeedback'
    '''
    Mechanic-hydraulic regulator with transient feedback (Cflag=2).
    '''

    mechanicHydrolicTachoAccelerator = 'mechanicHydrolicTachoAccelerator'
    '''
    Mechanic-hydraulic regulator with tacho-accelerometer (Cflag = 1).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @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'
    '''
    '''

    GAS = 'GAS'
    '''
    '''

    GEOT = 'GEOT'
    '''
    GeoThermal
    '''

    HRCV = 'HRCV'
    '''
    '''

    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://iec.ch/TC57/CIM100#'
    @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.
    '''

    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://iec.ch/TC57/CIM100#'
    @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 GateLogicKind(Enum):
    '''
    Define the different logical operations.
    '''

    _and = '_and'
    '''
    A logical AND operation. True when all input are true.
    '''

    nand = 'nand'
    '''
    A logical NAND operation. False when all input are true.
    '''

    nor = 'nor'
    '''
    A logical NOR operation. False when one or more input are true.
    '''

    _not = '_not'
    '''
    A logical NOT operation. Only one input and true input will give false
    out and false in will give true out. An inverter.
    '''

    _or = '_or'
    '''
    A logical OR operation. True when one or more input are true.
    '''

    xnor = 'xnor'
    '''
    A logical XNOR operation. The function is the inverse of the exclusive
    OR (XOR) gate. All input false or true will give true. Otherwise false.
    '''

    xor = 'xor'
    '''
    A logical XOR operation. All input false or true will give false. Otherwise
    true.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 GenericNonLinearLoadModelKind(Enum):
    '''
    Type of generic non-linear load model.
    '''

    exponentialRecovery = 'exponentialRecovery'
    '''
    Exponential recovery model.
    '''

    loadAdaptive = 'loadAdaptive'
    '''
    Load adaptive model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GeosphericAnalogKind(Enum):
    '''
    Kinds of analogs (floats) measuring a geospheric condition.
    '''

    lightningDensity = 'lightningDensity'
    '''
    Flash rate in strikes/hour/km<sup>2</sup>.
    '''

    seismicEastWest = 'seismicEastWest'
    '''
    '''

    seismicNorthSouth = 'seismicNorthSouth'
    '''
    '''

    seismicVertical = 'seismicVertical'
    '''
    '''

    snowPackDepth = 'snowPackDepth'
    '''
    '''

    temperature = 'temperature'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class GovHydro4ModelKind(Enum):
    '''
    Possible types of GovHydro4 models.
    '''

    francisPelton = 'francisPelton'
    '''
    Francis or Pelton model.
    '''

    kaplan = 'kaplan'
    '''
    Kaplan model.
    '''

    simple = 'simple'
    '''
    Simple model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'TurbineGovernorDynamics'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 HydrosphericAnalogKind(Enum):
    '''
    Kinds of analogs (floats) measuring a hydrospheric condition.
    '''

    floodLevel = 'floodLevel'
    '''
    '''

    stormSurgeHeight = 'stormSurgeHeight'
    '''
    '''

    surfaceTemperature = 'surfaceTemperature'
    '''
    '''

    waterTemperature = 'waterTemperature'
    '''
    '''

    waveHeight = 'waveHeight'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ICCPAccessPrivilegeKind(Enum):
    '''
    Provides access privilege information regarding an ICCP point.
    '''

    readOnly = 'readOnly'
    '''
    Indicates that the remote is not allowed to change the value of the
    ICCPPoint.
    '''

    readWrite = 'readWrite'
    '''
    Indicates that the remote can not only get the value, but may also
    change the value of the ICCP Point.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ICCPPointKind(Enum):
    '''
    The kind of ICCP point that is to be conveyed.
    '''

    discrete = 'discrete'
    '''
    Indicates that an ICCP discrete type is to be conveyed.
    '''

    packedProtectionEvent = 'packedProtectionEvent'
    '''
    Indicates that an ICCP packed Protection Event is to be conveyed.
    '''

    real = 'real'
    '''
    Indicates that an ICCP real type is to be conveyed.
    '''

    singleProtectionEvent = 'singleProtectionEvent'
    '''
    Indicates that an ICCP single Protection Event type is to be conveyed.
    '''

    state = 'state'
    '''
    Indicates that an ICCP state type is to be conveyed.
    '''

    stateSupplemental = 'stateSupplemental'
    '''
    Indicates that an ICCP state supplemental type is to be conveyed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ICCPQualityKind(Enum):
    '''
    Indicates the type of quality information that is to be exchanged. For
    protection events the value shall be "none".
    '''

    extended = 'extended'
    '''
    Indicates that only extended information is to be provided.
    '''

    extendedwithQualityTime = 'extendedwithQualityTime'
    '''
    Provides quality, timestamp, and extended information.
    '''

    none = 'none'
    '''
    Indicates that no quality is conveyed with the ICCP point.
    '''

    qualityAndTime = 'qualityAndTime'
    '''
    Indicates that quality and a timestamp are to be provided.
    '''

    qualityOnly = 'qualityOnly'
    '''
    Indicates that only quality is to be provided.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ICCPScopeKind(Enum):
    '''
    Specifies the control centre scope.
    '''

    iCC = 'iCC'
    '''
    Inter-Control Centre scope � available for exchange between the control
    centres in the bilateral table.
    '''

    vCC = 'vCC'
    '''
    Virtual Control Centre Scope � globally available.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class IECStandardEditionKind(Enum):
    '''
    List of editions for IEC standards.
    '''

    _1963 = '_1963'
    '''
    1963 edition.
    '''

    _1967 = '_1967'
    '''
    1967 edition.
    '''

    _1973 = '_1973'
    '''
    1973 edition.
    '''

    _1974 = '_1974'
    '''
    1974 edition.
    '''

    _1977 = '_1977'
    '''
    1977 edition.
    '''

    _1978 = '_1978'
    '''
    1978 edition.
    '''

    _1979 = '_1979'
    '''
    1979 edition.
    '''

    _1985 = '_1985'
    '''
    1985 edition.
    '''

    _1989 = '_1989'
    '''
    1989 edition.
    '''

    _1992 = '_1992'
    '''
    1992 edition.
    '''

    _1992AMD12004 = '_1992AMD12004'
    '''
    1992/AMD1:2004 edition.
    '''

    _1992COR11992 = '_1992COR11992'
    '''
    1992/COR1:1992 edition.
    '''

    _1993 = '_1993'
    '''
    1993 edition.
    '''

    _1995 = '_1995'
    '''
    1995 edition.
    '''

    _1997 = '_1997'
    '''
    1997 edition.
    '''

    _1998 = '_1998'
    '''
    1998 edition.
    '''

    _2004 = '_2004'
    '''
    2004 edition.
    '''

    _2004AMD12007 = '_2004AMD12007'
    '''
    2004/AMD1:2007 edition.
    '''

    _2004AMD12007CSV = '_2004AMD12007CSV'
    '''
    2004/AMD1:2007CSV edition.
    '''

    _2005 = '_2005'
    '''
    2005 edition.
    '''

    _2007 = '_2007'
    '''
    2007 edition.
    '''

    _2008 = '_2008'
    '''
    2008 edition.
    '''

    _2010 = '_2010'
    '''
    2010 edition.
    '''

    _2011 = '_2011'
    '''
    2011 edition.
    '''

    _2012 = '_2012'
    '''
    2012 edition.
    '''

    _2013 = '_2013'
    '''
    2013 edition.
    '''

    _2013COR2013 = '_2013COR2013'
    '''
    2013/COR:2013 edition.
    '''

    none = 'none'
    '''
    No edition.
    '''

    unknown = 'unknown'
    '''
    Unknown edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 IECStandardKind(Enum):
    '''
    List of IEC standards.
    '''

    _60156 = '_60156'
    '''
    Insulating liquids - Determination of the breakdown voltage at power
    frequency - Test method.
    '''

    _602431 = '_602431'
    '''
    Electric strength of insulating materials - Test methods - Part 1:
    Tests at power frequencies.
    '''

    _602432 = '_602432'
    '''
    Electric strength of insulating materials - Test methods - Part 2:
    Additional requirements for tests using direct voltage.
    '''

    _602433 = '_602433'
    '''
    Electric strength of insulating materials - Test methods - Part 3:
    Additional requirements for 1,2/50 �s impulse tests.
    '''

    _60247 = '_60247'
    '''
    Insulating liquids - Measurement of relative permittivity, dielectric
    dissipation factor (tan d) and d.c. resistivity -or-
    Measurement of relative permittivity, dielectric dissipation factor
    and d.c. resistivity of insulating liquids -or-
    Recommended test cells for measuring the resistivity of insulating
    liquids and methods of cleaning the cells.
    '''

    _60422 = '_60422'
    '''
    Mineral insulating oils in electrical equipment - Supervision and maintenance
    guidance.
    '''

    _60450 = '_60450'
    '''
    Measurement of the average viscometric degree of polymerization of
    new and aged cellulosic electrically insulating materials.
    '''

    _60567 = '_60567'
    '''
    Oil-filled electrical equipment - Sampling of gases and analysis of
    free and dissolved gasses - Guidance -or-
    Oil-filled electrical equipment - Sampling of gases and of oil for
    analysis of free and dissolved gases - Guidance -or-
    Guide for the sampling of gases and of oil form oil-filled electrical
    equipment and for the analysis of free and dissolved gases.
    '''

    _60666 = '_60666'
    '''
    Detection and determination of specified additives in mineral insulating
    oils -or-
    Detection and determination of specified anti-oxidant additives in
    insulating oils.
    '''

    _60814 = '_60814'
    '''
    Insulating liquids - Oil-impregnated paper and pressboard - Determination
    of water by automatic coulometric Karl Fischer titration.
    '''

    _60970 = '_60970'
    '''
    Insulating liquids - Methods for counting and sizing particles -or-
    Methods for counting and sizing particles in insulating liquids.
    '''

    _60997 = '_60997'
    '''
    Determination of polychlorinated biphenyls (PCBs) in mineral insulating
    oils by packed column gas chromatography (GC).
    Withdrawn.
    '''

    _61125 = '_61125'
    '''
    Unused hydrocarbon based insulating liquids - Test methods for evaluating
    the oxidation stability.
    '''

    _61198 = '_61198'
    '''
    Mineral insulating oils - Methods for the determination of 2-furfural
    and related compounds.
    '''

    _61619 = '_61619'
    '''
    Insulating liquids - Contamination by polychlorinated biphenyls (PCBs)
    - Method of determination by capillary column gas chromatography.
    '''

    _61868 = '_61868'
    '''
    Mineral insulating oils � Determination of kinematic viscosity at very
    low temperatures.
    '''

    _62535 = '_62535'
    '''
    Insulating liquids � Test method for detection of potentially corrosive
    sulphur in used and unused insulating oil.
    '''

    _626971 = '_626971'
    '''
    Test methods for quantitative determination of corrosive sulfur compounds
    in unused and used insulating liquids - Part 1: Test method for quantitative
    determination of dibenzyldisulfide (DBDS).
    '''

    _62770 = '_62770'
    '''
    Fluids for electrotechnical applications � Unused natural esters for
    transformers and similar electrical equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 IEEEStandardEditionKind(Enum):
    '''
    List of editions for IEEE standards.
    '''

    _1978 = '_1978'
    '''
    1978 standard edition.
    '''

    _1995 = '_1995'
    '''
    1995 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 IEEEStandardKind(Enum):
    '''
    List of IEEE standards.
    '''

    _62 = '_62'
    '''
    IEEE Guide for Diagnostic Field Testing of Electric Power Apparatus
    - Part 1: Oil Filled Power Transformers, Regulators, and Reactors -or-
    IEEE Guide for Field Testing Power Apparatus Insulation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 IPAddressKind(Enum):
    '''
    Indicates if the addressing of the IPAccessPoint, gateway, and subnet are
    per IPv4 or IPv6.
    '''

    iPv4 = 'iPv4'
    '''
    Indicates that IPv4 dotted decimal notation is in use.
    '''

    iPv6 = 'iPv6'
    '''
    Indicates that an IPv6 dotted decimal is in use.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'ICCPConfiguration'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ISOStandardEditionKind(Enum):
    '''
    List of editions for ISO standards.
    '''

    _1973 = '_1973'
    '''
    1973 standard edition.
    '''

    _1974 = '_1974'
    '''
    1974 standard edition.
    '''

    _1976 = '_1976'
    '''
    1976 standard edition.
    '''

    _1983 = '_1983'
    '''
    1983 standard edition.
    '''

    _1985 = '_1985'
    '''
    1985 standard edition.
    '''

    _1988 = '_1988'
    '''
    1988 standard edition.
    '''

    _1992 = '_1992'
    '''
    1992 standard edition.
    '''

    _1993 = '_1993'
    '''
    1993 standard edition.
    '''

    _1994 = '_1994'
    '''
    1994 standard edition.
    '''

    _1994Cor11997 = '_1994Cor11997'
    '''
    1994/Cor1:1997 standard edition.
    '''

    _1998 = '_1998'
    '''
    1998 standard edition.
    '''

    _2000 = '_2000'
    '''
    2000 standard edition.
    '''

    _2002 = '_2002'
    '''
    2002 standard edition.
    '''

    _2005 = '_2005'
    '''
    2005 standard edition.
    '''

    _2008 = '_2008'
    '''
    2008 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ISOStandardKind(Enum):
    '''
    List of ISO standards.
    '''

    _1924 = '_1924'
    '''
    Paper and board -- Determination of tensile strength.
    '''

    _19241 = '_19241'
    '''
    Paper and board -- Determination of tensile properties -- Part 1: Constant
    rate of loading method.
    '''

    _19242 = '_19242'
    '''
    Paper and board -- Determination of tensile properties -- Part 2: Constant
    rate of elongation method (20 mm/min) -or-
    Paper and board -- Determination of tensile properties -- Part 2: Constant
    rate of elongation method.
    '''

    _19243 = '_19243'
    '''
    Paper and board -- Determination of tensile properties -- Part 3: Constant
    rate of elongation method (100 mm/min).
    '''

    _2592 = '_2592'
    '''
    Determination of flash and fire points -- Cleveland open cup method
    (copied directly from ASTM D92).
    '''

    _2719 = '_2719'
    '''
    Determination of flash point -- Pensky-Martens closed cup method (copied
    directly from ASTM D93) -or-
    Petroleum products and lubricants -- Determination of flash point --
    Pensky-Martens closed cup method (copied directly from ASTM D93) -or-
    Petroleum products -- Determination of flash point -- Pensky-Martens
    closed cup method (copied directly from ASTM D93).
    '''

    _3016 = '_3016'
    '''
    Petroleum products -- Determination of pour point -or-
    Petroleum oils -- Determination of pour point.
    '''

    _3104 = '_3104'
    '''
    Petroleum products -- Transparent and opaque liquids -- Determination
    of kinematic viscosity and calculation of dynamic viscosity.
    '''

    _3675 = '_3675'
    '''
    Crude petroleum and liquid petroleum products -- Laboratory determination
    of density -- Hydrometer method -or-
    Crude petroleum and liquid petroleum products -- Laboratory determination
    of density or relative density -- Hydrometer method.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 IfdBaseKind(Enum):
    '''
    Excitation base system mode.
    '''

    ifag = 'ifag'
    '''
    Air gap line mode.
    '''

    iffl = 'iffl'
    '''
    Full load system mode.
    '''

    ifnl = 'ifnl'
    '''
    No load system with saturation mode.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class InUseStateKind(Enum):
    '''
    Possible 'in use' states that an asset can be in.
    '''

    inUse = 'inUse'
    '''
    Asset is deployed (in use) or is being put into use.
    '''

    notReadyForUse = 'notReadyForUse'
    '''
    Asset is not ready to be put into use.
    '''

    readyForUse = 'readyForUse'
    '''
    Asset is ready to be put into use.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 InputSignalKind(Enum):
    '''
    Types of input signals. In dynamics modelling, commonly represented by
    the <i>j</i> parameter.
    '''

    branchCurrent = 'branchCurrent'
    '''
    Input signal is amplitude of remote branch current.
    '''

    busFrequency = 'busFrequency'
    '''
    Input signal is bus voltage fr<font color="#0f0f0f">equency. This could
    be a terminal frequency or remote frequency.</font>
    '''

    busFrequencyDeviation = 'busFrequencyDeviation'
    '''
    Input signal is deviation of bus voltage frequ<font color="#0f0f0f">ency.
    This could be a terminal frequency deviation or remote frequency deviation.</font>
    '''

    busVoltage = 'busVoltage'
    '''
    Input signal <font color="#0f0f0f">is bus voltage. This could be a
    terminal voltage or remote voltage.</font>
    '''

    busVoltageDerivative = 'busVoltageDerivative'
    '''
    Input signal is derivative of bus voltag<font color="#0f0f0f">e. This
    could be a terminal voltage derivative or remote voltage derivative.</font>
    '''

    fieldCurrent = 'fieldCurrent'
    '''
    Input signal is generator field current.
    '''

    generatorAcceleratingPower = 'generatorAcceleratingPower'
    '''
    Input signal is generator accelerating power.
    '''

    generatorElectricalPower = 'generatorElectricalPower'
    '''
    Input signal is generator electrical power on rated <i>S</i>.
    '''

    generatorMechanicalPower = 'generatorMechanicalPower'
    '''
    Input signal is generator mechanical power.
    '''

    rotorAngularFrequencyDeviation = 'rotorAngularFrequencyDeviation'
    '''
    Input signal is rotor or shaft angular frequency deviation.
    '''

    rotorSpeed = 'rotorSpeed'
    '''
    Input signal is rotor or shaft speed (angular frequency).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PowerSystemStabilizerDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class InspectionAnalogKind(Enum):
    '''
    Analogs typically recorded during a field inspection.
    '''

    airPressureHPSystemReading = 'airPressureHPSystemReading'
    '''
    Analog value represents High Pressure system air pressure.
    '''

    airPressureLPSystemReading = 'airPressureLPSystemReading'
    '''
    Analog value represents Low Pressure system air pressure.
    '''

    airPressureReading = 'airPressureReading'
    '''
    Analog value represents air pressure.
    '''

    compressorHourMeterReading = 'compressorHourMeterReading'
    '''
    Analog value represents reading from compressor hour meter.
    '''

    sF6PressureReading = 'sF6PressureReading'
    '''
    Analog value represents SF6 gas pressure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class InspectionDiscreteKind(Enum):
    '''
    Discretes representing breaker inspection result.
    '''

    bushingOilLevelsOK = 'bushingOilLevelsOK'
    '''
    Are bushing oil levels OK?
    '''

    checkOilLevelOK = 'checkOilLevelOK'
    '''
    Check oil level OK?
    '''

    controlCabinetHeaterOn = 'controlCabinetHeaterOn'
    '''
    Is the control cabinet heater on?
    '''

    gasIndicatorNormal = 'gasIndicatorNormal'
    '''
    Is the circuit switcher gas indicator normal?
    '''

    hydraulicFluidLevelOK = 'hydraulicFluidLevelOK'
    '''
    Hydraulic fluid level OK?
    '''

    hydraulicOilLevelOK = 'hydraulicOilLevelOK'
    '''
    Is the hydraulic oil level OK? Can apply to any individual pole.
    '''

    lowToHighPressureCount = 'lowToHighPressureCount'
    '''
    Count of ??.
    '''

    motorOperationsCount = 'motorOperationsCount'
    '''
    Count of motor operations.
    '''

    oilTankLevelsOK = 'oilTankLevelsOK'
    '''
    Are the oil tank levels OK?
    '''

    operationCount = 'operationCount'
    '''
    Count of operations.
    '''

    pumpMotorOperationCount = 'pumpMotorOperationCount'
    '''
    Count of pump motor operations.
    '''

    springPressureReadingOK = 'springPressureReadingOK'
    '''
    Is the spring pressure reading OK? Can apply to whole breaker or any
    individual pole.
    '''

    visibleDamageOrLeaks = 'visibleDamageOrLeaks'
    '''
    Any visible damage and/or oil/air/SF6 leaks?.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class IntensityCodeKind(Enum):
    '''
    Kinds of weather condition intensity.
    '''

    heavy = 'heavy'
    '''
    '''

    light = 'light'
    '''
    '''

    veryHeavy = 'veryHeavy'
    '''
    '''

    veryLight = 'veryLight'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class InterTieDirection(Enum):
    '''
    Direction of an intertie.
    '''

    E = 'E'
    '''
    Export.
    '''

    I = 'I'
    '''
    Import.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class JobFlagType(Enum):
    '''
    '''

    CREATED = 'CREATED'
    '''
    '''

    DELETED = 'DELETED'
    '''
    '''

    MODIFIED = 'MODIFIED'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class JobScheduleType(Enum):
    '''
    '''

    CRITICAL = 'CRITICAL'
    '''
    '''

    NONCRITICAL = 'NONCRITICAL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class JobStartEndType(Enum):
    '''
    '''

    END = 'END'
    '''
    '''

    NA = 'NA'
    '''
    '''

    START = 'START'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class JointConfigurationKind(Enum):
    '''
    Kind of configuration for joints.
    '''

    other = 'other'
    '''
    '''

    wires1to1 = 'wires1to1'
    '''
    '''

    wires2to1 = 'wires2to1'
    '''
    '''

    wires3to1 = 'wires3to1'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 JointFillKind(Enum):
    '''
    Kind of fill for Joint.
    '''

    airNoFilling = 'airNoFilling'
    '''
    '''

    asphaltic = 'asphaltic'
    '''
    '''

    bluefill254 = 'bluefill254'
    '''
    '''

    epoxy = 'epoxy'
    '''
    '''

    insoluseal = 'insoluseal'
    '''
    '''

    noFillPrefab = 'noFillPrefab'
    '''
    '''

    noVoid = 'noVoid'
    '''
    '''

    oil = 'oil'
    '''
    '''

    other = 'other'
    '''
    '''

    petrolatum = 'petrolatum'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class LFCResourceType(Enum):
    '''
    '''

    GEN = 'GEN'
    '''
    '''

    PUMP = 'PUMP'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class LaborelecStandardEditionKind(Enum):
    '''
    List of editions for Laborelec standards.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 LaborelecStandardKind(Enum):
    '''
    List of Laborelec standards.
    '''

    methanol = 'methanol'
    '''
    Laborelec test for methanol.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 LandPropertyKind(Enum):
    '''
    Kind of (land) property.
    '''

    building = 'building'
    '''
    Site enclosed within a building.
    '''

    customerPremise = 'customerPremise'
    '''
    Site with a customer.
    '''

    depot = 'depot'
    '''
    Storehouse for supplies that also serves as a station for supporting
    crews.
    '''

    external = 'external'
    '''
    Property owned or used by an external party that is not a customer.
    '''

    gridSupplyPoint = 'gridSupplyPoint'
    '''
    Substation where the distribution and transmission networks meet and
    hence have mixed ownership and mixed operational control.
    '''

    store = 'store'
    '''
    Place of storage (e.g., a warehouse) to put aside, or accumulate, material
    and equipment for use when needed.
    '''

    substation = 'substation'
    '''
    Transmission network switchyard.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class LoadFollowingCapacityType(Enum):
    '''
    '''

    DOWN = 'DOWN'
    '''
    '''

    UP = 'UP'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class LoadForecastType(Enum):
    '''
    Load forecast zone types.
    '''

    LFZ = 'LFZ'
    '''
    Load forecast zone.
    '''

    LZMS = 'LZMS'
    '''
    Metered sub system zone.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 LocationKind(Enum):
    '''
    The nature of the location being defined for an environmental entity. Possible
    values are center, perimeter, primary, secondary.
    '''

    center = 'center'
    '''
    The center of a phenomenon. Will typically be used with a Location
    with a single PositionPoint instance.
    '''

    extent = 'extent'
    '''
    The area or line of a phenomenon, not the center. Will typically be
    used with a Location with multiple PositionPoint instances.
    '''

    primary = 'primary'
    '''
    Primary area to which an environmental alert applies.
    '''

    secondary = 'secondary'
    '''
    Secondary area to which an environmental alert applies.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class LookUpTableFunctionKind(Enum):
    '''
    '''

    additionalQcurrent = 'additionalQcurrent'
    '''
    '''

    vdcol = 'vdcol'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfHVDCDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MPMTestIdentifierType(Enum):
    '''
    Market power mitigation test identifier type, for example:
    1 - Global Price Test
    2 - Global Conduct Test
    3 - Global Impact Test
    4 - Local Price Test
    5 - Local Conduct Test
    6 - Local Impact Test
    '''

    _1 = '_1'
    '''
    1 - Global Price Test.
    '''

    _2 = '_2'
    '''
    2 - Global Conduct Test.
    '''

    _3 = '_3'
    '''
    3 - Global Impact Test.
    '''

    _4 = '_4'
    '''
    4 - Local Price Test.
    '''

    _5 = '_5'
    '''
    5 - Local Conduct Test.
    '''

    _6 = '_6'
    '''
    6 - Local Impact Test.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MPMTestMethodType(Enum):
    '''
    Market power mitigation test method type.
    Tests with the normal (default) thresholds or tests with the alternate
    thresholds.
    '''

    ALTERNATE = 'ALTERNATE'
    '''
    Alternate.
    '''

    NORMAL = 'NORMAL'
    '''
    Normal.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MPMTestOutcome(Enum):
    '''
    For example:
    Passed
    Failed
    Disabled
    Skipped
    '''

    D = 'D'
    '''
    Disabled
    '''

    F = 'F'
    '''
    Failed
    '''

    P = 'P'
    '''
    Passed
    '''

    S = 'S'
    '''
    Skipped
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MQSCHGType(Enum):
    '''
    For example:
    ADD - add
    CHG - change
    '''

    ADD = 'ADD'
    '''
    '''

    CHG = 'CHG'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MQSDELType(Enum):
    '''
    ADD - add
    DEL - delete
    CHG - change
    '''

    ADD = 'ADD'
    '''
    '''

    CHG = 'CHG'
    '''
    '''

    DEL = 'DEL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MQSInstructionSource(Enum):
    '''
    Valid values, for example:
    INS - Instruction from RTM
    ACT - Actual instruction after the fact
    '''

    ACT = 'ACT'
    '''
    '''

    INS = 'INS'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MacroPeriodKind(Enum):
    '''
    Kind of macro period for calculations on read / measured values.
    '''

    billingPeriod = 'billingPeriod'
    '''
    Captured during the billing period starting at midnight of the first
    day of the billing period (as defined by the billing cycle day). If
    during the current billing period, it specifies a period from the start
    of the current billing period until "now".
    '''

    daily = 'daily'
    '''
    Daily period starting at midnight. If for the current day, this specifies
    the time from midnight to "now".
    '''

    monthly = 'monthly'
    '''
    Monthly period starting at midnight on the first day of the month.
    If within the current month, this specifies the period from the start
    of the month until "now."
    '''

    none = 'none'
    '''
    Not applicable.
    '''

    seasonal = 'seasonal'
    '''
    A season of time spanning multiple months. E.g. "Summer," "Spring,"
    "Fall," and "Winter" based cycle. If within the current season, it
    specifies the period from the start of the current season until "now."
    '''

    specifiedPeriod = 'specifiedPeriod'
    '''
    For the period defined by the start and end of the TimePeriod element
    in the message.
    '''

    weekly = 'weekly'
    '''
    Weekly period starting at midnight on the first day of the week and
    ending the instant before midnight the last day of the week. If within
    the current week, it specifies the period from the start of the week
    until "now."
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MarketEventStatusKind(Enum):
    '''
    Market event status types.
    '''

    active = 'active'
    '''
    The status of the event is currently in a active state.
    Active (when sysdate is equal or greater than to planned start time)
    '''

    cancelled = 'cancelled'
    '''
    The status of the event is currently in a cancelled state.
    Cancelled (stopped before planned start time or planned end time)
    '''

    completed = 'completed'
    '''
    The status of the event is currently in a completed state.
    Complete (when sysdate is equal to the release time)
    '''

    planned = 'planned'
    '''
    The status of the event is currently in a planned state.
    Planned (sysdate is less than planned start time)
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MarketProductSelfSchedType(Enum):
    '''
    Market product self schedule bid types.
    '''

    ETC = 'ETC'
    '''
    Existing Transmission Contract.
    '''

    LPT = 'LPT'
    '''
    Low price taker.
    '''

    PT = 'PT'
    '''
    Price taker.
    '''

    RA = 'RA'
    '''
    Resource adequacy.
    '''

    RGMR = 'RGMR'
    '''
    Regulatory must run.
    '''

    RMR = 'RMR'
    '''
    Reliability Must Run.
    '''

    RMT = 'RMT'
    '''
    Reliability must take.
    '''

    SP = 'SP'
    '''
    Self provision.
    '''

    TOR = 'TOR'
    '''
    Transmission Ownership Right.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MarketProductType(Enum):
    '''
    For example:
    Energy, Reg Up, Reg Down, Spin Reserve, Nonspin Reserve, RUC, Load Folloing
    Up, and Load Following Down.
    '''

    EN = 'EN'
    '''
    energy type
    '''

    LFD = 'LFD'
    '''
    Load following down
    '''

    LFU = 'LFU'
    '''
    Load following up
    '''

    NR = 'NR'
    '''
    non spinning reserve
    '''

    RC = 'RC'
    '''
    Residual Unit Commitment
    '''

    RD = 'RD'
    '''
    regulation down
    '''

    REG = 'REG'
    '''
    Regulation
    '''

    RU = 'RU'
    '''
    regulation up
    '''

    SR = 'SR'
    '''
    spinning reserve
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketProductTypeAsReq(Enum):
    '''
    RU - Regulation Up
    RD - Regulation Down
    SR - Spin Reserve
    NR - Nonspin Reserve
    AS - Upward Ancillary Service
    '''

    AS = 'AS'
    '''
    '''

    NR = 'NR'
    '''
    non spinning reserve
    '''

    RD = 'RD'
    '''
    regulation down
    '''

    RU = 'RU'
    '''
    regulation up
    '''

    SR = 'SR'
    '''
    spinning reserve
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketRoleKind(Enum):
    '''
    Kind of market role an organisation can have. This list is not exhausted,
    as other roles may exist.
    '''

    BalanceResponsibleParty = 'BalanceResponsibleParty'
    '''
    A party that has a contract proving financial security and identifying
    balance responsibility with the Imbalance Settlement Responsible of
    the Market Balance Area entitling the party to operate in the market.
    This is the only role allowing a party to nominate energy on a wholesale
    level.
    <b><i>Additional information:</i></b>
    The meaning of the word "balance" in this context signifies that the
    quantity contracted to provide or to consume shall be equal to the
    quantity really provided or consumed. Equivalent to "Program responsible
    party" in the Netherlands. Equivalent to "Balance group manager" in
    Germany. Equivalent to "market agent" in Spain.
    '''

    BalanceSupplier = 'BalanceSupplier'
    '''
    A party that markets the difference between actual metered energy consumption
    and the energy bought with firm energy contracts by the Party Connected
    to the Grid. In addition the Balance Supplier markets any difference
    with the firm energy contract (of the Party Connected to the Grid)
    and the metered production.
    <b><i>Additional information:</i></b>
    There is only one Balance Supplier for each Accounting Point.
    '''

    BillingAgent = 'BillingAgent'
    '''
    The party responsible for invoicing a concerned party.
    '''

    BlockEnergyTrader = 'BlockEnergyTrader'
    '''
    A party that is selling or buying energy on a firm basis (a fixed volume
    per market time period).
    '''

    CapacityCoordinator = 'CapacityCoordinator'
    '''
    A party, acting on behalf of the System Operators involved, responsible
    for establishing a coordinated Offered Capacity and/or Net Transfer
    Capacity (NTC) and/or Available Transfer Capacity (ATC) between several
    Market Balance Areas.
    '''

    CapacityTrader = 'CapacityTrader'
    '''
    A party that has a contract to participate in the Capacity Market to
    acquire capacity through a Transmission Capacity Allocator.
    The capacity may be acquired on behalf of an Interconnection Trade
    Responsible or for sale on secondary capacity markets.
    '''

    Consumer = 'Consumer'
    '''
    A party that consumes electricity.
    <b><i>Additional information:</i></b>
    This is a Type of Party Connected to the Grid.
    '''

    ConsumptionResponsibleParty = 'ConsumptionResponsibleParty'
    '''
    A party who can be brought to rights, legally and financially, for
    any imbalance between enegry nominated and consumed for all associated
    Accounting Points.
    <b><i>Additional information:</i></b>
    This is a type of Balance Responsible Party.
    '''

    ControlAreaOperator = 'ControlAreaOperator'
    '''
    Responsible for :
    1. The coordination of exchange programs between its related Market
    Balance Areas and for the exchanges between its associated Control
    Areas.
    2. The load frequency control for its own area.
    3. The coordination of the correction of time deviations.
    '''

    ControlBlockOperator = 'ControlBlockOperator'
    '''
    Responsible for :
    1. The coordination of exchanges between its associated Control Blocks
    and the organisation of the coordination of exchange programs between
    its related Control Areas.
    2. The load frequency control within its own block and ensuring that
    its Control Areas respect their obligations in respect to load frequency
    control and time deviation.
    3. The organisation of the settlement and/or compensation between its
    Control Areas.
    '''

    CoordinationCenterOperator = 'CoordinationCenterOperator'
    '''
    Responsible for :
    1. The coordination of exchange programs between its related Control
    Blocks and for the exchanges between its associated Coordination Center
    Zones.
    2. Ensuring that its Control Blocks respect their obligations in respect
    to load frequency control.
    3. Calculating the time deviation in cooperation with the associated
    coordination centers.
    4. Carrying out the settlement and/or compensation between its Control
    Blocks and against the other Coordination Center Zones.
    '''

    GridAccessProvider = 'GridAccessProvider'
    '''
    A party responsible for providing access to the grid through an Accounting
    Point and its use for energy consumption or production to the Party
    Connected to the Grid.
    '''

    GridOperator = 'GridOperator'
    '''
    A party that operates one or more grids.
    '''

    ImbalanceSettlementResponsible = 'ImbalanceSettlementResponsible'
    '''
    A party that is responsible for settlement of the difference between
    the contracted quantities and the realised quantities of energy products
    for the Balance Responsible Parties in a Market Balance Area.
    Note:
    The Imbalance Settlement Responsible has not the responsibility to
    invoice. The Imbalance Settlement Responsible may delegate the invoicing
    responsibility to a more generic role such as a Billing Agent.
    '''

    InterconnectionTradeResponsible = 'InterconnectionTradeResponsible'
    '''
    Is a Balance Responsible Party or depends on one. They are recognized
    by the Nomination Validator for the nomination of already allocated
    capacity.
    <b><i>Additional information:</i></b>
    This is a type of Balance Responsible Party.
    '''

    MOLResponsible = 'MOLResponsible'
    '''
    Responsible for the management of the available tenders for all Acquiring
    System Operators to establish the order of the reserve capacity that
    can be activated.
    '''

    MarketInformationAggregator = 'MarketInformationAggregator'
    '''
    Market Information Aggregator, A party that provides market related
    information that has been compiled from the figures supplied by different
    actors in the market. This information may also be published or distributed
    for general use.
    <b><i>Note:</i></b>
    The Market Information Aggregator may receive information from any
    market participant that is relevant for publication or distribution.
    '''

    MarketOperator = 'MarketOperator'
    '''
    The unique power exchange of trades for the actual delivery of energy
    that receives the bids from the Balance Responsible Parties that have
    a contract to bid. The Market Operator determines the market energy
    price for the Market Balance Area after applying technical constraints
    from the System Operator. It may also establish the price for the reconciliation
    within a Metering Grid Area.
    '''

    MeterAdministrator = 'MeterAdministrator'
    '''
    A party responsible for keeping a database of meters.
    '''

    MeterOperator = 'MeterOperator'
    '''
    A party responsible for installing, maintaining, testing, certifying
    and decommissioning physical meters.
    '''

    MeteredDataAggregator = 'MeteredDataAggregator'
    '''
    A party responsible for the establishment and qualification of metered
    data from the Metered Data Responsible. This data is aggregated according
    to a defined set of market rules.
    '''

    MeteredDataCollector = 'MeteredDataCollector'
    '''
    A party responsible for meter reading and quality control of the reading.
    '''

    MeteredDataResponsible = 'MeteredDataResponsible'
    '''
    A party responsible for the establishment and validation of metered
    data based on the collected data received from the Metered Data Collector.
    The party is responsible for the history of metered data for a Metering
    Point.
    '''

    MeteringPointAdministrator = 'MeteringPointAdministrator'
    '''
    A party responsible for registering the parties linked to the metering
    points in a Metering Grid Area. They are also responsible for maintaining
    the Metering Point technical specifications. They are responsible for
    creating and terminating metering points.
    '''

    NominationValidator = 'NominationValidator'
    '''
    Has the responsibility of ensuring that all capacity nominated is within
    the allowed limits and confirming all valid nominations to all involved
    parties. They inform the Interconnection Trade Responsible of the maximum
    nominated capacity allowed. Depending on market rules for a given interconnection
    the corresponding System Operators may appoint one Nomination Validator.
    '''

    PartyConnectedToTheGrid = 'PartyConnectedToTheGrid'
    '''
    A party that contracts for the right to consume or produce electricity
    at an Accounting Point.
    '''

    Producer = 'Producer'
    '''
    A party that produces electricity.
    <b><i>Additional information:</i></b>
    This is a type of Party Connected to the Grid.
    '''

    ProductionResponsibleParty = 'ProductionResponsibleParty'
    '''
    A party who can be brought to rights, legally and financially, for
    any imbalance between energy nominated and produced for all associated
    Accounting Points.
    <b><i>Additional information:</i></b>
    This is a type of Balance Responsible Party.
    '''

    ReconciliationAccountable = 'ReconciliationAccountable'
    '''
    A party that is financially accountable for the reconciled volume of
    energy products for a profiled Accounting Point.
    '''

    ReconciliationResponsible = 'ReconciliationResponsible'
    '''
    A party that is responsible for reconciling, within a Metering Grid
    Area, the volumes used in the imbalance settlement process for profiled
    Accounting Points and the actual metered quantities.
    Note:
    The Reconciliation Responsible may delegate the invoicing responsibility
    to a more generic role such as a Billing Agent.
    '''

    ReserveAllocator = 'ReserveAllocator'
    '''
    Informs the market of reserve requirements, receives tenders against
    the requirements and in compliance with the prequalification criteria,
    determines what tenders meet requirements and assigns tenders.
    '''

    ResourceProvider = 'ResourceProvider'
    '''
    A role that manages a resource object and provides the schedules for
    it
    '''

    SchedulingCoordinator = 'SchedulingCoordinator'
    '''
    A party that is responsible for the schedule information and its exchange
    on behalf of a Balance Responsible Party. For example in the Polish
    market a Scheduling Coordinator is responsible for information interchange
    for scheduling and settlement.
    '''

    SystemOperator = 'SystemOperator'
    '''
    A party that is responsible for a stable power system operation
    (including the organisation of physical balance) through a transmission
    grid in a geographical area. The System Operator will also determine
    and be responsible for cross border capacity and exchanges. If necessary
    they may reduce allocated capacity to ensure operational stability.
    Transmission as mentioned above means "the transport of electricity
    on the extra high or high voltage network with a view to its delivery
    to final customers or to distributors. Operation of transmission includes
    as well the tasks of system operation concerning its management of
    energy flows, reliability of the system and availability of all necessary
    system services." (definition taken from the ENTSO-E RGCE Operation
    handbook Glossary).
    <b><i>Note: </i></b>additional obligations may be imposed through local
    market rules.
    '''

    TradeResponsibleParty = 'TradeResponsibleParty'
    '''
    A party who can be brought to rights, legally and financially, for
    any imbalance between energy nominated and consumed for all associated
    Accounting Points.
    <b><i>Note:</i></b>
    A power exchange without any privileged responsibilities acts as a
    Trade Responsible Party.
    <b><i>Additional information:</i></b>
    This is a type of Balance Responsible Party.
    '''

    TransmissionCapacityAllocator = 'TransmissionCapacityAllocator'
    '''
    Manages the allocation of transmission capacity for an Allocated Capacity
    Area.
    <b><i>For explicit auctions:</i></b>
    The Transmission Capacity Allocator manages, on behalf of the System
    Operators, the allocation of available transmission capacity for an
    Allocated capacity Area. They offer the available transmission capacity
    to the market, allocates the available transmission capacity to individual
    Capacity Traders and calculates the billing amount of already allocated
    capacities to the Capacity Traders.
    '''

    balancingAuthority = 'balancingAuthority'
    '''
    Balancing authority.
    '''

    competitiveRetailer = 'competitiveRetailer'
    '''
    Competitive retailer.
    '''

    complianceMonitor = 'complianceMonitor'
    '''
    Compliance monitor.
    '''

    distributionProvider = 'distributionProvider'
    '''
    Distribution provider.
    '''

    energyServiceConsumer = 'energyServiceConsumer'
    '''
    Energy service consumer.
    '''

    generatorOperator = 'generatorOperator'
    '''
    Generator merchant operator.
    '''

    generatorOwner = 'generatorOwner'
    '''
    Generator merchant owner.
    '''

    interchangeAuthority = 'interchangeAuthority'
    '''
    Interchange authority.
    '''

    loadServingEntity = 'loadServingEntity'
    '''
    Load serving entity.
    '''

    planningAuthority = 'planningAuthority'
    '''
    Planning authority.
    '''

    purchasingSellingEntity = 'purchasingSellingEntity'
    '''
    Purchasing selling entity.
    '''

    reliabilityAuthority = 'reliabilityAuthority'
    '''
    Reliability authority.
    '''

    resourcePlanner = 'resourcePlanner'
    '''
    Resource planner.
    '''

    standardsDeveloper = 'standardsDeveloper'
    '''
    Standards developer.
    '''

    transmissionOperator = 'transmissionOperator'
    '''
    Transmission operator.
    '''

    transmissionOwner = 'transmissionOwner'
    '''
    Transmission owner.
    '''

    transmissionPlanner = 'transmissionPlanner'
    '''
    Transmission planner.
    '''

    transmissionServiceProvider = 'transmissionServiceProvider'
    '''
    Transmission service provider.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfMarketOpCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketScheduleServices(Enum):
    '''
    '''

    retrieveDefaultBidCurves = 'retrieveDefaultBidCurves'
    '''
    '''

    retrieveMPMResults = 'retrieveMPMResults'
    '''
    '''

    retrieveMarketAwards = 'retrieveMarketAwards'
    '''
    '''

    retrieveSchedulePrices = 'retrieveSchedulePrices'
    '''
    '''

    retrieveStartUpShutDownInstructions = 'retrieveStartUpShutDownInstructions'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketStatementDescription(Enum):
    '''
    Description of market statement
    '''

    DAILY_INITIAL_CREDIT = 'DAILY_INITIAL_CREDIT'
    '''
    '''

    DAILY_INITIAL_MARKET = 'DAILY_INITIAL_MARKET'
    '''
    '''

    DAILY_RECALC_MARKET = 'DAILY_RECALC_MARKET'
    '''
    '''

    MONTHLY_INITIAL_MARKET = 'MONTHLY_INITIAL_MARKET'
    '''
    '''

    MONTHLY_RECALC_MARKET = 'MONTHLY_RECALC_MARKET'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketStatementDocStatus(Enum):
    '''
    market statement document status
    '''

    APPROVED = 'APPROVED'
    '''
    '''

    CANCELLED = 'CANCELLED'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketStatementDocType(Enum):
    '''
    market statement document type
    '''

    CREDIT = 'CREDIT'
    '''
    '''

    MARKET_INITIAL = 'MARKET_INITIAL'
    '''
    '''

    MARKET_RECALC = 'MARKET_RECALC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MarketStatementLineItemAliasName(Enum):
    '''
    market statement line item alias name
    '''

    CHARGE_CODE_INTERVAL_DETAIL = 'CHARGE_CODE_INTERVAL_DETAIL'
    '''
    '''

    CHARGE_CODE_INTERVAL_TOTAL = 'CHARGE_CODE_INTERVAL_TOTAL'
    '''
    '''

    CHARGE_CODE_SUMMARY = 'CHARGE_CODE_SUMMARY'
    '''
    '''

    CHARGE_GROUP = 'CHARGE_GROUP'
    '''
    '''

    PARENT_CHARGE_GROUP = 'PARENT_CHARGE_GROUP'
    '''
    '''

    TRADE_DATE = 'TRADE_DATE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 MeasurementKind(Enum):
    '''
    Kind of read / measured value.
    '''

    alarm = 'alarm'
    '''
    A measurement related to an alarm
    '''

    apTitle = 'apTitle'
    '''
    An application name which is making or has made a request
    '''

    apparentPowerFactor = 'apparentPowerFactor'
    '''
    The ratio of real energy (usually net Wh) to apparent energy (kVAh)
    '''

    applicationContext = 'applicationContext'
    '''
    Information that describes the logical context in which a request,
    measurement, or command is made.
    '''

    assetNumber = 'assetNumber'
    '''
    An asset identifier
    '''

    audibleVolume = 'audibleVolume'
    '''
    Sound
    '''

    bandwidth = 'bandwidth'
    '''
    A measurement of dataflow
    '''

    batteryCarryover = 'batteryCarryover'
    '''
    An estimate of the battery ride through capacity
    '''

    batteryVoltage = 'batteryVoltage'
    '''
    Battery voltage
    '''

    billCarryover = 'billCarryover'
    '''
    Customer�s bill for the (Currency)
    '''

    billLastPeriod = 'billLastPeriod'
    '''
    Customer�s bill for the previous billing period (Currency)
    '''

    billToDate = 'billToDate'
    '''
    Customer�s bill, as known thus far within the present billing period
    (Currency)
    '''

    broadcastAddress = 'broadcastAddress'
    '''
    A message target address implying all endpoint units within range of
    a particular sender
    '''

    connectionFee = 'connectionFee'
    '''
    Monthly fee for connection to commodity.
    '''

    currency = 'currency'
    '''
    funds
    '''

    current = 'current'
    '''
    The flow of electrons
    '''

    currentAngle = 'currentAngle'
    '''
    A phase current zerocross timing measurement releative to a reference
    voltage zerocross
    '''

    currentImbalance = 'currentImbalance'
    '''
    A measurement of the departure of a phase current relative to the average
    current of all phases
    '''

    dataOverflowAlarm = 'dataOverflowAlarm'
    '''
    An indication of or measurement of a loss of data
    '''

    date = 'date'
    '''
    A measurement of the date and/or time in a clock, or a time stamp indicating
    when data was captured, when a maximum or minimum occurred, or to commemorate
    some other important aspect of a measurement
    '''

    demand = 'demand'
    '''
    The measurement of maximum power flow which is computed as energy usage
    over time, the dimensions of which are defined by a tariff
    '''

    demandLimit = 'demandLimit'
    '''
    A threshold setting that determines the trip point that if exceeded
    would trigger a demand limiting action or alarm
    '''

    demandReset = 'demandReset'
    '''
    A count of the number of times demand has been reset (remotely, locally,
    and/or automatically.)
    '''

    deviceAddressType1 = 'deviceAddressType1'
    '''
    Endpoint target address Type1
    '''

    deviceAddressType2 = 'deviceAddressType2'
    '''
    Endpoint target address Type2
    '''

    deviceAddressType3 = 'deviceAddressType3'
    '''
    Endpoint target address Type3
    '''

    deviceAddressType4 = 'deviceAddressType4'
    '''
    Endpoint target address Type4
    '''

    deviceClass = 'deviceClass'
    '''
    A unique identifier for the Endpoint�s configuration
    '''

    diagnostic = 'diagnostic'
    '''
    A measurement related to equipment diagnostics
    '''

    distance = 'distance'
    '''
    A linear distance or range radius
    '''

    distortionPowerFactor = 'distortionPowerFactor'
    '''
    The ratio of the distortion VAh to the apparent VAh
    '''

    distortionVoltAmp = 'distortionVoltAmp'
    '''
    A measurement in which a V<sup>2</sup> I<sup>2</sup> term has both
    real and reactive components removed leaving only distortion. For example,
    distortion VAh = Sqrt( (V<sup>2</sup>h)(I<sup>2</sup>h) � (Wh)<sup>2</sup>
    � (VArh)<sup>2</sup>)
    '''

    electronicSerialNumber = 'electronicSerialNumber'
    '''
    A device serial number
    '''

    emergencyLimit = 'emergencyLimit'
    '''
    A setting that indicates an emergency limit
    '''

    encoderTamper = 'encoderTamper'
    '''
    An indication of tampering with a meter encoder
    '''

    endDeviceID = 'endDeviceID'
    '''
    A unique identifier of the endDevice � the device providing measurements
    or under control of the network
    '''

    energization = 'energization'
    '''
    Pertaining to the presence of voltage
    '''

    energizationLoadSide = 'energizationLoadSide'
    '''
    Measuring the presence or absence of voltage on the load side of an
    electricity meter
    '''

    energy = 'energy'
    '''
    Scalar quantity which may be increased or decreased in a system when
    it receives or produces work, respectively
    '''

    fan = 'fan'
    '''
    A forced air moving device
    '''

    frequency = 'frequency'
    '''
    Reciprocal of the period
    '''

    frequencyExcursion = 'frequencyExcursion'
    '''
    A measurement of the departure of the frequency from the nominal frequency
    '''

    fund = 'fund'
    '''
    Duplicate with �currency�
    '''

    groupAddressType1 = 'groupAddressType1'
    '''
    Group target address Type1
    '''

    groupAddressType2 = 'groupAddressType2'
    '''
    Group target address Type2
    '''

    groupAddressType3 = 'groupAddressType3'
    '''
    Group target address Type3
    '''

    groupAddressType4 = 'groupAddressType4'
    '''
    Group target address Type4
    '''

    ieee1366ASAI = 'ieee1366ASAI'
    '''
    A measurement of IEEE-1366 Average Service Availability Index
    '''

    ieee1366ASIDI = 'ieee1366ASIDI'
    '''
    A measurement of the IEEE-1366 Average Service Interruption Duration
    Index
    '''

    ieee1366ASIFI = 'ieee1366ASIFI'
    '''
    A measurement of the IEEE-1366 Average Service Interruption Frequency
    Index
    '''

    ieee1366CAIDI = 'ieee1366CAIDI'
    '''
    A measurement of the IEEE-1366 Customer average interruption duration
    index
    '''

    ieee1366CAIFI = 'ieee1366CAIFI'
    '''
    A measurement of the IEEE-1366 Customer average interruption frequency
    index
    '''

    ieee1366CEMIn = 'ieee1366CEMIn'
    '''
    A measurement of the IEEE-1366 Customers Experiencing Multiple Interruptions
    '''

    ieee1366CEMSMIn = 'ieee1366CEMSMIn'
    '''
    A measurement of the IEEE-1366 Customers Experiencing Multiple Sustained
    and Momentary Interruptions
    '''

    ieee1366CTAIDI = 'ieee1366CTAIDI'
    '''
    A measurement of the IEEE-1366 Customer Total Average Interruption
    Duration Index
    '''

    ieee1366MAIFI = 'ieee1366MAIFI'
    '''
    A measurement of the IEEE-1366 Momentary Average Interruption Frequency
    Index
    '''

    ieee1366MAIFIe = 'ieee1366MAIFIe'
    '''
    A measurement of the IEEE-1366 Momentary Average event Interruption
    Frequency Index
    '''

    ieee1366MomentaryInterruption = 'ieee1366MomentaryInterruption'
    '''
    IEEE-1366 Momentary Interruption count
    '''

    ieee1366MomentaryInterruptionEvent = 'ieee1366MomentaryInterruptionEvent'
    '''
    IEEE-1366 Momentary Interruption event count
    '''

    ieee1366SAIDI = 'ieee1366SAIDI'
    '''
    IEEE-1366 System Average Interruption Duration Index
    '''

    ieee1366SAIFI = 'ieee1366SAIFI'
    '''
    IEEE-1366 System Average Interruption Frequency Index
    '''

    ieee1366SustainedInterruption = 'ieee1366SustainedInterruption'
    '''
    IEEE-1366 Sustained Interruption duration
    '''

    interruptionBehaviour = 'interruptionBehaviour'
    '''
    A measurement related to power interruptions (Note: often an interruption
    count or duration.)
    '''

    inversionTamper = 'inversionTamper'
    '''
    A measurement related to inversion tamper (Note: typically a count
    of inversions)
    '''

    ipAddress = 'ipAddress'
    '''
    An IP address for the endpoint
    '''

    lineLoss = 'lineLoss'
    '''
    An energy, power, voltage, or current loss attributed to transmission
    or distribution line impedance
    '''

    loadInterrupt = 'loadInterrupt'
    '''
    A measurement related to load interruption (Note: typically a load
    interruption count or measurement of duration)
    '''

    loadShed = 'loadShed'
    '''
    A measurement related to load shed (Note: typically a load shed count
    or load shed duration)
    '''

    loss = 'loss'
    '''
    A quantity lost due to �technical� reasons (such as line loss) or �non-technical�
    reasons (such as theft.)
    '''

    macAddress = 'macAddress'
    '''
    A MAC address for the endpoint
    '''

    maintenance = 'maintenance'
    '''
    A measurement related to the pending maintenance of equipment
    '''

    mfgAssignedConfigurationID = 'mfgAssignedConfigurationID'
    '''
    The configuration given to a device at time of manufacture
    '''

    mfgAssignedPhysicalSerialNumber = 'mfgAssignedPhysicalSerialNumber'
    '''
    The serial number assigned to a device at time of manufacture
    '''

    mfgAssignedProductNumber = 'mfgAssignedProductNumber'
    '''
    The product number assigned to a device at time of manufacture
    '''

    mfgAssignedUniqueCommunicationAddress = 'mfgAssignedUniqueCommunicationAddress'
    '''
    A communication address assigned to a device at time of manufacture
    '''

    multiCastAddress = 'multiCastAddress'
    '''
    A message target address implying a large group of endpoint units within
    range of a particular sender
    '''

    negativeSequence = 'negativeSequence'
    '''
    A quantity that has a rotation sequence which is opposite to that of
    the power system
    '''

    none = 'none'
    '''
    Not Applicable
    '''

    oneWayAddress = 'oneWayAddress'
    '''
    A communication address of a network endpoint used in one-way communication
    '''

    phasorPowerFactor = 'phasorPowerFactor'
    '''
    The ratio of real energy (usually net Wh) to phasor apparent energy
    (kVAh)
    '''

    phasorReactivePower = 'phasorReactivePower'
    '''
    The ratio of real energy (usually net Wh) to phasor reactive energy
    (kVAh)
    '''

    physicalTamper = 'physicalTamper'
    '''
    A measurement related to physical tampering (Note: typically a tamper
    count)
    '''

    positiveSequence = 'positiveSequence'
    '''
    A quantity that has a rotation sequence in agreement with that of the
    power system
    '''

    power = 'power'
    '''
    The derivative of energy with respect to time, where the energy is
    being transferred or transformed.
    '''

    powerFactor = 'powerFactor'
    '''
    The ratio of real energy (usually net Wh) to apparent energy (kVAh)
    '''

    powerLossTamper = 'powerLossTamper'
    '''
    Tamper indicated while power was out
    '''

    powerOutage = 'powerOutage'
    '''
    A measurement related to power outages (Note: typically a status)
    '''

    powerQuality = 'powerQuality'
    '''
    A measurement related to power quality
    '''

    powerRestoration = 'powerRestoration'
    '''
    A measurement related to power restoration (Note: typically a status)
    '''

    programmed = 'programmed'
    '''
    A measurement related to device programming (Note: typically a status
    measurement)
    '''

    pushbutton = 'pushbutton'
    '''
    A measurement related to pushbutton (Note: typically a status or count)
    '''

    quantityPower = 'quantityPower'
    '''
    A power measurement of Qh, where Qh is defined to be half of the sum
    of the Wh measurements on each phase plus the squareroot of 3 over
    two times the sum of the VArh measurements on each phase.
    '''

    relayActivation = 'relayActivation'
    '''
    A measurement related to relay activations
    '''

    relayCycle = 'relayCycle'
    '''
    A measurement related to relay cycling (Note1: one open and one closure
    together is one cycle, Note2: Usually expressed as a count)
    '''

    removalTamper = 'removalTamper'
    '''
    An indication of equipment tampering that shows equipment was moved
    or opened
    '''

    reprogrammingTamper = 'reprogrammingTamper'
    '''
    An indication of equipment tampering that shows equipment has been
    reprogrammed
    '''

    reverseRotationTamper = 'reverseRotationTamper'
    '''
    An indication of tampering as evidenced by reverse power flow
    '''

    sag = 'sag'
    '''
    A temporary dip in the supply voltage below the nominal value
    '''

    signalStrength = 'signalStrength'
    '''
    A measurement of RF signal strength
    '''

    signaltoNoiseRatio = 'signaltoNoiseRatio'
    '''
    A measurement of received (RF) signal strength divided by the (RF)
    noise floor
    '''

    swell = 'swell'
    '''
    A temporary rise of the supply voltage over the nominal value
    '''

    switchArmed = 'switchArmed'
    '''
    A measurement of the switch arm condition
    '''

    switchDisabled = 'switchDisabled'
    '''
    A measurement of the switch enablement status
    '''

    switchPosition = 'switchPosition'
    '''
    A physical or logical switch position status which includes �opened�
    and �closed�, but for some products may also include �armed,� or other
    states that indicate a temporary state due to some condition.
    '''

    tamper = 'tamper'
    '''
    An indication of equipment tampering
    '''

    tapPosition = 'tapPosition'
    '''
    Tap changer position
    '''

    tariffRate = 'tariffRate'
    '''
    An energy price defined in a contract. The rate might be a price for
    energy, for power (usually expressed as a demand value), or some other
    measurement. The rate might be currency based, or as a code, or as
    a component of a larger tariff description.
    '''

    temperature = 'temperature'
    '''
    A quantity proportional to the energy of a system
    '''

    totalHarmonicDistortion = 'totalHarmonicDistortion'
    '''
    The ratio of the sum of the harmonics to the fundamental. (THD may
    measure either voltage or current, and may isolated to a given phase)
    '''

    transformerLoss = 'transformerLoss'
    '''
    A measurement of the energy or power loss in a transformer due to inefficiency
    '''

    twoWayAddress = 'twoWayAddress'
    '''
    A communication address used for bidirectional communication
    '''

    unipedeVoltageDip10to15 = 'unipedeVoltageDip10to15'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 10-15% range
    '''

    unipedeVoltageDip15to30 = 'unipedeVoltageDip15to30'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 15-30% range
    '''

    unipedeVoltageDip30to60 = 'unipedeVoltageDip30to60'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 30-60% range
    '''

    unipedeVoltageDip60to90 = 'unipedeVoltageDip60to90'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 60-90% rangeA voltage dip classification
    per EN50160 or a similar national standard measuring the number of
    dips in the 60-90% range
    '''

    unipedeVoltageDip90to100 = 'unipedeVoltageDip90to100'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 90-100% range
    '''

    voltage = 'voltage'
    '''
    The difference in electric potential between two points
    '''

    voltageAngle = 'voltageAngle'
    '''
    A phase voltage zerocross timing measurement relative to a reference
    voltage zerocross
    '''

    voltageExcursion = 'voltageExcursion'
    '''
    A measurement of the departure of the voltage from the nominal voltage
    '''

    voltageImbalance = 'voltageImbalance'
    '''
    A measurement of the departure of a phase voltage relative to the average
    voltage of all phases.
    '''

    volume = 'volume'
    '''
    fluid volume
    '''

    volumetricFlow = 'volumetricFlow'
    '''
    A fluid flow rate
    '''

    watchdogTimeout = 'watchdogTimeout'
    '''
    A reset triggered by a hardware �watchdog� circuit
    '''

    zeroFlowDuration = 'zeroFlowDuration'
    '''
    The amount of time that current flow drops to a zero level or level
    below the ability of the sensor to sense
    '''

    zeroSequence = 'zeroSequence'
    '''
    The zero sequence current is the vector sum of the phase currents
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MeasurementKindOld(Enum):
    '''
    Kind of read / measured value.
    '''

    alarm = 'alarm'
    '''
    A measurement related to an alarm
    '''

    apTitle = 'apTitle'
    '''
    An application name which is making or has made a request
    '''

    apparentPowerFactor = 'apparentPowerFactor'
    '''
    The ratio of real energy (usually net Wh) to apparent energy (kVAh)
    '''

    applicationContext = 'applicationContext'
    '''
    Information that describes the logical context in which a request,
    measurement, or command is made.
    '''

    assetNumber = 'assetNumber'
    '''
    An asset identifier
    '''

    audibleVolume = 'audibleVolume'
    '''
    Sound
    '''

    bandwidth = 'bandwidth'
    '''
    A measurement of dataflow
    '''

    batteryCarryover = 'batteryCarryover'
    '''
    An estimate of the battery ride through capacity
    '''

    batteryVoltage = 'batteryVoltage'
    '''
    Battery voltage
    '''

    billCarryover = 'billCarryover'
    '''
    Customer�s bill for the (Currency)
    '''

    billLastPeriod = 'billLastPeriod'
    '''
    Customer�s bill for the previous billing period (Currency)
    '''

    billToDate = 'billToDate'
    '''
    Customer�s bill, as known thus far within the present billing period
    (Currency)
    '''

    broadcastAddress = 'broadcastAddress'
    '''
    A message target address implying all endpoint units within range of
    a particular sender
    '''

    connectionFee = 'connectionFee'
    '''
    Monthly fee for connection to commodity.
    '''

    currency = 'currency'
    '''
    funds
    '''

    current = 'current'
    '''
    The flow of electrons
    '''

    currentAngle = 'currentAngle'
    '''
    A phase current zerocross timing measurement releative to a reference
    voltage zerocross
    '''

    currentImbalance = 'currentImbalance'
    '''
    A measurement of the departure of a phase current relative to the average
    current of all phases
    '''

    dataOverflowAlarm = 'dataOverflowAlarm'
    '''
    An indication of or measurement of a loss of data
    '''

    date = 'date'
    '''
    A measurement of the date and/or time in a clock, or a time stamp indicating
    when data was captured, when a maximum or minimum occurred, or to commemorate
    some other important aspect of a measurement
    '''

    demand = 'demand'
    '''
    The measurement of maximum power flow which is computed as energy usage
    over time, the dimensions of which are defined by a tariff
    '''

    demandLimit = 'demandLimit'
    '''
    A threshold setting that determines the trip point that if exceeded
    would trigger a demand limiting action or alarm
    '''

    demandReset = 'demandReset'
    '''
    A count of the number of times demand has been reset (remotely, locally,
    and/or automatically.)
    '''

    deviceAddressType1 = 'deviceAddressType1'
    '''
    Endpoint target address Type1
    '''

    deviceAddressType2 = 'deviceAddressType2'
    '''
    Endpoint target address Type2
    '''

    deviceAddressType3 = 'deviceAddressType3'
    '''
    Endpoint target address Type3
    '''

    deviceAddressType4 = 'deviceAddressType4'
    '''
    Endpoint target address Type4
    '''

    deviceClass = 'deviceClass'
    '''
    A unique identifier for the Endpoint�s configuration
    '''

    diagnostic = 'diagnostic'
    '''
    A measurement related to equipment diagnostics
    '''

    distance = 'distance'
    '''
    A linear distance or range radius
    '''

    distortionPowerFactor = 'distortionPowerFactor'
    '''
    The ratio of the distortion VAh to the apparent VAh
    '''

    distortionVoltAmp = 'distortionVoltAmp'
    '''
    A measurement in which a V<sup>2</sup> I<sup>2</sup> term has both
    real and reactive components removed leaving only distortion. For example,
    distortion VAh = Sqrt( (V<sup>2</sup>h)(I<sup>2</sup>h) � (Wh)<sup>2</sup>
    � (VArh)<sup>2</sup>)
    '''

    electronicSerialNumber = 'electronicSerialNumber'
    '''
    A device serial number
    '''

    emergencyLimit = 'emergencyLimit'
    '''
    A setting that indicates an emergency limit
    '''

    encoderTamper = 'encoderTamper'
    '''
    An indication of tampering with a meter encoder
    '''

    endDeviceID = 'endDeviceID'
    '''
    A unique identifier of the endDevice � the device providing measurements
    or under control of the network
    '''

    energization = 'energization'
    '''
    Pertaining to the presence of voltage
    '''

    energizationLoadSide = 'energizationLoadSide'
    '''
    Measuring the presence or absence of voltage on the load side of an
    electricity meter
    '''

    energy = 'energy'
    '''
    Scalar quantity which may be increased or decreased in a system when
    it receives or produces work, respectively
    '''

    fan = 'fan'
    '''
    A forced air moving device
    '''

    frequency = 'frequency'
    '''
    Reciprocal of the period
    '''

    frequencyExcursion = 'frequencyExcursion'
    '''
    A measurement of the departure of the frequency from the nominal frequency
    '''

    fund = 'fund'
    '''
    Duplicate with �currency�
    '''

    groupAddressType1 = 'groupAddressType1'
    '''
    Group target address Type1
    '''

    groupAddressType2 = 'groupAddressType2'
    '''
    Group target address Type2
    '''

    groupAddressType3 = 'groupAddressType3'
    '''
    Group target address Type3
    '''

    groupAddressType4 = 'groupAddressType4'
    '''
    Group target address Type4
    '''

    ieee1366ASAI = 'ieee1366ASAI'
    '''
    A measurement of IEEE-1366 Average Service Availability Index
    '''

    ieee1366ASIDI = 'ieee1366ASIDI'
    '''
    A measurement of the IEEE-1366 Average Service Interruption Duration
    Index
    '''

    ieee1366ASIFI = 'ieee1366ASIFI'
    '''
    A measurement of the IEEE-1366 Average Service Interruption Frequency
    Index
    '''

    ieee1366CAIDI = 'ieee1366CAIDI'
    '''
    A measurement of the IEEE-1366 Customer average interruption duration
    index
    '''

    ieee1366CAIFI = 'ieee1366CAIFI'
    '''
    A measurement of the IEEE-1366 Customer average interruption frequency
    index
    '''

    ieee1366CEMIn = 'ieee1366CEMIn'
    '''
    A measurement of the IEEE-1366 Customers Experiencing Multiple Interruptions
    '''

    ieee1366CEMSMIn = 'ieee1366CEMSMIn'
    '''
    A measurement of the IEEE-1366 Customers Experiencing Multiple Sustained
    and Momentary Interruptions
    '''

    ieee1366CTAIDI = 'ieee1366CTAIDI'
    '''
    A measurement of the IEEE-1366 Customer Total Average Interruption
    Duration Index
    '''

    ieee1366MAIFI = 'ieee1366MAIFI'
    '''
    A measurement of the IEEE-1366 Momentary Average Interruption Frequency
    Index
    '''

    ieee1366MAIFIe = 'ieee1366MAIFIe'
    '''
    A measurement of the IEEE-1366 Momentary Average event Interruption
    Frequency Index
    '''

    ieee1366MomentaryInterruption = 'ieee1366MomentaryInterruption'
    '''
    IEEE-1366 Momentary Interruption count
    '''

    ieee1366MomentaryInterruptionEvent = 'ieee1366MomentaryInterruptionEvent'
    '''
    IEEE-1366 Momentary Interruption event count
    '''

    ieee1366SAIDI = 'ieee1366SAIDI'
    '''
    IEEE-1366 System Average Interruption Duration Index
    '''

    ieee1366SAIFI = 'ieee1366SAIFI'
    '''
    IEEE-1366 System Average Interruption Frequency Index
    '''

    ieee1366SustainedInterruption = 'ieee1366SustainedInterruption'
    '''
    IEEE-1366 Sustained Interruption duration
    '''

    interruptionBehaviour = 'interruptionBehaviour'
    '''
    A measurement related to power interruptions (Note: often an interruption
    count or duration.)
    '''

    inversionTamper = 'inversionTamper'
    '''
    A measurement related to inversion tamper (Note: typically a count
    of inversions)
    '''

    ipAddress = 'ipAddress'
    '''
    An IP address for the endpoint
    '''

    lineLoss = 'lineLoss'
    '''
    An energy, power, voltage, or current loss attributed to transmission
    or distribution line impedance
    '''

    loadInterrupt = 'loadInterrupt'
    '''
    A measurement related to load interruption (Note: typically a load
    interruption count or measurement of duration)
    '''

    loadShed = 'loadShed'
    '''
    A measurement related to load shed (Note: typically a load shed count
    or load shed duration)
    '''

    loss = 'loss'
    '''
    A quantity lost due to �technical� reasons (such as line loss) or �non-technical�
    reasons (such as theft.)
    '''

    macAddress = 'macAddress'
    '''
    A MAC address for the endpoint
    '''

    maintenance = 'maintenance'
    '''
    A measurement related to the pending maintenance of equipment
    '''

    mfgAssignedConfigurationID = 'mfgAssignedConfigurationID'
    '''
    The configuration given to a device at time of manufacture
    '''

    mfgAssignedPhysicalSerialNumber = 'mfgAssignedPhysicalSerialNumber'
    '''
    The serial number assigned to a device at time of manufacture
    '''

    mfgAssignedProductNumber = 'mfgAssignedProductNumber'
    '''
    The product number assigned to a device at time of manufacture
    '''

    mfgAssignedUniqueCommunicationAddress = 'mfgAssignedUniqueCommunicationAddress'
    '''
    A communication address assigned to a device at time of manufacture
    '''

    multiCastAddress = 'multiCastAddress'
    '''
    A message target address implying a large group of endpoint units within
    range of a particular sender
    '''

    negativeSequence = 'negativeSequence'
    '''
    A quantity that has a rotation sequence which is opposite to that of
    the power system
    '''

    none = 'none'
    '''
    Not Applicable
    '''

    oneWayAddress = 'oneWayAddress'
    '''
    A communication address of a network endpoint used in one-way communication
    '''

    phasorPowerFactor = 'phasorPowerFactor'
    '''
    The ratio of real energy (usually net Wh) to phasor apparent energy
    (kVAh)
    '''

    phasorReactivePower = 'phasorReactivePower'
    '''
    The ratio of real energy (usually net Wh) to phasor reactive energy
    (kVAh)
    '''

    physicalTamper = 'physicalTamper'
    '''
    A measurement related to physical tampering (Note: typically a tamper
    count)
    '''

    positiveSequence = 'positiveSequence'
    '''
    A quantity that has a rotation sequence in agreement with that of the
    power system
    '''

    power = 'power'
    '''
    The derivative of energy with respect to time, where the energy is
    being transferred or transformed.
    '''

    powerFactor = 'powerFactor'
    '''
    The ratio of real energy (usually net Wh) to apparent energy (kVAh)
    '''

    powerLossTamper = 'powerLossTamper'
    '''
    Tamper indicated while power was out
    '''

    powerOutage = 'powerOutage'
    '''
    A measurement related to power outages (Note: typically a status)
    '''

    powerQuality = 'powerQuality'
    '''
    A measurement related to power quality
    '''

    powerRestoration = 'powerRestoration'
    '''
    A measurement related to power restoration (Note: typically a status)
    '''

    programmed = 'programmed'
    '''
    A measurement related to device programming (Note: typically a status
    measurement)
    '''

    pushbutton = 'pushbutton'
    '''
    A measurement related to pushbutton (Note: typically a status or count)
    '''

    quantityPower = 'quantityPower'
    '''
    A power measurement of Qh, where Qh is defined to be half of the sum
    of the Wh measurements on each phase plus the squareroot of 3 over
    two times the sum of the VArh measurements on each phase.
    '''

    relayActivation = 'relayActivation'
    '''
    A measurement related to relay activations
    '''

    relayCycle = 'relayCycle'
    '''
    A measurement related to relay cycling (Note1: one open and one closure
    together is one cycle, Note2: Usually expressed as a count)
    '''

    removalTamper = 'removalTamper'
    '''
    An indication of equipment tampering that shows equipment was moved
    or opened
    '''

    reprogrammingTamper = 'reprogrammingTamper'
    '''
    An indication of equipment tampering that shows equipment has been
    reprogrammed
    '''

    reverseRotationTamper = 'reverseRotationTamper'
    '''
    An indication of tampering as evidenced by reverse power flow
    '''

    sag = 'sag'
    '''
    A temporary dip in the supply voltage below the nominal value
    '''

    signalStrength = 'signalStrength'
    '''
    A measurement of RF signal strength
    '''

    signaltoNoiseRatio = 'signaltoNoiseRatio'
    '''
    A measurement of received (RF) signal strength divided by the (RF)
    noise floor
    '''

    swell = 'swell'
    '''
    A temporary rise of the supply voltage over the nominal value
    '''

    switchArmed = 'switchArmed'
    '''
    A measurement of the switch arm condition
    '''

    switchDisabled = 'switchDisabled'
    '''
    A measurement of the switch enablement status
    '''

    switchPosition = 'switchPosition'
    '''
    A physical or logical switch position status which includes �opened�
    and �closed�, but for some products may also include �armed,� or other
    states that indicate a temporary state due to some condition.
    '''

    tamper = 'tamper'
    '''
    An indication of equipment tampering
    '''

    tapPosition = 'tapPosition'
    '''
    Tap changer position
    '''

    tariffRate = 'tariffRate'
    '''
    An energy price defined in a contract. The rate might be a price for
    energy, for power (usually expressed as a demand value), or some other
    measurement. The rate might be currency based, or as a code, or as
    a component of a larger tariff description.
    '''

    temperature = 'temperature'
    '''
    A quantity proportional to the energy of a system
    '''

    totalHarmonicDistortion = 'totalHarmonicDistortion'
    '''
    The ratio of the sum of the harmonics to the fundamental. (THD may
    measure either voltage or current, and may isolated to a given phase)
    '''

    transformerLoss = 'transformerLoss'
    '''
    A measurement of the energy or power loss in a transformer due to inefficiency
    '''

    twoWayAddress = 'twoWayAddress'
    '''
    A communication address used for bidirectional communication
    '''

    unipedeVoltageDip10to15 = 'unipedeVoltageDip10to15'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 10-15% range
    '''

    unipedeVoltageDip15to30 = 'unipedeVoltageDip15to30'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 15-30% range
    '''

    unipedeVoltageDip30to60 = 'unipedeVoltageDip30to60'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 30-60% range
    '''

    unipedeVoltageDip60to90 = 'unipedeVoltageDip60to90'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 60-90% rangeA voltage dip classification
    per EN50160 or a similar national standard measuring the number of
    dips in the 60-90% range
    '''

    unipedeVoltageDip90to100 = 'unipedeVoltageDip90to100'
    '''
    A voltage dip classification per EN50160 or a similar national standard
    measuring the number of dips in the 90-100% range
    '''

    voltage = 'voltage'
    '''
    The difference in electric potential between two points
    '''

    voltageAngle = 'voltageAngle'
    '''
    A phase voltage zerocross timing measurement relative to a reference
    voltage zerocross
    '''

    voltageExcursion = 'voltageExcursion'
    '''
    A measurement of the departure of the voltage from the nominal voltage
    '''

    voltageImbalance = 'voltageImbalance'
    '''
    A measurement of the departure of a phase voltage relative to the average
    voltage of all phases.
    '''

    volume = 'volume'
    '''
    fluid volume
    '''

    volumetricFlow = 'volumetricFlow'
    '''
    A fluid flow rate
    '''

    watchdogTimeout = 'watchdogTimeout'
    '''
    A reset triggered by a hardware �watchdog� circuit
    '''

    zeroFlowDuration = 'zeroFlowDuration'
    '''
    The amount of time that current flow drops to a zero level or level
    below the ability of the sensor to sense
    '''

    zeroSequence = 'zeroSequence'
    '''
    The zero sequence current is the vector sum of the phase currents
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MeasurementTypeEMS(Enum):
    '''
    Path Flow - PF
    Path Inflow Limit - PIL
    Path Inflow Available Limit - PIAL
    Path Inflow Armed Limit - PIML
    Path Outflow Limit - POL
    Path Outflow Available Limit - POAL
    Path Outflow Armed Limit - OARL
    Generation Output - GO
    Generation Max Operating Limit - GMOL
    Generation Min Operating Limit - GNOL
    Generation Regulation - GR
    Generation Status - GS
    Pump Production - PP
    System Load - SL
    System ACE - ACE
    System INADV - INADV
    '''

    ACE = 'ACE'
    '''
    '''

    GMOL = 'GMOL'
    '''
    '''

    GNOL = 'GNOL'
    '''
    '''

    GO = 'GO'
    '''
    '''

    GR = 'GR'
    '''
    '''

    GS = 'GS'
    '''
    '''

    INADV = 'INADV'
    '''
    '''

    OARL = 'OARL'
    '''
    '''

    PF = 'PF'
    '''
    '''

    PIAL = 'PIAL'
    '''
    '''

    PIL = 'PIL'
    '''
    '''

    PIML = 'PIML'
    '''
    '''

    POAL = 'POAL'
    '''
    '''

    POL = 'POL'
    '''
    '''

    PP = 'PP'
    '''
    '''

    SL = 'SL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class MeasuringPeriodKind(Enum):
    '''
    Kind of period for reading / measuring values.
    '''

    fifteenMinute = 'fifteenMinute'
    '''
    15-minute
    '''

    fiveMinute = 'fiveMinute'
    '''
    5-minute
    '''

    fixedBlock10Min = 'fixedBlock10Min'
    '''
    10-minute Fixed Block
    '''

    fixedBlock15Min = 'fixedBlock15Min'
    '''
    15-minute Fixed Block
    '''

    fixedBlock1Min = 'fixedBlock1Min'
    '''
    1-minute Fixed Block
    '''

    fixedBlock20Min = 'fixedBlock20Min'
    '''
    20-minute Fixed Block
    '''

    fixedBlock30Min = 'fixedBlock30Min'
    '''
    30-minute Fixed Block
    '''

    fixedBlock5Min = 'fixedBlock5Min'
    '''
    5-minute Fixed Block
    '''

    fixedBlock60Min = 'fixedBlock60Min'
    '''
    60-minute Fixed Block
    '''

    none = 'none'
    '''
    Not applicable.
    '''

    oneMinute = 'oneMinute'
    '''
    1-minute
    '''

    present = 'present'
    '''
    Within the present period of time
    '''

    previous = 'previous'
    '''
    Shifted within the previous monthly cycle and data set
    '''

    rollingBlock10MinIntvl1MinSubIntvl = 'rollingBlock10MinIntvl1MinSubIntvl'
    '''
    10-minute Rolling Block with 1-minute sub-intervals
    '''

    rollingBlock10MinIntvl2MinSubIntvl = 'rollingBlock10MinIntvl2MinSubIntvl'
    '''
    10-minute Rolling Block with 2-minute sub-intervals
    '''

    rollingBlock10MinIntvl5MinSubIntvl = 'rollingBlock10MinIntvl5MinSubIntvl'
    '''
    10-minute Rolling Block with 5-minute sub-intervals
    '''

    rollingBlock15MinIntvl1MinSubIntvl = 'rollingBlock15MinIntvl1MinSubIntvl'
    '''
    15-minute Rolling Block with 1-minute sub-intervals
    '''

    rollingBlock15MinIntvl3MinSubIntvl = 'rollingBlock15MinIntvl3MinSubIntvl'
    '''
    15-minute Rolling Block with 3-minute sub-intervals
    '''

    rollingBlock15MinIntvl5MinSubIntvl = 'rollingBlock15MinIntvl5MinSubIntvl'
    '''
    15-minute Rolling Block with 5-minute sub-intervals
    '''

    rollingBlock30MinIntvl10MinSubIntvl = 'rollingBlock30MinIntvl10MinSubIntvl'
    '''
    30-minute Rolling Block with 10-minute sub-intervals
    '''

    rollingBlock30MinIntvl15MinSubIntvl = 'rollingBlock30MinIntvl15MinSubIntvl'
    '''
    30-minute Rolling Block with 15-minute sub-intervals
    '''

    rollingBlock30MinIntvl2MinSubIntvl = 'rollingBlock30MinIntvl2MinSubIntvl'
    '''
    30-minute Rolling Block with 2-minute sub-intervals
    '''

    rollingBlock30MinIntvl3MinSubIntvl = 'rollingBlock30MinIntvl3MinSubIntvl'
    '''
    30-minute Rolling Block with 3-minute sub-intervals
    '''

    rollingBlock30MinIntvl5MinSubIntvl = 'rollingBlock30MinIntvl5MinSubIntvl'
    '''
    30-minute Rolling Block with 5-minute sub-intervals.
    '''

    rollingBlock30MinIntvl6MinSubIntvl = 'rollingBlock30MinIntvl6MinSubIntvl'
    '''
    30-minute Rolling Block with 6-minute sub-intervals
    '''

    rollingBlock5MinIntvl1MinSubIntvl = 'rollingBlock5MinIntvl1MinSubIntvl'
    '''
    5-minute Rolling Block with 1-minute sub-intervals
    '''

    rollingBlock60MinIntvl10MinSubIntvl = 'rollingBlock60MinIntvl10MinSubIntvl'
    '''
    60-minute Rolling Block with 10-minute sub-intervals
    '''

    rollingBlock60MinIntvl12MinSubIntvl = 'rollingBlock60MinIntvl12MinSubIntvl'
    '''
    60-minute Rolling Block with 12-minute sub-intervals
    '''

    rollingBlock60MinIntvl15MinSubIntvl = 'rollingBlock60MinIntvl15MinSubIntvl'
    '''
    60-minute Rolling Block with 15-minute sub-intervals
    '''

    rollingBlock60MinIntvl20MinSubIntvl = 'rollingBlock60MinIntvl20MinSubIntvl'
    '''
    60-minute Rolling Block with 20-minute sub-intervals
    '''

    rollingBlock60MinIntvl30MinSubIntvl = 'rollingBlock60MinIntvl30MinSubIntvl'
    '''
    60-minute Rolling Block with 30-minute sub-intervals
    '''

    rollingBlock60MinIntvl4MinSubIntvl = 'rollingBlock60MinIntvl4MinSubIntvl'
    '''
    60-minute Rolling Block with 4-minute sub-intervals
    '''

    rollingBlock60MinIntvl5MinSubIntvl = 'rollingBlock60MinIntvl5MinSubIntvl'
    '''
    60-minute Rolling Block with 5-minute sub-intervals
    '''

    rollingBlock60MinIntvl6MinSubIntvl = 'rollingBlock60MinIntvl6MinSubIntvl'
    '''
    60-minute Rolling Block with 6-minute sub-intervals
    '''

    sixtyMinute = 'sixtyMinute'
    '''
    60-minute
    '''

    tenMinute = 'tenMinute'
    '''
    10-minute
    '''

    thirtyMinute = 'thirtyMinute'
    '''
    30-minute
    '''

    threeMinute = 'threeMinute'
    '''
    3-minute
    '''

    twentyMinute = 'twentyMinute'
    '''
    20-minute interval
    '''

    twentyfourHour = 'twentyfourHour'
    '''
    24-hour
    '''

    twoMinute = 'twoMinute'
    '''
    2-minute
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MediumKind(Enum):
    '''
    Kind of medium.
    '''

    SF6 = 'SF6'
    '''
    Medium is SF6.
    '''

    SF6CF4 = 'SF6CF4'
    '''
    Medium is SF6CF4.
    '''

    SF6N2 = 'SF6N2'
    '''
    Medium is SF6N2.
    '''

    air = 'air'
    '''
    Medium is air.
    '''

    gas = 'gas'
    '''
    Medium is gas.
    '''

    liquid = 'liquid'
    '''
    Medium is liquid.
    '''

    mineralOil = 'mineralOil'
    '''
    Medium is mineral oil.
    '''

    solid = 'solid'
    '''
    Medium is solid.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MeterMultiplierKind(Enum):
    '''
    Kind of meter multiplier.
    '''

    ctRatio = 'ctRatio'
    '''
    Current transformer ratio used to convert associated quantities to
    real measurements.
    '''

    kE = 'kE'
    '''
    Test constant.
    '''

    kH = 'kH'
    '''
    Meter kh (watthour) constant. The number of watthours that must be
    applied to the meter to cause one disk revolution for an electromechanical
    meter or the number of watthours represented by one increment pulse
    for an electronic meter.
    '''

    kR = 'kR'
    '''
    Register multiplier. The number to multiply the register reading by
    in order to get kWh.
    '''

    ptRatio = 'ptRatio'
    '''
    Potential transformer ratio used to convert associated quantities to
    real measurements.
    '''

    transformerRatio = 'transformerRatio'
    '''
    Product of the CT ratio and PT ratio.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 MktAccountKind(Enum):
    '''
    Kind of Market account.
    '''

    estimate = 'estimate'
    '''
    '''

    normal = 'normal'
    '''
    '''

    reversal = 'reversal'
    '''
    '''

    statistical = 'statistical'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class MktSubClassType(Enum):
    '''
    '''

    Branch_Group_Derates = 'Branch_Group_Derates'
    '''
    '''

    Day_Ahead_Final_Market_Info = 'Day_Ahead_Final_Market_Info'
    '''
    '''

    Day_Ahead_Forecast_Information = 'Day_Ahead_Forecast_Information'
    '''
    '''

    Day_Ahead_Interim_Market_Info = 'Day_Ahead_Interim_Market_Info'
    '''
    '''

    Day_Ahead_RMR = 'Day_Ahead_RMR'
    '''
    '''

    Forecasted_UDC_Direct_Access_Load = 'Forecasted_UDC_Direct_Access_Load'
    '''
    '''

    Hour_Ahead_Market_Info = 'Hour_Ahead_Market_Info'
    '''
    '''

    Hourly_Expost_Market_Info = 'Hourly_Expost_Market_Info'
    '''
    '''

    Public_Bid_Data = 'Public_Bid_Data'
    '''
    '''

    TTCATC_Forecast_Information = 'TTCATC_Forecast_Information'
    '''
    '''

    TTCATC_Hourly_Forecast = 'TTCATC_Hourly_Forecast'
    '''
    '''

    Ten_Min_Expost_Market_Info = 'Ten_Min_Expost_Market_Info'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class NotificationTriggerKind(Enum):
    '''
    Kind of trigger to notify customer.
    '''

    etrChange = 'etrChange'
    '''
    Notify customer if estimated restoration time changes.
    '''

    informDispatched = 'informDispatched'
    '''
    Notify customer that a crew has been dispatched to investigate the
    problem.
    '''

    initialEtr = 'initialEtr'
    '''
    Notify customer for the first time that estimated restoration time
    is available.
    '''

    powerOut = 'powerOut'
    '''
    Notify customer of planned outage.
    '''

    powerRestored = 'powerRestored'
    '''
    Notify customer when power has been restored.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISBidReportType(Enum):
    '''
    '''

    BIDS_PUBLIC = 'BIDS_PUBLIC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISDataItems(Enum):
    '''
    '''

    AS_CLEAR_ASMP_IFM = 'AS_CLEAR_ASMP_IFM'
    '''
    '''

    AS_CLEAR_ASMP_RTM = 'AS_CLEAR_ASMP_RTM'
    '''
    '''

    AS_CLEAR_COST_IFM = 'AS_CLEAR_COST_IFM'
    '''
    '''

    AS_CLEAR_COST_RTM = 'AS_CLEAR_COST_RTM'
    '''
    '''

    AS_CLEAR_MW_IFM = 'AS_CLEAR_MW_IFM'
    '''
    '''

    AS_CLEAR_MW_RTM = 'AS_CLEAR_MW_RTM'
    '''
    '''

    AS_GEN_TOTAL_MW_IFM = 'AS_GEN_TOTAL_MW_IFM'
    '''
    '''

    AS_GEN_TOTAL_MW_RTM = 'AS_GEN_TOTAL_MW_RTM'
    '''
    '''

    AS_IMP_TOTAL_MW_IFM = 'AS_IMP_TOTAL_MW_IFM'
    '''
    '''

    AS_IMP_TOTAL_MW_RTM = 'AS_IMP_TOTAL_MW_RTM'
    '''
    '''

    AS_LOAD_TOTAL_MW_IFM = 'AS_LOAD_TOTAL_MW_IFM'
    '''
    '''

    AS_LOAD_TOTAL_MW_RTM = 'AS_LOAD_TOTAL_MW_RTM'
    '''
    '''

    AS_REGION_REQ_MAX = 'AS_REGION_REQ_MAX'
    '''
    '''

    AS_REGION_REQ_MIN = 'AS_REGION_REQ_MIN'
    '''
    '''

    AS_REGION_value = 'AS_REGION_value'
    '''
    '''

    AS_SELF_MW_IFM = 'AS_SELF_MW_IFM'
    '''
    '''

    AS_SELF_MW_RTM = 'AS_SELF_MW_RTM'
    '''
    '''

    AS_TOTAL_MW = 'AS_TOTAL_MW'
    '''
    '''

    AS_TOTAL_MW_IFM = 'AS_TOTAL_MW_IFM'
    '''
    '''

    AS_TOTAL_MW_RTM = 'AS_TOTAL_MW_RTM'
    '''
    '''

    AS_TYPE = 'AS_TYPE'
    '''
    '''

    AS_USER_RATE = 'AS_USER_RATE'
    '''
    '''

    CA_value = 'CA_value'
    '''
    '''

    CMMT_MINLOAD_MLC = 'CMMT_MINLOAD_MLC'
    '''
    '''

    CMMT_MINLOAD_MW = 'CMMT_MINLOAD_MW'
    '''
    '''

    CMMT_RA_MLC = 'CMMT_RA_MLC'
    '''
    '''

    CMMT_RA_MW = 'CMMT_RA_MW'
    '''
    '''

    CMMT_RA_START_COST = 'CMMT_RA_START_COST'
    '''
    '''

    CMMT_RA_UNITS = 'CMMT_RA_UNITS'
    '''
    '''

    CMMT_TOTAL_MW = 'CMMT_TOTAL_MW'
    '''
    '''

    CMMT_TOTAL_START_COST = 'CMMT_TOTAL_START_COST'
    '''
    '''

    CMMT_TOTAL_UNITS = 'CMMT_TOTAL_UNITS'
    '''
    '''

    CRR_CAT = 'CRR_CAT'
    '''
    '''

    CRR_MARKET_value = 'CRR_MARKET_value'
    '''
    '''

    CRR_MW = 'CRR_MW'
    '''
    '''

    CRR_NSR = 'CRR_NSR'
    '''
    '''

    CRR_OPTION = 'CRR_OPTION'
    '''
    '''

    CRR_OWNER = 'CRR_OWNER'
    '''
    '''

    CRR_SEGMENT = 'CRR_SEGMENT'
    '''
    '''

    CRR_TERM = 'CRR_TERM'
    '''
    '''

    CRR_TOU = 'CRR_TOU'
    '''
    '''

    CRR_TYPE = 'CRR_TYPE'
    '''
    '''

    ENE_EA_DA = 'ENE_EA_DA'
    '''
    '''

    ENE_EA_EXCEPT = 'ENE_EA_EXCEPT'
    '''
    '''

    ENE_EA_HASP = 'ENE_EA_HASP'
    '''
    '''

    ENE_EA_MLE = 'ENE_EA_MLE'
    '''
    '''

    ENE_EA_MSSLF = 'ENE_EA_MSSLF'
    '''
    '''

    ENE_EA_OPTIMAL = 'ENE_EA_OPTIMAL'
    '''
    '''

    ENE_EA_RAMP_DEV = 'ENE_EA_RAMP_DEV'
    '''
    '''

    ENE_EA_RAMP_STD = 'ENE_EA_RAMP_STD'
    '''
    '''

    ENE_EA_RESIDUAL = 'ENE_EA_RESIDUAL'
    '''
    '''

    ENE_EA_RMR = 'ENE_EA_RMR'
    '''
    '''

    ENE_EA_SELF = 'ENE_EA_SELF'
    '''
    '''

    ENE_EA_SLIC = 'ENE_EA_SLIC'
    '''
    '''

    ENE_EXP_CLEAR_HASP = 'ENE_EXP_CLEAR_HASP'
    '''
    '''

    ENE_EXP_CLEAR_IFM = 'ENE_EXP_CLEAR_IFM'
    '''
    '''

    ENE_EXP_CLEAR_RTM = 'ENE_EXP_CLEAR_RTM'
    '''
    '''

    ENE_GEN_CLEAR_HASP = 'ENE_GEN_CLEAR_HASP'
    '''
    '''

    ENE_GEN_CLEAR_IFM = 'ENE_GEN_CLEAR_IFM'
    '''
    '''

    ENE_GEN_CLEAR_RTM = 'ENE_GEN_CLEAR_RTM'
    '''
    '''

    ENE_IMP_CLEAR_HASP = 'ENE_IMP_CLEAR_HASP'
    '''
    '''

    ENE_IMP_CLEAR_IFM = 'ENE_IMP_CLEAR_IFM'
    '''
    '''

    ENE_IMP_CLEAR_RTM = 'ENE_IMP_CLEAR_RTM'
    '''
    '''

    ENE_LOAD_ACTUAL = 'ENE_LOAD_ACTUAL'
    '''
    '''

    ENE_LOAD_CLEAR_HASP = 'ENE_LOAD_CLEAR_HASP'
    '''
    '''

    ENE_LOAD_CLEAR_IFM = 'ENE_LOAD_CLEAR_IFM'
    '''
    '''

    ENE_LOAD_CLEAR_RTM = 'ENE_LOAD_CLEAR_RTM'
    '''
    '''

    ENE_LOAD_FCST = 'ENE_LOAD_FCST'
    '''
    '''

    ENE_PEAK_HOUR = 'ENE_PEAK_HOUR'
    '''
    '''

    ENE_PEAK_LOAD = 'ENE_PEAK_LOAD'
    '''
    '''

    FUEL_REGION_value = 'FUEL_REGION_value'
    '''
    '''

    INVT_DATETIME = 'INVT_DATETIME'
    '''
    '''

    LOAD_ACTUAL = 'LOAD_ACTUAL'
    '''
    '''

    LOAD_CLEAR_RTM = 'LOAD_CLEAR_RTM'
    '''
    '''

    LOSS_TOTAL_COST_HASP = 'LOSS_TOTAL_COST_HASP'
    '''
    '''

    LOSS_TOTAL_COST_RTM = 'LOSS_TOTAL_COST_RTM'
    '''
    '''

    LOSS_TOTAL_MW_HASP = 'LOSS_TOTAL_MW_HASP'
    '''
    '''

    LOSS_TOTAL_MW_RTM = 'LOSS_TOTAL_MW_RTM'
    '''
    '''

    MPM_FLAG = 'MPM_FLAG'
    '''
    '''

    OP_RSRV_TOTAL = 'OP_RSRV_TOTAL'
    '''
    '''

    PRC_NG = 'PRC_NG'
    '''
    '''

    PRC_SHADOW = 'PRC_SHADOW'
    '''
    '''

    RATING_ATC = 'RATING_ATC'
    '''
    '''

    RMR_DETER_DAM = 'RMR_DETER_DAM'
    '''
    '''

    RMR_DETER_HASP = 'RMR_DETER_HASP'
    '''
    '''

    RMR_DISPATCH_DAM = 'RMR_DISPATCH_DAM'
    '''
    '''

    RMR_DISPATCH_HASP = 'RMR_DISPATCH_HASP'
    '''
    '''

    RMR_TOTAL = 'RMR_TOTAL'
    '''
    '''

    RMR_TOTAL_AVAIL = 'RMR_TOTAL_AVAIL'
    '''
    '''

    RUC_GEN_CLEAR_RUC = 'RUC_GEN_CLEAR_RUC'
    '''
    '''

    RUC_IMP_CLEAR_RUC = 'RUC_IMP_CLEAR_RUC'
    '''
    '''

    RUC_LOAD_CLEAR_RUC = 'RUC_LOAD_CLEAR_RUC'
    '''
    '''

    RUC_ZONE_value = 'RUC_ZONE_value'
    '''
    '''

    TAC_AREA_value = 'TAC_AREA_value'
    '''
    '''

    TINTRFCE_value = 'TINTRFCE_value'
    '''
    '''

    TRNS_AS_IMPORT = 'TRNS_AS_IMPORT'
    '''
    '''

    TRNS_ENE_IMPORT = 'TRNS_ENE_IMPORT'
    '''
    '''

    TRNS_EQUIP_value = 'TRNS_EQUIP_value'
    '''
    '''

    TRNS_RATING_CBM = 'TRNS_RATING_CBM'
    '''
    '''

    TRNS_RATING_DIRECTION = 'TRNS_RATING_DIRECTION'
    '''
    '''

    TRNS_RATING_OTC = 'TRNS_RATING_OTC'
    '''
    '''

    TRNS_RATING_OTC_DERATE = 'TRNS_RATING_OTC_DERATE'
    '''
    '''

    TRNS_RATING_TTC = 'TRNS_RATING_TTC'
    '''
    '''

    TRNS_TI_value = 'TRNS_TI_value'
    '''
    '''

    TRNS_TR_ENTMTS = 'TRNS_TR_ENTMTS'
    '''
    '''

    TRNS_TR_USEAGE = 'TRNS_TR_USEAGE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISErrCode(Enum):
    '''
    '''

    _1000 = '_1000'
    '''
    '''

    _1001 = '_1001'
    '''
    '''

    _1002 = '_1002'
    '''
    '''

    _1003 = '_1003'
    '''
    '''

    _1004 = '_1004'
    '''
    '''

    _1005 = '_1005'
    '''
    '''

    _1006 = '_1006'
    '''
    '''

    _1007 = '_1007'
    '''
    '''

    _1008 = '_1008'
    '''
    '''

    _1009 = '_1009'
    '''
    '''

    _1010 = '_1010'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISErrDescription(Enum):
    '''
    '''

    Datacanberequestedforperiodof31daysonly = 'Datacanberequestedforperiodof31daysonly'
    '''
    '''

    ExceptionsinreadingandwritingofXMLfiles = 'ExceptionsinreadingandwritingofXMLfiles'
    '''
    '''

    Invaliddateformatpleaseusevaliddateformat = 'Invaliddateformatpleaseusevaliddateformat'
    '''
    '''

    Nodatareturnedforthespecifiedselection = 'Nodatareturnedforthespecifiedselection'
    '''
    '''

    Outofmemoryexception = 'Outofmemoryexception'
    '''
    '''

    Reportnamedoesnotexitpleaseusevalidreportname = 'Reportnamedoesnotexitpleaseusevalidreportname'
    '''
    '''

    Requiredfiledoesnotexist = 'Requiredfiledoesnotexist'
    '''
    '''

    SystemError = 'SystemError'
    '''
    '''

    Timedoutwaitingforqueryresponse = 'Timedoutwaitingforqueryresponse'
    '''
    '''

    ValidationexceptionduringtransformationofXML = 'ValidationexceptionduringtransformationofXML'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISIntervalType(Enum):
    '''
    '''

    BEGINNING = 'BEGINNING'
    '''
    '''

    ENDING = 'ENDING'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISMarketType(Enum):
    '''
    '''

    All = 'All'
    '''
    '''

    HASP = 'HASP'
    '''
    '''

    IFM = 'IFM'
    '''
    '''

    NA = 'NA'
    '''
    '''

    RTM = 'RTM'
    '''
    '''

    RUC = 'RUC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISMasterType(Enum):
    '''
    '''

    ATL_APNODE = 'ATL_APNODE'
    '''
    '''

    ATL_AS_REGION = 'ATL_AS_REGION'
    '''
    '''

    ATL_AS_REGION_MAP = 'ATL_AS_REGION_MAP'
    '''
    '''

    ATL_HUB = 'ATL_HUB'
    '''
    '''

    ATL_LAP = 'ATL_LAP'
    '''
    '''

    ATL_LDF = 'ATL_LDF'
    '''
    '''

    ATL_PNODE = 'ATL_PNODE'
    '''
    '''

    ATL_PNODE_MAP = 'ATL_PNODE_MAP'
    '''
    '''

    ATL_PUB = 'ATL_PUB'
    '''
    '''

    ATL_PUB_SCHED = 'ATL_PUB_SCHED'
    '''
    '''

    ATL_RESOURCE = 'ATL_RESOURCE'
    '''
    '''

    ATL_RUC_ZONE = 'ATL_RUC_ZONE'
    '''
    '''

    ATL_RUC_ZONE_MAP = 'ATL_RUC_ZONE_MAP'
    '''
    '''

    ATL_STAT = 'ATL_STAT'
    '''
    '''

    ATL_TAC_AREA = 'ATL_TAC_AREA'
    '''
    '''

    ATL_TAC_AREA_MAP = 'ATL_TAC_AREA_MAP'
    '''
    '''

    ATL_TI = 'ATL_TI'
    '''
    '''

    ATL_TIEPOINT = 'ATL_TIEPOINT'
    '''
    '''

    ATL_XREF = 'ATL_XREF'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISMeasType(Enum):
    '''
    '''

    FACTOR = 'FACTOR'
    '''
    '''

    FLAG = 'FLAG'
    '''
    '''

    INTEGER = 'INTEGER'
    '''
    '''

    MW = 'MW'
    '''
    '''

    MWh = 'MWh'
    '''
    '''

    US = 'US'
    '''
    '''

    USMW = 'USMW'
    '''
    '''

    USMWh = 'USMWh'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISReportType(Enum):
    '''
    '''

    AS_DA_RESULT = 'AS_DA_RESULT'
    '''
    '''

    AS_OP_RSRV = 'AS_OP_RSRV'
    '''
    '''

    AS_REQ = 'AS_REQ'
    '''
    '''

    AS_RTM_RESULT = 'AS_RTM_RESULT'
    '''
    '''

    BIDS_PUBLIC = 'BIDS_PUBLIC'
    '''
    '''

    CMMT_RA_MLC = 'CMMT_RA_MLC'
    '''
    '''

    CMMT_RMR = 'CMMT_RMR'
    '''
    '''

    CRR_CLEARING = 'CRR_CLEARING'
    '''
    '''

    CRR_INVENTORY = 'CRR_INVENTORY'
    '''
    '''

    ENE_EA = 'ENE_EA'
    '''
    '''

    ENE_HASP = 'ENE_HASP'
    '''
    '''

    ENE_IFM = 'ENE_IFM'
    '''
    '''

    ENE_MPM = 'ENE_MPM'
    '''
    '''

    ENE_RTM = 'ENE_RTM'
    '''
    '''

    ENE_RUC = 'ENE_RUC'
    '''
    '''

    LOSS_DA_HASP = 'LOSS_DA_HASP'
    '''
    '''

    LOSS_RTM = 'LOSS_RTM'
    '''
    '''

    PRC_AS = 'PRC_AS'
    '''
    '''

    PRC_CNSTR = 'PRC_CNSTR'
    '''
    '''

    PRC_FUEL = 'PRC_FUEL'
    '''
    '''

    PRC_HRLY_LMP = 'PRC_HRLY_LMP'
    '''
    '''

    PRC_INTVL_LMP = 'PRC_INTVL_LMP'
    '''
    '''

    SLD_FCST = 'SLD_FCST'
    '''
    '''

    SLD_FCST_PEAK = 'SLD_FCST_PEAK'
    '''
    '''

    SLD_MKTS = 'SLD_MKTS'
    '''
    '''

    TRNS_ATC = 'TRNS_ATC'
    '''
    '''

    TRNS_OUTAGE = 'TRNS_OUTAGE'
    '''
    '''

    TRNS_USAGE = 'TRNS_USAGE'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OASISStatusType(Enum):
    '''
    '''

    Data_Transfer_Procedure_Initiated = 'Data_Transfer_Procedure_Initiated'
    '''
    '''

    Data_Transfer_Succesful = 'Data_Transfer_Succesful'
    '''
    '''

    Forced_Termination = 'Forced_Termination'
    '''
    '''

    Obsolete = 'Obsolete'
    '''
    '''

    Push_Failed = 'Push_Failed'
    '''
    '''

    Valid = 'Valid'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisFluidAnalogKind(Enum):
    '''
    Analogs representing oil fluid test analysis result.
    '''

    acidNumber = 'acidNumber'
    '''
    Acid neutralization number (in milligram of KOH/gram).
    '''

    additiveDBDS = 'additiveDBDS'
    '''
    Dibenzyl disulfide (DBDS) concentration (in ppm, specificially in milligram/kilogram).
    '''

    aromatics = 'aromatics'
    '''
    Concentration of aromatic compounds determined using infrared spectroscopy
    (in percent).
    '''

    carbonyl = 'carbonyl'
    '''
    Concentration of carbonyl compounds (aldehydes and ketones) determined
    using infrared spectroscopy (in percent).
    '''

    density = 'density'
    '''
    Density (in gram/millilitre).
    '''

    dielectricBreakdown = 'dielectricBreakdown'
    '''
    Dielectric breakdown, for electrode gap size and temperature specified
    by selected standard (in kV).
    '''

    dissipationFactor = 'dissipationFactor'
    '''
    Fluid dissipation factor in absolute value, not a percentage. (Multiplying
    this value by 100 would result in dissipation factor percent).
    '''

    dissipationFactorPercent = 'dissipationFactorPercent'
    '''
    Fluid dissipation factor (in percent). Commonly used in Asia. Dissipation
    factor is also known as loss factor or tan delta.
    '''

    duration61125MethodC = 'duration61125MethodC'
    '''
    Duration of oxidation stablity test performed according to IEC 61125,
    method C. This value should accompany values resulting from testing
    according to IEC 61125, method C to allow interpretation. Standard
    specified values are: 164, 332, and 500, but others can be used if
    agreed upon.
    '''

    firePoint = 'firePoint'
    '''
    Fire point (in �C). Fire point is when fire is sustained (oil catches
    fire). Can only be done by means of open cup test, which is commonly
    used in US.
    '''

    flashPointClosedCup = 'flashPointClosedCup'
    '''
    Flash point (in �C) determined via closed cup test. Flash point occurs
    when enough vapors have accumulated to sustain a flash. Closed cup
    is used in Europe.
    '''

    flashPointOpenCup = 'flashPointOpenCup'
    '''
    Flash point (in �C) determined via open cup test. Flash point occurs
    when enough vapors have accumulated to sustain a flash. Open cup is
    used in US.
    '''

    inductionTime = 'inductionTime'
    '''
    Oxidation induction time (in hours). Typically performed on new oil,but
    can be done on used oil.
    '''

    inhibitor61125MethodC = 'inhibitor61125MethodC'
    '''
    Amount of inhibitor used in oxidation stablity test performed according
    to IEC 61125, method C. This value should accompany values resulting
    from testing according to IEC 61125, method C to allow interpretation.
    '''

    interfacialTension = 'interfacialTension'
    '''
    Interfacial tension (in dyne/centimetre or milliNewton/metre, which
    are the same).
    '''

    kinematicViscosity = 'kinematicViscosity'
    '''
    Kinematic viscosity (in millimetre2/second). Kinematic viscosity is
    the ratio of - absolute (or dynamic) viscosity to density.
    '''

    oxidation = 'oxidation'
    '''
    Measure of oxidation stability (in hours).
    '''

    oxidationInhibitorD2668 = 'oxidationInhibitorD2668'
    '''
    2,6-ditertiary-butyl para-cresol and 2,6-ditertiary-butyl phenol concentration
    (in percent by weight).
    '''

    oxidationInhibitorDBP = 'oxidationInhibitorDBP'
    '''
    2,6-ditertiary-butyl phenol (DBP) oxidation inhibitor concentration
    (in percent by weight).
    '''

    oxidationInhibitorDBPC = 'oxidationInhibitorDBPC'
    '''
    2,6-ditertiarybutyl para-cresol (DBPC) oxidation inhibitor concentration
    (in percent by weight).
    '''

    passivatorBTA = 'passivatorBTA'
    '''
    Metal passivator BTA content (in milligram/kilogram).
    '''

    passivatorContent = 'passivatorContent'
    '''
    Total passivator content (in milligram/kilogram).
    '''

    passivatorIrgamet39 = 'passivatorIrgamet39'
    '''
    Irgamet 39 metal passivator content (in ppm, specifically milligram/kilogram).
    '''

    passivatorTTA = 'passivatorTTA'
    '''
    Metal passivator TTA (Irgamet39 in solid form) content (in milligram/kilogram).
    '''

    petroleumOrigin = 'petroleumOrigin'
    '''
    Characterization of the carbon-type composition of insulating oils
    by petroleum origin.
    '''

    pourPoint = 'pourPoint'
    '''
    Pour point (in �C). The pour point of a liquid is the temperature at
    which it becomes semi solid and loses its flow characteristics.
    '''

    pourPointAutomatic = 'pourPointAutomatic'
    '''
    Pour point (in �C) determined by automatic method. The pour point of
    a liquid is the temperature at which it becomes semi solid and loses
    its flow characteristics.
    '''

    powerFactorPercent = 'powerFactorPercent'
    '''
    Fluid power factor at specified temperature (in percent). Commonly
    used in US. (Note: Fluid power factor is very similar to fluid dissapation
    factor, but fluid power factor is cosine of the phase angle between
    an AC voltage applied to oil and the resulting current (where dissipation
    factor is the tangent). For values up to 0.005, fluid power factor
    and dissapation factor are very close. There is a conversion equation
    between the two).
    '''

    resistivity = 'resistivity'
    '''
    Resistivity at 90�C (in gigohm-metre).
    '''

    sedimentAndSludgePercent = 'sedimentAndSludgePercent'
    '''
    Sediment and sludge (in percent).
    '''

    sludge = 'sludge'
    '''
    Sludge (in percent by mass). Typically performed on new oil,but can
    be done on used oil.
    '''

    solubleAcids = 'solubleAcids'
    '''
    Soluble acids (in milligram of KOH/gram). Typically performed on new
    oil,but can be done on used oil.
    '''

    specificGravity = 'specificGravity'
    '''
    Specific gravity corrected to 15�C. Also known as relative density.
    It is a ratio of density of tested oil to density of water at a specific
    temperature.
    '''

    staticElectrification = 'staticElectrification'
    '''
    Static electrification tendency (in microcoulombs per metre3). Also
    called static charging tendency and electrostatic charging tendency
    (ECT).
    '''

    totalAcids = 'totalAcids'
    '''
    Total acids (soluble plus volatile) (in milligram of KOH/gram). Typically
    performed on new oil,but can be done on used oil.
    '''

    volatileAcids = 'volatileAcids'
    '''
    Volatile acids (in milligram of KOH/gram). Typically performed on new
    oil,but can be done on used oil.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisFluidDiscreteKind(Enum):
    '''
    Discretes representing oil fluid test analysis result.
    '''

    colorNumber = 'colorNumber'
    '''
    Fluid color index number. Color numbers are expressed in 0.5 intervals
    and value specified is "less-than". For example, a value of '2.5' means
    the color index number is between 2.0 and 2.5.
    Possible values: 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0,
    5.5, 6.0, 6.5, 7.0, 7.5, 8.0.
    '''

    colorNumberPlatinumCobaltScale = 'colorNumberPlatinumCobaltScale'
    '''
    Fluid color index on the platinum cobalt scale.
    Possible values: 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 100, 150,
    200, 250, 300, 350, 400, 450.
    '''

    corrosiveSulphurBy51353 = 'corrosiveSulphurBy51353'
    '''
    Corrosive sulphur test result using silver strip test.
    Possible values: absent, present.
    '''

    corrosiveSulphurBy62535 = 'corrosiveSulphurBy62535'
    '''
    Corrosive sulphur test result using covered (copper) conductor deposition
    test.
    Possible values: potentiallyCorrosive, nonCorrosive.
    '''

    corrosiveSulphurByD1275 = 'corrosiveSulphurByD1275'
    '''
    Corrosive sulphur test result using bare copper strip test.
    Possible values: corrosive, nonCorrosive.
    '''

    sludgePrecipitation = 'sludgePrecipitation'
    '''
    Sludge precipitation test results.
    Possible values: present, notPresent.
    '''

    tarnishLevel = 'tarnishLevel'
    '''
    Tarnish level indicated by corrosive sulphur test.
    Possible values: 1A, 1B, 2A, 2B, 2C, 2D, 2E, 3A, 3B, 4A, 4B, 4C.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisGasAnalogKind(Enum):
    '''
    Analogs representing oil dissolved gas analysis result.
    '''

    acetylene = 'acetylene'
    '''
    C2H2 concentration (in ppm, specifically in microlitre/litre).
    '''

    butane = 'butane'
    '''
    C4H10 concentration (in ppm, specifically in microlitre/litre).
    '''

    carbon = 'carbon'
    '''
    C? concentration (in ppm, specifically in microlitre/litre).
    '''

    carbon3 = 'carbon3'
    '''
    C3 concentration (in ppm, specifically in microlitre/litre).
    '''

    carbon4 = 'carbon4'
    '''
    C4 concentration (in ppm, specifically in microlitre/litre).
    '''

    carbonDioxide = 'carbonDioxide'
    '''
    CO2 concentration (in ppm, specifically in microlitre/litre).
    '''

    carbonMonoxide = 'carbonMonoxide'
    '''
    CO concentration (in ppm, specifically in microlitre/litre).
    '''

    equivalentTCGPercent = 'equivalentTCGPercent'
    '''
    Equivalent Total Combustible Gas (ETCG) percent.
    An estimate, calculated from the dissolved-gas concentrations and the
    oil sample temperature, of what the TCG would be in a gas space in
    equilibrium with the oil. ETCG reflects what the TCG would be in air
    spaces near the oil.
    '''

    estimatedSafeHandlingLimit = 'estimatedSafeHandlingLimit'
    '''
    Estimated Safe Handling Limit (ESHL) (in percent). Estimated safe handling
    limit is an estimate of the lower flammability limit (LFL) of the combustible
    gas mixture which the dissolved gas in the oil would give off by the
    oil if exposed to air.
    Expressed in percent like the equivalent total combustible gas percent,
    it is calculated from the dissolved-gas concentrations, the oil sample
    temperature, and the lower flammability limits of the individual combustible
    gases.
    '''

    ethane = 'ethane'
    '''
    C2H6 concentration (in ppm, specifically in microlitre/litre).
    '''

    ethylene = 'ethylene'
    '''
    C2H4 concentration (in ppm, specifically in microlitre/litre).
    '''

    hydran = 'hydran'
    '''
    Measured composite of dissolved fault gas concentrations (in ppm, specifically
    in microlitre/litre). Relative sensitivity
    - H2: 100 % of concentration
    - CO: 15 � 4 % of concentration
    - C2H2: 8 � 2 % of concentration
    - C2H4: 1.5 � 0.5 % of concentration.
    '''

    hydranPredicted = 'hydranPredicted'
    '''
    Predicted hydran value (in ppm, specifically in microlitre/litre),
    calculated based on individual measured dissolved gas concentrations.
    - H2: 100 % of concentration
    - CO: 15 � 4 % of concentration
    - C2H2: 8 � 2 % of concentration
    - C2H4: 1.5 � 0.5 % of concentration
    '''

    hydrogen = 'hydrogen'
    '''
    H2 concentration (in ppm, specifically in microlitre/litre).
    '''

    isobutane = 'isobutane'
    '''
    isoC4 (C4H10) concentration (in ppm, specifically in microlitre/litre).
    Isobutane is also known as methylpropane.
    '''

    methane = 'methane'
    '''
    CH4 concentration (in ppm, specifically in microlitre/litre).
    '''

    nitrogen = 'nitrogen'
    '''
    N2 concentration (in ppm, specifically in microlitre/litre).
    '''

    oxygen = 'oxygen'
    '''
    O2 concentration (in ppm, specifically in microlitre/litre).
    '''

    propane = 'propane'
    '''
    C3H8 concentration (in ppm, specifically in microlitre/litre).
    '''

    propene = 'propene'
    '''
    C3H6 concentration (in ppm, specifically in microlitre/litre).
    '''

    totalCombustibleGasPercent = 'totalCombustibleGasPercent'
    '''
    Total Combustible Gas (TCG) measured in headspace (in percent by volume).
    '''

    totalDissolvedCombustibleGas = 'totalDissolvedCombustibleGas'
    '''
    Total dissolved combustible gas concentration (in ppm, specifically
    in microlitre/litre). Calculated by adding the ppm of combustible gasses:
    hydrogen (H2), methane (CH4), ethane (C2H6), ethylene (C2H4), acetylene
    (C2H2), and carbon monoxide (CO).
    '''

    totalDissolvedGasPercent = 'totalDissolvedGasPercent'
    '''
    Total dissolved gas in oil (in percent by volume). Derived from the
    total area of all the gas peaks in the chromatogram.
    '''

    totalHeatGas = 'totalHeatGas'
    '''
    Sum of concentrations of methane, ethane, and ethylene (in ppm, specifically
    in microlitre/litre). Used in some diagnostic gas ratios, especially
    THG/acetylene, which compares �heat gas� to �arcing gas.�
    '''

    totalPartialPressure = 'totalPartialPressure'
    '''
    Total partial pressure (in Pa).
    Calculated value reflecting total of partial pressures of all combustible
    gasses.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisMetalsAnalogKind(Enum):
    '''
    Analogs representing oil metals and elements analysis result.
    '''

    aluminum = 'aluminum'
    '''
    Aluminum concentration (in ppb, specifically in microgram/litre).
    '''

    aluminumParticulate = 'aluminumParticulate'
    '''
    Aluminum concentration of particles larger than 0.45 microns (in ppb,specifically
    in microgram/litre).
    '''

    barium = 'barium'
    '''
    Barium concentration (in ppb, specifically in microgram/litre).
    '''

    boron = 'boron'
    '''
    Boron concentration (in ppb, specifically in microgram/litre).
    '''

    cadmium = 'cadmium'
    '''
    Cadmium concentration (in ppb, specifically in microgram/litre).
    '''

    calcium = 'calcium'
    '''
    Calcium concentration (in ppb, specifically in microgram/litre).
    '''

    chromium = 'chromium'
    '''
    Chromium concentration (in ppb, specifically in microgram/litre).
    '''

    copper = 'copper'
    '''
    Copper concentration (in ppb, specifically in microgram/litre).
    '''

    copperParticulate = 'copperParticulate'
    '''
    Copper concentration of particles larger than 0.45 microns (in ppb,specifically
    in microgram/litre).
    '''

    iron = 'iron'
    '''
    Iron concentration (in ppb, specifically in microgram/litre).
    '''

    ironParticulate = 'ironParticulate'
    '''
    Iron concentration of particles larger than 0.45 microns (in ppb, specifically
    in microgram/litre).
    '''

    lead = 'lead'
    '''
    Lead concentration (in ppb, specifically in microgram/litre).
    '''

    leadParticulate = 'leadParticulate'
    '''
    Lead concentration of particles larger than 0.45 microns (in ppb, specifically
    in microgram/litre).
    '''

    lithium = 'lithium'
    '''
    Lithium concentration (in ppb, specifically in microgram/litre).
    '''

    magnesium = 'magnesium'
    '''
    Magnesium concentration (in ppb, specifically in microgram/litre).
    '''

    molybdenum = 'molybdenum'
    '''
    Molybdenum concentration (in ppb, specifically in microgram/litre).
    '''

    nickel = 'nickel'
    '''
    Nickel concentration (in ppb, specifically in microgram/litre).
    '''

    phosphorus = 'phosphorus'
    '''
    Phosphorus concentration (in ppb, specifically in microgram/litre).
    '''

    silicon = 'silicon'
    '''
    Silicon concentration (in ppb, specifically in microgram/litre).
    '''

    silver = 'silver'
    '''
    Silver concentration (in ppb, specifically in microgram/litre).
    '''

    silverParticulate = 'silverParticulate'
    '''
    Silver concentration of particles larger than 0.45 microns (in ppb,
    specifically in microgram/litre).
    '''

    sodium = 'sodium'
    '''
    Sodium concentration (in ppb, specifically in microgram/litre).
    '''

    tin = 'tin'
    '''
    Tin concentration (in ppb, specifically in microgram/litre).
    '''

    titanium = 'titanium'
    '''
    Titanium concentration (in ppb, specifically in microgram/litre).
    '''

    tungsten = 'tungsten'
    '''
    Tungsten concentration (in ppb, specifically in microgram/litre).
    '''

    vanadium = 'vanadium'
    '''
    Vanadium concentration (in ppb, specifically in microgram/litre).
    '''

    zinc = 'zinc'
    '''
    Zinc concentration (in ppb, specifically in microgram/litre).
    '''

    zincParticulate = 'zincParticulate'
    '''
    Zinc concentration of particles larger than 0.45 microns (in ppb, specifically
    in microgram/litre).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisMoistureAnalogKind(Enum):
    '''
    Analogs representing oil moisture analysis result.
    '''

    dewPoint = 'dewPoint'
    '''
    Dew point (in �C). Is usually a negative value.
    '''

    relativeSaturation = 'relativeSaturation'
    '''
    Relative saturation of water in fluid (in percent).
    '''

    relativeSaturationCalculated = 'relativeSaturationCalculated'
    '''
    Calculated relative saturation of water in fluid (in percent).
    '''

    waterContent = 'waterContent'
    '''
    Moisture measured via coulometric Karl Fischer titration (in ppm, specifically
    milligram/kilogram).
    '''

    waterContentMonitoredViaAluminumOxide = 'waterContentMonitoredViaAluminumOxide'
    '''
    Water content by aluminum oxide sensor (in ppm, specifically milligram/kilogram).
    '''

    waterContentMonitoredViaCapacitance = 'waterContentMonitoredViaCapacitance'
    '''
    Water content by capacitance sensor (in ppm, specifically milligram/kilogram).
    '''

    waterContentMonitoredViaInfrared = 'waterContentMonitoredViaInfrared'
    '''
    Water content by infrared sensor (in ppm, specifically milligram/kilogram).
    '''

    waterContentMonitoredViaOther = 'waterContentMonitoredViaOther'
    '''
    Water content by other sensor (in ppm, specifically milligram/kilogram).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisPCBAnalogKind(Enum):
    '''
    Analogs representing oil PCB analysis result.
    '''

    aroclor1016 = 'aroclor1016'
    '''
    Concentration of Aroclor 1016 (in ppm, specifically in mg/kg).
    '''

    aroclor1221 = 'aroclor1221'
    '''
    Concentration of Aroclor 1221 (in ppm, specifically in mg/kg).
    '''

    aroclor1242 = 'aroclor1242'
    '''
    Concentration of Aroclor 1242 (in ppm, specifically in mg/kg).
    '''

    aroclor1254 = 'aroclor1254'
    '''
    Concentration of Aroclor 1254 (in ppm, specifically in mg/kg).
    '''

    aroclor1260 = 'aroclor1260'
    '''
    Concentration of Aroclor 1260 (in ppm, specifically in mg/kg).
    '''

    totalPCB = 'totalPCB'
    '''
    Total arochlor (PCB) content (in ppm, specifically in mg/kg). Is the
    sum of Aroclor 1221, Aroclor 1242, Aroclor 1254, Aroclor 1260, Aroclor
    1016.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisPCBDiscreteKind(Enum):
    '''
    Discretes representing oil PCB test analysis result.
    '''

    testKitPCB = 'testKitPCB'
    '''
    Possible values: <blank>, <50, >50.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisPaperAnalogKind(Enum):
    '''
    Analogs representing oil paper degradation analysis result.
    '''

    acetylfuran = 'acetylfuran'
    '''
    2-acetylfuran (2ACF) (in ppb). Also known as: 2-acetylfuran, furyl
    methyl ketone, 2-furyl methyl ketone, methyl 2-furyl ketone, and 1-(2-furanyl)ethanone.
    '''

    degreeOfPolymerization = 'degreeOfPolymerization'
    '''
    Direct measurement of degree of polymerization (DP) (unitless).
    '''

    degreeOfPolymerizationCalculated = 'degreeOfPolymerizationCalculated'
    '''
    Calculated degree of polymerization (DP) calculated using the Chendong
    equation (unitless).
    '''

    ethanol = 'ethanol'
    '''
    Concentration of ethanol (in ppb, specifically microgram/kilogram).
    '''

    furfural = 'furfural'
    '''
    2-furaldehyde (2FAL) (in ppb). Also known as: 2-furfural, 2-furaldehyde,
    2-furanaldehyde, fural, furfuraldehyde, furaldehyde, and 2-furancarboxaldehyde.
    '''

    furfurylAlcohol = 'furfurylAlcohol'
    '''
    Furfuryl alcohol (2FOL) (in ppb). Also known as: 2-furyl alcohol, 2-furfurol,
    2-furylmethanol, 2-hydroxymethylfuran, 2-furancarbinol, furancarbinol,
    2-furanmethanol, furanmethanol, furfural alcohol, and alpha-furylcarbinol.
    '''

    hydroxymethylfurfural = 'hydroxymethylfurfural'
    '''
    5-hydroxymethyl-2-furaldehyde (5H2F) (in ppb). Also known as: 5-hydroxymethyl-2-furfural,
    5-hydroxymethyl-2-furaldehyde, 5-hydroxymethylfurfuraldehyde, and 5-hydroxymethylfurfural.
    '''

    methanol = 'methanol'
    '''
    Concentration of methanol (in ppb, specifically microgram/kilogram).
    '''

    methylfurfural = 'methylfurfural'
    '''
    5-methyl-2-furaldehyde (5M2F) (in ppb). Also known as: 5-methyl-2-furfural,
    5-methyl-2-furaldehyde, 5-methyl-2-furfuraldehyde, and 5-methylfurfural.
    '''

    solidInsulationDielectricStrength = 'solidInsulationDielectricStrength'
    '''
    Dielectric breakdown of solid electrical insulating materials (in kV).
    '''

    tensileStrength = 'tensileStrength'
    '''
    Tensile strength (in kilonewtons/metre).
    '''

    totalFuran = 'totalFuran'
    '''
    Total furan (in ppb). Is the total of the concentrations of 5-hydroxymethyl-2-furaldehyde
    (5H2F), furfuryl alcohol (2FOL), 2-furaldehyde (2FAL), 2-acetylfuran
    (2ACF), 5-methyl-2-furaldehyde (5M2F).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisParticleAnalogKind(Enum):
    '''
    Analogs representing oil particulate analysis result.
    '''

    carbonPercent = 'carbonPercent'
    '''
    Percent of particles which are carbon.
    '''

    count100Plus = 'count100Plus'
    '''
    Count of particles 100 microns and larger in a 1 millilitre sample.
    '''

    count10Plus = 'count10Plus'
    '''
    Count of particles 10 microns and larger in a 1 millilitre sample.
    '''

    count14Plus = 'count14Plus'
    '''
    Count of particles 14 microns and larger in a 1 millilitre sample.
    '''

    count15Plus = 'count15Plus'
    '''
    Count of particles 15 microns and larger in a 1 millilitre sample.
    '''

    count21Plus = 'count21Plus'
    '''
    Count of particles 21 microns and larger in a 1 millilitre sample.
    '''

    count25Plus = 'count25Plus'
    '''
    Count of particles 25 microns and larger in a 1 millilitre sample.
    '''

    count2Plus = 'count2Plus'
    '''
    Count of particles 2 microns and larger in a 1 millilitre sample.
    '''

    count38Plus = 'count38Plus'
    '''
    Count of particles 38 microns and larger in a 1 millilitre sample.
    '''

    count4Plus = 'count4Plus'
    '''
    Count of particles 4 microns and larger in a 1 millilitre sample.
    '''

    count50Plus = 'count50Plus'
    '''
    Count of particles 50 microns and larger in a 1 millilitre sample.
    '''

    count5Plus = 'count5Plus'
    '''
    Count of particles 5 microns and larger in a 1 millilitre sample.
    '''

    count6Plus = 'count6Plus'
    '''
    Count of particles 6 microns and larger in a 1 millilitre sample.
    '''

    count70Plus = 'count70Plus'
    '''
    Count of particles 70 microns and larger in a 1 millilitre sample.
    '''

    fibrePercent = 'fibrePercent'
    '''
    Percent of particles which are fibres.
    '''

    metalPercent = 'metalPercent'
    '''
    Percent of particles which are metal.
    '''

    otherPercent = 'otherPercent'
    '''
    Percent of particles which are 'other'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OilAnalysisParticleDiscreteKind(Enum):
    '''
    Discretes representing oil particulate analysis result.
    '''

    opacity = 'opacity'
    '''
    Opacity of oil.
    Possible values: any integer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AssetMeas'
    @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://iec.ch/TC57/CIM100#'
    @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 OilSampleLocation(Enum):
    '''
    Locations where oil can be sampled.
    '''

    oilDrainageDevice = 'oilDrainageDevice'
    '''
    Sample from oil drainage device.
    '''

    oilSampleValve = 'oilSampleValve'
    '''
    Sample from oil sample valve.
    '''

    other = 'other'
    '''
    Sample from other location.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 OilTemperatureSource(Enum):
    '''
    Sources for oil temperature.
    '''

    infraredGun = 'infraredGun'
    '''
    Oil temperature from infrared gun.
    '''

    other = 'other'
    '''
    Oil temperature from other souce.
    '''

    topOilTemperatureGauge = 'topOilTemperatureGauge'
    '''
    Oil temperature from top oil temperature gauge.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 OnOff(Enum):
    '''
    ON
    OFF
    '''

    OFF = 'OFF'
    '''
    '''

    ON = 'ON'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'OperationalLimits'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OrganisationCode(Enum):
    '''
    organization code
    '''

    BILL_TO = 'BILL_TO'
    '''
    '''

    PAY_TO = 'PAY_TO'
    '''
    '''

    PROVIDED_BY = 'PROVIDED_BY'
    '''
    '''

    SOLD_TO = 'SOLD_TO'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class OrganisationType(Enum):
    '''
    organization type
    '''

    CUSTOMER = 'CUSTOMER'
    '''
    '''

    RTO = 'RTO'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 OutageCauseKind(Enum):
    '''
    This enumeration describes the primary cause of the outage - planned, unplanned,
    etc.
    '''

    animal = 'animal'
    '''
    This outage was caused by an animal is was unplanned. As such it is
    treated as a forced outage and is probably classified as "trouble"
    with a Trouble Ticket as well as a work/service order. The primary
    difference between this and an unplanned outage is the reason for the
    outage. If an animal caused this and perished as a result, the utility
    may have other actions that are required to be taken by the EPA or
    other groups with whom the utility has an agreement.
    '''

    lightingStrike = 'lightingStrike'
    '''
    Outage is caused by a lighting strike
    '''

    lineDown = 'lineDown'
    '''
    The outage is caused by a line down
    '''

    poleDown = 'poleDown'
    '''
    The outage is caused by a pole down
    '''

    treeDown = 'treeDown'
    '''
    The outage is caused by a tree down
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class OutageStatusKind(Enum):
    '''
    This defines if the outage have been predicted or confirmed
    '''

    closed = 'closed'
    '''
    The outage has been fully restored, the crews have been released and
    the outage is shown as closed
    '''

    confirmed = 'confirmed'
    '''
    the outage has been verified
    '''

    partiallyRestored = 'partiallyRestored'
    '''
    Some of the usage points affected by the outage have been restored
    but other usage points are still out of power.
    '''

    predicted = 'predicted'
    '''
    the outage may not be real since it has not been verified - it is only
    thought to be an outage.
    '''

    restored = 'restored'
    '''
    All usage points associated with the outage have been restored
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PSREventKind(Enum):
    '''
    Kind of power system resource (PSR) event.
    '''

    inService = 'inService'
    '''
    Power system resource state change to in service.
    '''

    other = 'other'
    '''
    Other power system resource state change.
    '''

    outOfService = 'outOfService'
    '''
    Power system resource state change to out of service.
    '''

    pendingAdd = 'pendingAdd'
    '''
    Power system resource state change to pending add.
    '''

    pendingRemove = 'pendingRemove'
    '''
    Power system resource state change to pending remove.
    '''

    pendingReplace = 'pendingReplace'
    '''
    Power system resource state change to pending replace.
    '''

    unknown = 'unknown'
    '''
    Unknown power system resource state change.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ParticipationCategoryMPM(Enum):
    '''
    For example:
    'Y' - Participates in both LMPM and SMPM
    'N' - Not included in LMP price measures
    'S' - Participates in SMPM price measures
    'L' - Participates in LMPM price measures
    '''

    L = 'L'
    '''
    '''

    N = 'N'
    '''
    '''

    S = 'S'
    '''
    '''

    Y = 'Y'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 PassIndicatorType(Enum):
    '''
    Defines the individual passes that produce results per execution type/market
    type.
    '''

    DA = 'DA'
    '''
    Day Ahead
    '''

    HASCUC = 'HASCUC'
    '''
    Hour Ahead Security Constrained Unit Commitment
    '''

    MPM1 = 'MPM1'
    '''
    Market Power Mitigation Pass 1
    '''

    MPM2 = 'MPM2'
    '''
    Market Power Mitigation Pass 2
    '''

    MPM3 = 'MPM3'
    '''
    Market Power Mitigation Pass 3
    '''

    MPM4 = 'MPM4'
    '''
    Market Power Mitigation Pass 4
    '''

    RTED = 'RTED'
    '''
    Real Time Economic Dispatch
    '''

    RTPD = 'RTPD'
    '''
    Real Time Pre Dispatch
    '''

    RUC = 'RUC'
    '''
    Residual Unit Commitment
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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):
    '''
    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://iec.ch/TC57/CIM100#'
    @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 PhaseConnectedFaultKind(Enum):
    '''
    The type of fault connection among phases.
    '''

    lineOpen = 'lineOpen'
    '''
    The fault is when the conductor path is broken between two terminals.
    Additional coexisting faults may be required if the broken conductor
    also causes connections to grounds or other lines or phases.
    '''

    lineToGround = 'lineToGround'
    '''
    The fault connects the indicated phases to ground. The line to line
    fault impedance is not used and assumed infinite. The full ground impedance
    is connected between each phase specified in the fault and ground,
    but not between the phases.
    '''

    lineToLine = 'lineToLine'
    '''
    The fault connects the specified phases together without a connection
    to ground. The ground impedance of this fault is ignored. The line
    to line impedance is connected between each of the phases specified
    in the fault. For example three times for a three phase fault, one
    time for a two phase fault. A single phase fault should not be specified.
    '''

    lineToLineToGround = 'lineToLineToGround'
    '''
    The fault connects the indicated phases to ground and to each other.
    The line to line impedance is connected between each of the phases
    specified in the fault in a full mesh. For example three times for
    a three phase fault, one time for a two phase fault. A single phase
    fault should not be specified. The full ground impedance is connected
    between each phase specified in the fault and ground.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Faults'
    @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://iec.ch/TC57/CIM100#'
    @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 PinBranchGroupKind(Enum):
    '''
    Categorisation of type of compare done on a branch group.
    '''

    activePower = 'activePower'
    '''
    Active power in the branch group.
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive power in the branch group.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PinEquipmentKind(Enum):
    '''
    Categorisation of type of compare done on Equipment.
    '''

    activePowerLimit = 'activePowerLimit'
    '''
    Compare load flow result against the active limit for active power
    for the given equipment.
    '''

    apparentPowerLimit = 'apparentPowerLimit'
    '''
    Compare load flow result against the active limit for apparent power
    for the given equipment.
    '''

    connected = 'connected'
    '''
    Check if all terminal on the equipment is connected.
    '''

    currentLimit = 'currentLimit'
    '''
    Compare load flow result against the active current limit for the equipment.
    '''

    inService = 'inService'
    '''
    Check if equipment is in service, True if in service otherwise false.
    '''

    ratedCurrent = 'ratedCurrent'
    '''
    Compare load flow result against rated current on the equipment (switch).
    '''

    voltageLimit = 'voltageLimit'
    '''
    Compare load flow result against the active voltage limit for the equipment.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PinTerminalKind(Enum):
    '''
    Categorisation of type of compare done on Terminal.
    '''

    activePower = 'activePower'
    '''
    Active Power on the Terminal.
    '''

    apparentPower = 'apparentPower'
    '''
    Apparent Power on the Terminal.
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive Power on the Terminal.
    '''

    voltage = 'voltage'
    '''
    Voltage on the Terminal.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PoleBaseKind(Enum):
    '''
    Kind of base for poles.
    '''

    asphalt = 'asphalt'
    '''
    '''

    cement = 'cement'
    '''
    '''

    dirt = 'dirt'
    '''
    '''

    other = 'other'
    '''
    '''

    unknown = 'unknown'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 PolePreservativeKind(Enum):
    '''
    Preservative kind for poles.
    '''

    cellon = 'cellon'
    '''
    '''

    chemonite = 'chemonite'
    '''
    '''

    creosote = 'creosote'
    '''
    '''

    naphthena = 'naphthena'
    '''
    '''

    other = 'other'
    '''
    '''

    penta = 'penta'
    '''
    '''

    unknown = 'unknown'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 PoleTreatmentKind(Enum):
    '''
    Kind of treatment for poles.
    '''

    butt = 'butt'
    '''
    '''

    full = 'full'
    '''
    '''

    grayStain = 'grayStain'
    '''
    '''

    greenStain = 'greenStain'
    '''
    '''

    natural = 'natural'
    '''
    '''

    other = 'other'
    '''
    '''

    penta = 'penta'
    '''
    '''

    unknown = 'unknown'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'AuxiliaryEquipment'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class PriceSetFlag(Enum):
    '''
    Y - indicates a resource is capable of setting the Markte Clearing Price
    S - indicates the resource must submit bids for energy at $ 0
    N - indicates the resource does not have to submit bids for energy at $
    0
    '''

    N = 'N'
    '''
    '''

    S = 'S'
    '''
    '''

    Y = 'Y'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 ProcedureKind(Enum):
    '''
    Kind of procedure.
    '''

    diagnosis = 'diagnosis'
    '''
    Diagnosis procedure.
    '''

    inspection = 'inspection'
    '''
    Inspection procedure.
    '''

    maintenance = 'maintenance'
    '''
    Maintenance procedure.
    '''

    other = 'other'
    '''
    Other procedure.
    '''

    test = 'test'
    '''
    Test procedure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ProjectStatusKind(Enum):
    '''
    '''

    cancelled = 'cancelled'
    '''
    '''

    closed = 'closed'
    '''
    '''

    draft = 'draft'
    '''
    '''

    frozen = 'frozen'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ProtectiveActionAdjustmentKind(Enum):
    '''
    Categorisation of different protective action adjustments that can be performed
    on equipment.
    '''

    byPercentage = 'byPercentage'
    '''
    The adjustment is in percentage of the active value.
    '''

    byValue = 'byValue'
    '''
    The adjustment is in given by a value that defined the changes that
    will be done to the active value.
    '''

    measurement = 'measurement'
    '''
    The equipment will operating on a value given by a measurement.
    '''

    setValue = 'setValue'
    '''
    The equipment will operate on the new value.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class PurposeFlagType(Enum):
    '''
    MPM Purpose Flag, for example:
    Nature of threshold data:
    'M' - Mitigation threshold
    'R' - Reporting threshold
    '''

    M = 'M'
    '''
    '''

    R = 'R'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RampCurveType(Enum):
    '''
    For example:
    0 - Fixed ramp rate independent of rate function unit MW output
    1 - Static ramp rates as a function of unit MW output only
    2 - Dynamic ramp rates as a function of unit MW output and ramping time
    '''

    _0 = '_0'
    '''
    Fixed ramp rate independent of rate function unit MW output
    '''

    _1 = '_1'
    '''
    Static ramp rates as a function of unit MW output only
    '''

    _2 = '_2'
    '''
    Dynamic ramp rates as a function of unit MW output and ramping time
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RampRateCondition(Enum):
    '''
    Ramp rate condition.
    '''

    BEST = 'BEST'
    '''
    '''

    NA = 'NA'
    '''
    not applicable
    '''

    NORMAL = 'NORMAL'
    '''
    '''

    WORST = 'WORST'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RampRateType(Enum):
    '''
    Ramp rate curve type.
    '''

    INTERTIE = 'INTERTIE'
    '''
    Intertie ramp rate.
    '''

    LD_DROP = 'LD_DROP'
    '''
    Load drop ramp rate.
    '''

    LD_PICKUP = 'LD_PICKUP'
    '''
    Load pick up rate.
    '''

    OP = 'OP'
    '''
    Operational ramp rate.
    '''

    OP_RES = 'OP_RES'
    '''
    Operating reserve ramp rate.
    '''

    REG = 'REG'
    '''
    Regulating ramp rate.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RandomisationKind(Enum):
    '''
    Kind of randomisation to be applied to control the timing of end device
    control commands and/or the definition of demand response and load control
    events. Value other than 'none' is typically used to mitigate potential
    deleterious effects of simultaneous operation of multiple devices.
    '''

    default = 'default'
    '''
    Randomisation of start and/or end times involving the operation of
    one or more devices is controlled by default settings for the device(s).
    '''

    end = 'end'
    '''
    End time of an event or control action affecting one or more devices
    is randomised to prevent simultaneous operation.
    '''

    none = 'none'
    '''
    Neither the start time nor the end time of an event or control action
    affecting one or more devices is randomised.
    '''

    start = 'start'
    '''
    Start time of an event or control action affecting one or more multiple
    devices is randomised.
    '''

    startAndEnd = 'startAndEnd'
    '''
    Both the start time and the end time of an event or control action
    affecting one or more devices are randomised to prevent simultaneous
    operation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ReadingReasonKind(Enum):
    '''
    Reason for the reading being taken.
    '''

    billing = 'billing'
    '''
    Reading(s) taken or to be taken in response to a billing-related inquiry
    by a customer or other party. A variant of 'inquiry'.
    '''

    demandReset = 'demandReset'
    '''
    Reading(s) taken or to be taken in conjunction with the resetting of
    one or more demand registers in a meter.
    '''

    inquiry = 'inquiry'
    '''
    Reading(s) taken or to be taken in response to an inquiry by a customer
    or other party.
    '''

    installation = 'installation'
    '''
    Reading(s) taken or to be taken in conjunction with installation of
    a meter.
    '''

    loadManagement = 'loadManagement'
    '''
    Reading(s) taken or to be taken to support management of loads on distribution
    networks or devices.
    '''

    loadResearch = 'loadResearch'
    '''
    Reading(s) taken or to be taken to support research and analysis of
    loads on distribution networks or devices.
    '''

    moveIn = 'moveIn'
    '''
    Reading(s) taken or to be taken in conjunction with a customer move-in
    event.
    '''

    moveOut = 'moveOut'
    '''
    Reading(s) taken or to be taken in conjunction with a customer move-out
    event.
    '''

    other = 'other'
    '''
    Reading(s) taken or to be taken for some other reason or purpose.
    '''

    removal = 'removal'
    '''
    Reading(s) taken or to be taken in conjunction with removal of a meter.
    '''

    serviceConnect = 'serviceConnect'
    '''
    Reading(s) taken or to be taken in conjunction with a connection or
    re-connection of service.
    '''

    serviceDisconnect = 'serviceDisconnect'
    '''
    Reading(s) taken or to be taken in conjunction with a disconnection
    of service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 RegulationBranchKind(Enum):
    '''
    Kind of regulation branch for shunt impedance.
    '''

    breaker = 'breaker'
    '''
    '''

    fuse = 'fuse'
    '''
    '''

    line = 'line'
    '''
    '''

    other = 'other'
    '''
    '''

    recloser = 'recloser'
    '''
    '''

    sectionner = 'sectionner'
    '''
    '''

    switch = 'switch'
    '''
    '''

    transformer = 'transformer'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RelativeDisplacementKind(Enum):
    '''
    The types of relative displacement
    '''

    centreEarth = 'centreEarth'
    '''
    '''

    ground = 'ground'
    '''
    '''

    seaLevel = 'seaLevel'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RemedialActionSchemeKind(Enum):
    '''
    Classification of Remedial Action Scheme.
    '''

    rAP = 'rAP'
    '''
    Remedial Action Plan (RAP).
    '''

    rAS = 'rAS'
    '''
    Remedial Action Scheme (RAS).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfSIPS'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RemoteSignalKind(Enum):
    '''
    Type of input signal coming from remote bus.
    '''

    remoteBranchCurrentAmplitude = 'remoteBranchCurrentAmplitude'
    '''
    Input is branch current amplitude from remote terminal bus.
    '''

    remoteBusFrequency = 'remoteBusFrequency'
    '''
    Input is frequency from remote terminal bus.
    '''

    remoteBusFrequencyDeviation = 'remoteBusFrequencyDeviation'
    '''
    Input is frequency deviation from remote terminal bus.
    '''

    remoteBusVoltage = 'remoteBusVoltage'
    '''
    Input is voltage from remote terminal bus.
    '''

    remoteBusVoltageAmplitude = 'remoteBusVoltageAmplitude'
    '''
    Input is voltage amplitude from remote terminal bus.
    '''

    remoteBusVoltageAmplitudeDerivative = 'remoteBusVoltageAmplitudeDerivative'
    '''
    Input is branch current amplitude derivative from remote terminal bus.
    '''

    remoteBusVoltageFrequency = 'remoteBusVoltageFrequency'
    '''
    Input is voltage frequency from remote terminal bus.
    '''

    remoteBusVoltageFrequencyDeviation = 'remoteBusVoltageFrequencyDeviation'
    '''
    Input is voltage frequency deviation from remote terminal bus.
    '''

    remotePuBusVoltageDerivative = 'remotePuBusVoltageDerivative'
    '''
    Input is PU voltage derivative from remote terminal bus.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'StandardInterconnections'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RemoteUnitType(Enum):
    '''
    Type of remote unit.
    '''

    ControlCenter = 'ControlCenter'
    '''
    Control centre.
    '''

    IED = 'IED'
    '''
    Intelligent electronic device (IED).
    '''

    RTU = 'RTU'
    '''
    Remote terminal unit.
    '''

    SubstationControlSystem = 'SubstationControlSystem'
    '''
    Substation control system.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ReportingMethodKind(Enum):
    '''
    Method by which information is gathered from station.
    '''

    automated = 'automated'
    '''
    Station automatically reports.
    '''

    manual = 'manual'
    '''
    Station must be physically visited to gather observations.
    '''

    queried = 'queried'
    '''
    Station must be queried to obtain observations.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class RequestorRmrTest(Enum):
    '''
    MP
    ISO
    '''

    ISO = 'ISO'
    '''
    '''

    MP = 'MP'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ReserveRequirementType(Enum):
    '''
    For example:
    Operating Reserve, Regulation, Contingency
    '''

    CONT = 'CONT'
    '''
    Contingency
    '''

    OPRSV = 'OPRSV'
    '''
    Operating Reserve
    '''

    REG = 'REG'
    '''
    Regulation
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ResourceAssnType(Enum):
    '''
    For example:
    Asset Owner Sink designator for use by CRR
    Asset Owner Source designator for use by CRR
    Reliability Must Run
    Scheduling Coordinator
    Load Serving Entity
    '''

    CSNK = 'CSNK'
    '''
    '''

    CSRC = 'CSRC'
    '''
    '''

    LSE = 'LSE'
    '''
    '''

    RMR = 'RMR'
    '''
    '''

    SC = 'SC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ResourceCertificationCategory(Enum):
    '''
    '''

    DAM = 'DAM'
    '''
    '''

    GT = 'GT'
    '''
    Generic
    '''

    RC = 'RC'
    '''
    '''

    RTM = 'RTM'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ResourceCertificationKind(Enum):
    '''
    Types used for resource certification.
    '''

    BLACKSTART = 'BLACKSTART'
    '''
    Black start
    '''

    Capacity = 'Capacity'
    '''
    '''

    DemandSideResponse = 'DemandSideResponse'
    '''
    Demand Side Reponse (DSR)
    '''

    Energy = 'Energy'
    '''
    '''

    IntermittentResource = 'IntermittentResource'
    '''
    Intermittent resource
    '''

    NonSpinningReserve = 'NonSpinningReserve'
    '''
    Non Spinning Reserve (NR, NONSPIN)
    '''

    RegulationDown = 'RegulationDown'
    '''
    Regulation Down (RD, REGDN)
    '''

    RegulationUp = 'RegulationUp'
    '''
    Regulation Up (RU, REGUP)
    '''

    ReliabilityMustRun = 'ReliabilityMustRun'
    '''
    Reliability Must Run (RMR)
    '''

    ReliabilityUnitCommitment = 'ReliabilityUnitCommitment'
    '''
    Reliability unit commitment (RUC)
    '''

    SpinningReserve = 'SpinningReserve'
    '''
    Spinning Reserve (SR, RRSPIN)
    '''

    SynchronousCondenser = 'SynchronousCondenser'
    '''
    Synchronous Condenser (SYNCCOND)
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ResourceCertificationType(Enum):
    '''
    '''

    GT = 'GT'
    '''
    Generic Type
    '''

    IR = 'IR'
    '''
    Intermittent Resource
    '''

    NR = 'NR'
    '''
    Generic
    Regulation
    Spinning
    Non-spinning
    Intermittent Resource
    '''

    RG = 'RG'
    '''
    Regulating
    '''

    SR = 'SR'
    '''
    Spinning Reserve
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ResourceLimitIndicator(Enum):
    '''
    Locational AS Flags indicating whether the Upper or Lower Bound limit of
    the AS regional procurement is binding.
    '''

    LOWER = 'LOWER'
    '''
    '''

    UPPER = 'UPPER'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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, for example:
    Active
    Mothballed
    Planned
    Decommissioned
    '''

    Active = 'Active'
    '''
    Resource registration is active
    '''

    Decommissioned = 'Decommissioned'
    '''
    Resource registration status is decommissioned
    '''

    Mothballed = 'Mothballed'
    '''
    Resource registration has been suspended
    '''

    Planned = 'Planned'
    '''
    Registration status is in the planning stage
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ResultsConstraintType(Enum):
    '''
    Market results binding constraint types.
    '''

    Actual = 'Actual'
    '''
    Actual.
    '''

    Contingency = 'Contingency'
    '''
    Contingency.
    '''

    FG_act = 'FG_act'
    '''
    Flowgate actual base case
    '''

    Interface = 'Interface'
    '''
    Interface.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RetiredReasonKind(Enum):
    '''
    Reason asset retired.
    '''

    environmental = 'environmental'
    '''
    Retired due to environmental reasons.
    '''

    excessiveMaintenance = 'excessiveMaintenance'
    '''
    Retired due to excessive maintainance issues.
    '''

    facilitiesUpgrade = 'facilitiesUpgrade'
    '''
    Retired due to facility upgrade.
    '''

    failed = 'failed'
    '''
    Retired because of failure.
    '''

    obsolescence = 'obsolescence'
    '''
    Retired due to obsolescence.
    '''

    other = 'other'
    '''
    Retired due to other reasons.
    '''

    sold = 'sold'
    '''
    Retired and sold.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RevenueKind(Enum):
    '''
    Accounting classification of the type of revenue collected for the customer
    agreement, typically used to break down accounts for revenue accounting.
    '''

    commercial = 'commercial'
    '''
    Commercial revenue.
    '''

    industrial = 'industrial'
    '''
    Industrial revenue.
    '''

    irrigation = 'irrigation'
    '''
    Irrigation revenue.
    '''

    nonResidential = 'nonResidential'
    '''
    Non-residential revenue.
    '''

    other = 'other'
    '''
    Other revenue kind.
    '''

    residential = 'residential'
    '''
    Residential revenue.
    '''

    streetLight = 'streetLight'
    '''
    Streetlight revenue.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RevisionKind(Enum):
    '''
    List of the kinds of revisions that can be made to a SwitchingStep.
    '''

    added = 'added'
    '''
    '''

    void = 'void'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class RiskScoreKind(Enum):
    '''
    Types of risk scores.
    '''

    customerRisk = 'customerRisk'
    '''
    Customer risk score.
    '''

    financialRisk = 'financialRisk'
    '''
    Financial risk score.
    '''

    safetyRisk = 'safetyRisk'
    '''
    Safety risk score.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 RotorKind(Enum):
    '''
    Type of rotor on physical machine.
    '''

    roundRotor = 'roundRotor'
    '''
    Round rotor type of synchronous machine.
    '''

    salientPole = 'salientPole'
    '''
    Salient pole type of synchronous machine.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @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://iec.ch/TC57/CIM100#'
    @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 SampleContainerType(Enum):
    '''
    Types of sample containers.
    '''

    glassCan = 'glassCan'
    '''
    Glass can container.
    '''

    metalCan = 'metalCan'
    '''
    Metal can container.
    '''

    syringe = 'syringe'
    '''
    Syringe.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ScaleKind(Enum):
    '''
    Kinds of scaling.
    '''

    exponential = 'exponential'
    '''
    Exponential scale.
    '''

    linear = 'linear'
    '''
    Linear scale.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SchedClassType(Enum):
    '''
    '''

    F = 'F'
    '''
    '''

    P = 'P'
    '''
    '''

    R = 'R'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SealConditionKind(Enum):
    '''
    Kind of seal condition.
    '''

    broken = 'broken'
    '''
    Seal is broken.
    '''

    locked = 'locked'
    '''
    Seal is locked.
    '''

    missing = 'missing'
    '''
    Seal is missing.
    '''

    open = 'open'
    '''
    Seal is open.
    '''

    other = 'other'
    '''
    Other kind of seal condition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 SealKind(Enum):
    '''
    Kind of seal.
    '''

    lead = 'lead'
    '''
    Lead seal.
    '''

    lock = 'lock'
    '''
    Lock seal.
    '''

    other = 'other'
    '''
    Other kind of seal.
    '''

    steel = 'steel'
    '''
    Steel seal.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SegmentCurveType(Enum):
    '''
    '''

    CONSULTATIVE = 'CONSULTATIVE'
    '''
    '''

    COST = 'COST'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SelfSchedReferenceType(Enum):
    '''
    Indication of which type of self schedule is being referenced.
    '''

    ETC = 'ETC'
    '''
    Existing transmission contract.
    '''

    TOR = 'TOR'
    '''
    Transmission ownership right.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SelfSchedTypeCleanBid(Enum):
    '''
    '''

    BAS = 'BAS'
    '''
    '''

    ETC = 'ETC'
    '''
    '''

    IFM = 'IFM'
    '''
    '''

    LOF = 'LOF'
    '''
    '''

    LPT = 'LPT'
    '''
    '''

    PT = 'PT'
    '''
    '''

    RA = 'RA'
    '''
    RA Obligations
    '''

    RMT = 'RMT'
    '''
    '''

    SP = 'SP'
    '''
    Self-Provision
    '''

    TOR = 'TOR'
    '''
    '''

    WHL = 'WHL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SelfSchedTypeRawBid(Enum):
    '''
    '''

    BAS = 'BAS'
    '''
    '''

    ETC = 'ETC'
    '''
    '''

    LOF = 'LOF'
    '''
    '''

    LPT = 'LPT'
    '''
    '''

    PT = 'PT'
    '''
    '''

    RA = 'RA'
    '''
    RA Obligations
    '''

    RMT = 'RMT'
    '''
    '''

    SP = 'SP'
    '''
    Self-Provision
    '''

    TOR = 'TOR'
    '''
    '''

    WHL = 'WHL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SelfScheduleBreakdownType(Enum):
    '''
    Self schedule breakdown type.
    '''

    ETC = 'ETC'
    '''
    Existing transmission contract.
    '''

    LPT = 'LPT'
    '''
    Low price taker.
    '''

    TOR = 'TOR'
    '''
    Transmission ownership right.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SelfScheduleType(Enum):
    '''
    self schedule types
    PT
    ETC
    TOR
    RMR
    RMT
    RGMR
    ORFC
    SP
    '''

    BAS = 'BAS'
    '''
    Base Schedule
    '''

    ETC = 'ETC'
    '''
    '''

    IFM = 'IFM'
    '''
    '''

    LOF = 'LOF'
    '''
    Lay-off schedule
    '''

    ORFC = 'ORFC'
    '''
    '''

    PT = 'PT'
    '''
    '''

    PUMP_ETC = 'PUMP_ETC'
    '''
    '''

    PUMP_TOR = 'PUMP_TOR'
    '''
    '''

    RA = 'RA'
    '''
    RA Obligations
    '''

    RGMR = 'RGMR'
    '''
    '''

    RMR = 'RMR'
    '''
    '''

    RMT = 'RMT'
    '''
    '''

    RUC = 'RUC'
    '''
    '''

    SP = 'SP'
    '''
    Self-Provision
    '''

    TOR = 'TOR'
    '''
    '''

    WHL = 'WHL'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SelfScheduleTypeMB(Enum):
    '''
    Self Schedule Types applicable to Mitigated Bid
    '''

    RMR = 'RMR'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ServiceKind(Enum):
    '''
    Kind of service.
    '''

    air = 'air'
    '''
    Air service.
    '''

    electricity = 'electricity'
    '''
    Electricity service.
    '''

    gas = 'gas'
    '''
    Gas service.
    '''

    heat = 'heat'
    '''
    Heat service.
    '''

    heatingFluid = 'heatingFluid'
    '''
    Heating fluid service.
    '''

    internet = 'internet'
    '''
    Internet service.
    '''

    naturalGas = 'naturalGas'
    '''
    Natural gas service.
    '''

    other = 'other'
    '''
    Other kind of service.
    '''

    propane = 'propane'
    '''
    Propane service.
    '''

    rates = 'rates'
    '''
    Rates (e.g. tax, charge, toll, duty, tariff, etc.) service.
    '''

    refuse = 'refuse'
    '''
    Refuse (waster) service.
    '''

    sewerage = 'sewerage'
    '''
    Sewerage service.
    '''

    steam = 'steam'
    '''
    Steam service.
    '''

    time = 'time'
    '''
    Time service.
    '''

    tvLicence = 'tvLicence'
    '''
    TV license service.
    '''

    water = 'water'
    '''
    Water service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class ServiceMultiplierKind(Enum):
    '''
    Kind of service multiplier.
    '''

    ctRatio = 'ctRatio'
    '''
    Current transformer ratio used to convert associated quantities to
    real measurements.
    '''

    ptRatio = 'ptRatio'
    '''
    Voltage transformer ratio used to convert associated quantities to
    real measurements.
    '''

    transformerRatio = 'transformerRatio'
    '''
    Product of the CT ratio and PT ratio.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ServiceRequestKind(Enum):
    '''
    Kinds of service requests
    '''

    connect = 'connect'
    '''
    Physically connect the service.
    '''

    construction = 'construction'
    '''
    The construction work requested.
    '''

    disconnect = 'disconnect'
    '''
    Physically disconnect the service.
    '''

    inspection = 'inspection'
    '''
    Inspection work.
    '''

    newservice = 'newservice'
    '''
    A new service is requested by the customer
    '''

    other = 'other'
    '''
    Other kind of work.
    '''

    reconnect = 'reconnect'
    '''
    Physically reconnect the service.
    '''

    repair = 'repair'
    '''
    Repair work.
    '''

    replace = 'replace'
    '''
    replace an asset
    '''

    test = 'test'
    '''
    Test work.
    '''

    turnoff = 'turnoff'
    '''
    Temporarily turn off the service but leave the connection in place.
    '''

    turnon = 'turnon'
    '''
    Turn on the service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @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://iec.ch/TC57/CIM100#'
    @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 ShuntImpedanceControlKind(Enum):
    '''
    Kind of control for shunt impedance.
    '''

    fixed = 'fixed'
    '''
    '''

    localOnly = 'localOnly'
    '''
    '''

    remoteOnly = 'remoteOnly'
    '''
    '''

    remoteWithLocalOverride = 'remoteWithLocalOverride'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 ShuntImpedanceLocalControlKind(Enum):
    '''
    Kind of local control for shunt impedance.
    '''

    current = 'current'
    '''
    '''

    none = 'none'
    '''
    '''

    powerFactor = 'powerFactor'
    '''
    '''

    reactivePower = 'reactivePower'
    '''
    '''

    temperature = 'temperature'
    '''
    '''

    time = 'time'
    '''
    '''

    voltage = 'voltage'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 SinglePhaseKind(Enum):
    '''
    Enumeration of single phase identifiers. Allows designation of single phases
    for both 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://iec.ch/TC57/CIM100#'
    @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 SkillLevelKind(Enum):
    '''
    Kind of skill level.
    '''

    apprentice = 'apprentice'
    '''
    '''

    master = 'master'
    '''
    '''

    other = 'other'
    '''
    '''

    standard = 'standard'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SCADA'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SourceSinkFlag(Enum):
    '''
    '''

    CSNK = 'CSNK'
    '''
    '''

    CSRC = 'CSRC'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SourceSinkType(Enum):
    '''
    '''

    Neither = 'Neither'
    '''
    '''

    Sink = 'Sink'
    '''
    '''

    Source = 'Source'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SpaceAnalogKind(Enum):
    '''
    Kinds of analogs (floats) measuring a space condition.
    '''

    magneticFieldDirection = 'magneticFieldDirection'
    '''
    '''

    magneticFieldStrength = 'magneticFieldStrength'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SpinningEventNameType(Enum):
    '''
    '''

    EASTERN = 'EASTERN'
    '''
    '''

    PJM = 'PJM'
    '''
    '''

    RFCSR = 'RFCSR'
    '''
    '''

    SOUTHS = 'SOUTHS'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SpinningEventType(Enum):
    '''
    '''

    AA = 'AA'
    '''
    '''

    CA = 'CA'
    '''
    '''

    RZ = 'RZ'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class StaticLoadModelKind(Enum):
    '''
    Type of static load model.
    '''

    constantZ = 'constantZ'
    '''
    The load is represented as a constant impedance. ConstantZ equations
    are used for active and reactive power and no attributes are required.
    '''

    exponential = 'exponential'
    '''
    This model is an exponential representation of the load. Exponential
    equations for active and reactive power are used and the following
    attributes are required:
    kp1, kp2, kp3, kpf, ep1, ep2, ep3
    kq1, kq2, kq3, kqf, eq1, eq2, eq3.
    '''

    zIP1 = 'zIP1'
    '''
    This model integrates the frequency-dependent load (primarily motors).
    ZIP1 equations for active and reactive power are used and the following
    attributes are required:
    kp1, kp2, kp3, kpf
    kq1, kq2, kq3, kqf.
    '''

    zIP2 = 'zIP2'
    '''
    This model separates the frequency-dependent load (primarily motors)
    from other load. ZIP2 equations for active and reactive power are used
    and the following attributes are required:
    kp1, kp2, kp3, kq4, kpf
    kq1, kq2, kq3, kq4, kqf.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class StreetlightLampKind(Enum):
    '''
    Kind of lamp for the streetlight.
    '''

    highPressureSodium = 'highPressureSodium'
    '''
    '''

    mercuryVapor = 'mercuryVapor'
    '''
    '''

    metalHalide = 'metalHalide'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 StructureMaterialKind(Enum):
    '''
    Kind of material used for structures.
    '''

    concrete = 'concrete'
    '''
    '''

    other = 'other'
    '''
    '''

    steel = 'steel'
    '''
    '''

    wood = 'wood'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 StructureSupportKind(Enum):
    '''
    Kind of structure support.
    '''

    anchor = 'anchor'
    '''
    '''

    guy = 'guy'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 SupplierKind(Enum):
    '''
    Kind of supplier.
    '''

    lse = 'lse'
    '''
    Load Serving Entity
    '''

    mdma = 'mdma'
    '''
    Meter Data Management Agent (MDMA) reads meters, validates meter data,
    and estimates missing data to be used in various applications
    '''

    msp = 'msp'
    '''
    Managed service provider (MSP) delivers services, such as network,
    application, infrastructure and security, via ongoing and regular support
    and active administration
    '''

    other = 'other'
    '''
    Other kind of supplier.
    '''

    retailer = 'retailer'
    '''
    Entity that sells the service, but does not deliver to the customer;
    applies to the deregulated markets.
    '''

    utility = 'utility'
    '''
    Entity that delivers the service to the customer.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SwitchActionKind(Enum):
    '''
    Kind of action on switch.
    '''

    close = 'close'
    '''
    Close the switch.
    '''

    disableReclosing = 'disableReclosing'
    '''
    Disable (automatic) switch reclosing.
    '''

    enableReclosing = 'enableReclosing'
    '''
    Enable (automatic) switch reclosing.
    '''

    open = 'open'
    '''
    Open the switch.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class SwitchStatusType(Enum):
    '''
    Circuit Breaker Status (closed or open) of the circuit breaker.
    '''

    Closed = 'Closed'
    '''
    Closed status.
    '''

    Open = 'Open'
    '''
    Open status.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 SynchronousMachineModelKind(Enum):
    '''
    Type of synchronous machine model used in dynamic simulation applications.
    '''

    subtransient = 'subtransient'
    '''
    Subtransient synchronous machine model.
    '''

    subtransientSimplified = 'subtransientSimplified'
    '''
    Simplified version of subtransient synchronous machine model where
    magnetic coupling between the direct- and quadrature- axes is ignored.
    '''

    subtransientSimplifiedDirectAxis = 'subtransientSimplifiedDirectAxis'
    '''
    Simplified version of a subtransient synchronous machine model with
    no damper circuit on the direct-axis.
    '''

    subtransientTypeF = 'subtransientTypeF'
    '''
    WECC type F variant of subtransient synchronous machine model.
    '''

    subtransientTypeJ = 'subtransientTypeJ'
    '''
    WECC type J variant of subtransient synchronous machine model.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'SynchronousMachineDynamics'
    @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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Wires'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class SystemType(Enum):
    '''
    '''

    OASIS = 'OASIS'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TAPPIStandardEditionKind(Enum):
    '''
    List of editions for TAPPI standards.
    '''

    _2009 = '_2009'
    '''
    2009 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TAPPIStandardKind(Enum):
    '''
    List of TAPPI standards.
    '''

    T494 = 'T494'
    '''
    Tensile properties of paper and paperboard(using constant rate of elongation
    apparatus), Test Method TAPPI/ANSI T 494 om-13.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TRType(Enum):
    '''
    Transmission Contract Right type -for example:
    individual or chain of contract rights
    '''

    CHAIN = 'CHAIN'
    '''
    TR chain
    '''

    INDIVIDUAL = 'INDIVIDUAL'
    '''
    Individual TR
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TagActionKind(Enum):
    '''
    Kind of action on tag.
    '''

    place = 'place'
    '''
    Place the tag.
    '''

    remove = 'remove'
    '''
    Remove the tag.
    '''

    verify = 'verify'
    '''
    Verify the tag.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TempEquipActionKind(Enum):
    '''
    Kind of action on temporary equipment (such as cut, jumper, ground, energy
    source).
    '''

    connect = 'connect'
    '''
    Connect the temp equipment to its terminal
    '''

    disconnect = 'disconnect'
    '''
    Disconnect the temp equipment from its terminal
    '''

    place = 'place'
    '''
    Place the jumper (close) or the cut (open).
    '''

    remove = 'remove'
    '''
    Remove the jumper (open) or the cut (close).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TenderKind(Enum):
    '''
    Kind of tender.
    '''

    card = 'card'
    '''
    Payment method by means of a credit or debit card.
    '''

    cash = 'cash'
    '''
    Payment method by means of cash.
    '''

    cheque = 'cheque'
    '''
    Payment method by means of a cheque.
    '''

    other = 'other'
    '''
    Other payment method such as electronic finds transfer.
    '''

    unspecified = 'unspecified'
    '''
    Payment method is not known.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TestKind(Enum):
    '''
    The test applied to determine if the condition is met.
    '''

    equalTo = 'equalTo'
    '''
    '''

    greaterThan = 'greaterThan'
    '''
    '''

    greaterThanOrEqualTo = 'greaterThanOrEqualTo'
    '''
    '''

    lessThan = 'lessThan'
    '''
    '''

    lessThanOrEqualTo = 'lessThanOrEqualTo'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TestMethod(Enum):
    '''
    Possible test methods.
    '''

    _60567ByDisplacement = '_60567ByDisplacement'
    '''
    60567 by displacement method.
    '''

    _60567ByPartition = '_60567ByPartition'
    '''
    60567 by partition method.
    '''

    _60567ByVacuum = '_60567ByVacuum'
    '''
    60567 by vacuum method.
    '''

    _60970Automatic = '_60970Automatic'
    '''
    Automatic method.
    '''

    _60970Manual1 = '_60970Manual1'
    '''
    Manual method 1.
    '''

    _60970Manual2 = '_60970Manual2'
    '''
    Manual method 2.
    '''

    _61125A = '_61125A'
    '''
    61125A method.
    '''

    _61125B = '_61125B'
    '''
    61125B method.
    '''

    _61125C = '_61125C'
    '''
    61125C method.
    '''

    _62270AnnexA = '_62270AnnexA'
    '''
    62270 Annex A method.
    '''

    _62535AnnexA = '_62535AnnexA'
    '''
    62535 Annex A method.
    '''

    _62535Main = '_62535Main'
    '''
    62535 main method.
    '''

    D1275A = 'D1275A'
    '''
    D1275A method.
    '''

    D1275B = 'D1275B'
    '''
    D1275B method.
    '''

    D3612A = 'D3612A'
    '''
    D3612A method.
    '''

    D3612B = 'D3612B'
    '''
    D3612B method.
    '''

    D3612C = 'D3612C'
    '''
    D3612C method.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TestReason(Enum):
    '''
    Reason for test.
    '''

    postOilTreatment = 'postOilTreatment'
    '''
    Test after oil treatment.
    '''

    postOperationFault = 'postOperationFault'
    '''
    Test after operation fault.
    '''

    postRepair = 'postRepair'
    '''
    Test after repair.
    '''

    routine = 'routine'
    '''
    Routine test.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TestVariantKind(Enum):
    '''
    Test variants.
    '''

    _0C = '_0C'
    '''
    Testing done at temperature of 0�C.
    '''

    _100C = '_100C'
    '''
    Testing done at temperature of 100�C.
    '''

    _164hours = '_164hours'
    '''
    Measurements taken at 164 hours.
    '''

    _1mm = '_1mm'
    '''
    Specimen of 1 mm thickness used in testing.
    '''

    _25C = '_25C'
    '''
    Testing done at temperature of 25�C.
    '''

    _2mm = '_2mm'
    '''
    Specimen of 2 mm thickness used in testing.
    '''

    _30C = '_30C'
    '''
    Testing done at temperature of 30�C.
    '''

    _40C = '_40C'
    '''
    Testing done at temperature of 40�C.
    '''

    _72hours = '_72hours'
    '''
    Measurements taken at 72 hours.
    '''

    minus30C = 'minus30C'
    '''
    Testing done at temperature of -30�C.
    '''

    minus40C = 'minus40C'
    '''
    Testing done at temperature of -40�C.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TimeIntervalKind(Enum):
    '''
    Specifies the unit of time for the intervals in the schedule.
    '''

    D = 'D'
    '''
    Day
    '''

    M = 'M'
    '''
    Month
    '''

    Y = 'Y'
    '''
    Year
    '''

    h = 'h'
    '''
    Hour
    '''

    m = 'm'
    '''
    Minute
    '''

    s = 's'
    '''
    Second
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'DER'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TimeOfUse(Enum):
    '''
    Time of Use used by a CRR definition for specifying the time the CRR spans.
    ON - CRR spans the on peak hours of the day, OFF - CRR spans the off peak
    hours of the day, 24HR - CRR spans the entire day.
    '''

    _24HR = '_24HR'
    '''
    Time of use spans the entire day, 24 hours.
    '''

    OFF = 'OFF'
    '''
    Time of use spans only the off peak hours of the day.
    '''

    ON = 'ON'
    '''
    Time of use spans only the on peak hours of the day.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TimePeriodUnit(Enum):
    '''
    Units in which reporting frequency is specified.
    '''

    days = 'days'
    '''
    '''

    hours = 'hours'
    '''
    '''

    minutes = 'minutes'
    '''
    '''

    months = 'months'
    '''
    '''

    seconds = 'seconds'
    '''
    '''

    weeks = 'weeks'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TimeZoneType(Enum):
    '''
    '''

    PPT = 'PPT'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TowerConstructionKind(Enum):
    '''
    Kind of tower construction.
    '''

    suspension = 'suspension'
    '''
    '''

    tension = 'tension'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TradeProductType(Enum):
    '''
    '''

    APN = 'APN'
    '''
    Energy Trades at Aggregated Pricing Nodes
    '''

    CAP = 'CAP'
    '''
    Capacity type trade
    '''

    NRT = 'NRT'
    '''
    Non-Spinning Reserve Trade
    '''

    PHY = 'PHY'
    '''
    Physical Energy Tra
    '''

    RDT = 'RDT'
    '''
    Regulation Down Trade
    '''

    RUT = 'RUT'
    '''
    Regulation Up Trade
    '''

    SRT = 'SRT'
    '''
    Spinning Reserve Trade
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TradeStatusType(Enum):
    '''
    RJ - Rejected Trade
    I - Invalid Trade
    V - Valid Trade
    M - Modified Trade
    CV - Conditionally Valid Trade
    CM - Conditionally Modified Trade
    CI - Conditionally Invalid Trade
    CX - Cancelled Trade
    O - Obsolete Trade
    MT - Matched Trade
    U - Unmatched Trade
    '''

    CI = 'CI'
    '''
    '''

    CM = 'CM'
    '''
    '''

    CV = 'CV'
    '''
    '''

    CX = 'CX'
    '''
    '''

    I = 'I'
    '''
    '''

    M = 'M'
    '''
    '''

    MT = 'MT'
    '''
    '''

    O = 'O'
    '''
    '''

    RJ = 'RJ'
    '''
    '''

    U = 'U'
    '''
    '''

    V = 'V'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TradeType(Enum):
    '''
    Trade type.
    '''

    AST = 'AST'
    '''
    Ancillary Services Trade.
    '''

    IST = 'IST'
    '''
    InterSC Trade.
    '''

    UCT = 'UCT'
    '''
    Unit Commitment Trade.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransactionKind(Enum):
    '''
    Kind of transaction.
    '''

    accountPayment = 'accountPayment'
    '''
    Payment against a specified account.
    '''

    auxiliaryChargePayment = 'auxiliaryChargePayment'
    '''
    Payment against a specified auxiliary account.
    '''

    diversePayment = 'diversePayment'
    '''
    Payment against an item other than an account.
    '''

    meterConfigurationToken = 'meterConfigurationToken'
    '''
    Issue of token that will alter the meter configuration.
    '''

    other = 'other'
    '''
    Other kind of transaction.
    '''

    serviceChargePayment = 'serviceChargePayment'
    '''
    Payment for a service.
    '''

    taxChargePayment = 'taxChargePayment'
    '''
    Payment for a tax.
    '''

    tokenCancellation = 'tokenCancellation'
    '''
    Cancellation of a previously issued token.
    '''

    tokenExchange = 'tokenExchange'
    '''
    Exchange of a previously issued token for a new token.
    '''

    tokenFreeIssue = 'tokenFreeIssue'
    '''
    Issue of a free credit token where the donor is the supplier.
    '''

    tokenGrant = 'tokenGrant'
    '''
    Issue of a free credit token where the donor is a 3rd party.
    '''

    tokenSalePayment = 'tokenSalePayment'
    '''
    Payment for a credit token sale to a customer.
    '''

    transactionReversal = 'transactionReversal'
    '''
    Reversal of a previous transaction.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TransformerApplicationKind(Enum):
    '''
    Classifications of network roles in which transformers can be deployed.
    The classifications are intended to reflect both criticality of transformer
    in network operations and typical usage experienced by transformer.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood (PAB 2016/01/09).
    '''

    distribution = 'distribution'
    '''
    Transformer between one distribution voltage level and another distribution
    voltage level.
    '''

    generatorStepUp = 'generatorStepUp'
    '''
    Transformer is generator step-up transformer.
    '''

    transmissionBusToBus = 'transmissionBusToBus'
    '''
    Transformer between bus at one transmission voltage level and a bus
    at another transmission voltage level.
    '''

    transmissionBusToDistribution = 'transmissionBusToDistribution'
    '''
    Transformer between bus at transmission voltage level and bus at distribution
    voltage level.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerConstructionKind(Enum):
    '''
    Kind of transformer construction.
    '''

    aerial = 'aerial'
    '''
    '''

    dryType = 'dryType'
    '''
    '''

    network = 'network'
    '''
    '''

    onePhase = 'onePhase'
    '''
    '''

    overhead = 'overhead'
    '''
    '''

    padmountDeadFront = 'padmountDeadFront'
    '''
    '''

    padmountFeedThrough = 'padmountFeedThrough'
    '''
    '''

    padmountLiveFront = 'padmountLiveFront'
    '''
    '''

    padmountLoopThrough = 'padmountLoopThrough'
    '''
    '''

    padmounted = 'padmounted'
    '''
    '''

    subway = 'subway'
    '''
    '''

    threePhase = 'threePhase'
    '''
    '''

    underground = 'underground'
    '''
    '''

    unknown = 'unknown'
    '''
    '''

    vault = 'vault'
    '''
    '''

    vaultThreePhase = 'vaultThreePhase'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfAssetInfo'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.deprecated)
@stereotype(CIMStereotype.Attribute)
class TransformerControlMode(Enum):
    '''
    Control modes for a transformer.
    '''

    reactive = 'reactive'
    '''
    Reactive power flow control.
    '''

    volt = 'volt'
    '''
    Voltage control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerCoreKind(Enum):
    '''
    Kind of transformer construction.
    '''

    core = 'core'
    '''
    '''

    shell = 'shell'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerFailureReasonKind(Enum):
    '''
    Reason for transformer failure.
    Note: This enumeration provides essential information to asset health analytics.
    The existing list is a starting point and is anticipated to be fleshed
    out further as requirements are better understood. (PAB 2016/01/09).
    '''

    bushingFailure = 'bushingFailure'
    '''
    Bushing-caused failure.
    '''

    lossOfOil = 'lossOfOil'
    '''
    Loss-of-oil-caused faliure.
    '''

    oilRelatedFailure = 'oilRelatedFailure'
    '''
    Oil-related failure.
    '''

    poorOilQuality = 'poorOilQuality'
    '''
    Oil quality-related failure.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerFunctionKind(Enum):
    '''
    Function of a transformer.
    '''

    autotransformer = 'autotransformer'
    '''
    '''

    other = 'other'
    '''
    '''

    powerTransformer = 'powerTransformer'
    '''
    '''

    secondaryTransformer = 'secondaryTransformer'
    '''
    '''

    voltageRegulator = 'voltageRegulator'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TransformerMaintenanceKind(Enum):
    '''
    Kinds of transformer maintenance.
    BreakerMaintenanceKind enumeration
    Possible types of breaker maintenance work.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TransformerRepairItemKind(Enum):
    '''
    Transformer components and problem areas which can be the focus of a repair
    work task.
    WorkTimeScheduleKind enumeration
    Kind of work schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TransmissionModeKind(Enum):
    '''
    Transmission mode for end device display controls, applicable to premises
    area network (PAN) devices.
    '''

    anonymous = 'anonymous'
    '''
    Message transmission mode whereby messages or commands are broadcast
    to unspecified devices listening for such communications.
    '''

    both = 'both'
    '''
    Message transmission mode whereby messages or commands are sent by
    both 'normal' and 'anonymous' methods.
    '''

    normal = 'normal'
    '''
    Message transmission mode whereby messages or commands are sent to
    specific devices.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class TroubleCallKind(Enum):
    '''
    Describes the type of Trouble, based on customer input.
    '''

    lineDown = 'lineDown'
    '''
    The customer is reporting a line down
    '''

    powerOut = 'powerOut'
    '''
    The customer is reporting an outage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleReportingKind(Enum):
    '''
    Kind of trouble reporting.
    '''

    app = 'app'
    '''
    '''

    call = 'call'
    '''
    Trouble call received by customer service representative.
    '''

    email = 'email'
    '''
    Trouble reported by email.
    '''

    ivr = 'ivr'
    '''
    Trouble reported through interactive voice response system.
    '''

    letter = 'letter'
    '''
    Trouble reported by letter.
    '''

    other = 'other'
    '''
    Trouble reported by other means.
    '''

    sms = 'sms'
    '''
    '''

    web = 'web'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsExtentKind(Enum):
    '''
    The enumerated values that define the extent of the problem.
    '''

    entireNeighbourhood = 'entireNeighbourhood'
    '''
    '''

    neighbour = 'neighbour'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    singleCustomer = 'singleCustomer'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsLightKind(Enum):
    '''
    The list of values that define the light problem.
    '''

    allOut = 'allOut'
    '''
    '''

    dim = 'dim'
    '''
    '''

    flickering = 'flickering'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    partOut = 'partOut'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsPoleKind(Enum):
    '''
    The list of values that define the Pole problem.
    '''

    down = 'down'
    '''
    '''

    hit = 'hit'
    '''
    '''

    leaning = 'leaning'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsTransformerKind(Enum):
    '''
    The list of items that define the transformer problem.
    '''

    burning = 'burning'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsTree_Kind(Enum):
    '''
    The list of items that define the tree problem.
    '''

    limbOnService = 'limbOnService'
    '''
    '''

    limbOnWire = 'limbOnWire'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class TroubleSymptomsWireKind(Enum):
    '''
    The list of items that define the wire problem.
    '''

    digIn = 'digIn'
    '''
    '''

    ok = 'ok'
    '''
    '''

    other = 'other'
    '''
    '''

    serviceDown = 'serviceDown'
    '''
    '''

    wireDown = 'wireDown'
    '''
    '''

    wireburning = 'wireburning'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Customers'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class UKMinistryOfDefenceStandardEditionKind(Enum):
    '''
    List of editions for UK Ministry of Defence standards.
    '''

    Issue1 = 'Issue1'
    '''
    Issue 1 standard edition.
    '''

    none = 'none'
    '''
    No standard edition.
    '''

    unknown = 'unknown'
    '''
    Unknown standard edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 UKMinistryofDefenceStandardKind(Enum):
    '''
    List of UK Ministry of Defence standards.
    '''

    _0550Part65 = '_0550Part65'
    '''
    Ministry of Defence, Defence Standard 05-50 (Part 65)/Issue 1 METHODS
    FOR TESTING FUELS, LUBRICANTS AND ASSOCIATED PRODUCTS.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class UOMType(Enum):
    '''
    '''

    lb = 'lb'
    '''
    '''

    mmBTU = 'mmBTU'
    '''
    '''

    FACTOR = 'FACTOR'
    '''
    '''

    FLAG = 'FLAG'
    '''
    '''

    INTEGER = 'INTEGER'
    '''
    '''

    MW = 'MW'
    '''
    '''

    MWh = 'MWh'
    '''
    '''

    US = 'US'
    '''
    '''

    USMW = 'USMW'
    '''
    '''

    USMWh = 'USMWh'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class UncertaintyKind(Enum):
    '''
    The type of uncertainty for a reading.
    '''

    estimated = 'estimated'
    '''
    The value is estimated.
    '''

    interpolated = 'interpolated'
    '''
    The value is interpolated.
    '''

    standard = 'standard'
    '''
    The value has standard uncertainty consistent with National Weather
    Service practises given the instrument and manner of observation.
    '''

    unknown = 'unknown'
    '''
    The process of value calculation or measurement is unknown.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 UnitMultiplier(Enum):
    '''
    The unit multipliers defined for the CIM. When applied to unit symbols,
    the unit symbol is treated as a derived unit. Regardless of the contents
    of the unit symbol text, the unit symbol shall be treated as if it were
    a single-character unit symbol. Unit symbols should not contain multipliers,
    and it should be left to the multiplier to define the multiple for an entire
    data type.
    For example, if a unit symbol is "m2Pers" and the multiplier is "k", then
    the value is k(m**2/s), and the multiplier applies to the entire final
    value, not to any individual part of the value. This can be conceptualized
    by substituting a derived unit symbol for the unit type. If one imagines
    that the symbol "�" represents the derived unit "m2Pers", then applying
    the multiplier "k" can be conceptualized simply as "k�".
    For example, the SI unit for mass is "kg" and not "g". If the unit symbol
    is defined as "kg", then the multiplier is applied to "kg" as a whole and
    does not replace the "k" in front of the "g". In this case, the multiplier
    of "m" would be used with the unit symbol of "kg" to represent one gram.
    As a text string, this violates the instructions in IEC 80000-1. However,
    because the unit symbol in CIM is treated as a derived unit instead of
    as an SI unit, it makes more sense to conceptualize the "kg" as if it were
    replaced by one of the proposed replacements for the SI mass symbol. If
    one imagines that the "kg" were replaced by a symbol "�", then it is easier
    to conceptualize the multiplier "m" as creating the proper unit "m�", and
    not the forbidden unit "mkg".
    '''

    E = 'E'
    '''
    Exa 10**18.
    '''

    G = 'G'
    '''
    Giga 10**9.
    '''

    M = 'M'
    '''
    Mega 10**6.
    '''

    P = 'P'
    '''
    Peta 10**15.
    '''

    T = 'T'
    '''
    Tera 10**12.
    '''

    Y = 'Y'
    '''
    Yotta 10**24.
    '''

    Z = 'Z'
    '''
    Zetta 10**21.
    '''

    a = 'a'
    '''
    Atto 10**-18.
    '''

    c = 'c'
    '''
    Centi 10**-2.
    '''

    d = 'd'
    '''
    Deci 10**-1.
    '''

    da = 'da'
    '''
    Deca 10**1.
    '''

    f = 'f'
    '''
    Femto 10**-15.
    '''

    h = 'h'
    '''
    Hecto 10**2.
    '''

    k = 'k'
    '''
    Kilo 10**3.
    '''

    m = 'm'
    '''
    Milli 10**-3.
    '''

    micro = 'micro'
    '''
    Micro 10**-6.
    '''

    n = 'n'
    '''
    Nano 10**-9.
    '''

    none = 'none'
    '''
    No multiplier or equivalently multiply by 1.
    '''

    p = 'p'
    '''
    Pico 10**-12.
    '''

    y = 'y'
    '''
    Yocto 10**-24.
    '''

    z = 'z'
    '''
    Zepto 10**-21.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class UnitRegulationKind(Enum):
    '''
    Unit regulation kind.
    '''

    _0 = '_0'
    '''
    Unit is not on regulation.
    '''

    _1 = '_1'
    '''
    Unit is on AGC and regulating.
    '''

    _2 = '_2'
    '''
    Unit is suppose to be on regulation but it is not under regulation
    now.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 UnitSymbol(Enum):
    '''
    The derived units defined for usage in the CIM. In some cases, the derived
    unit is equal to an SI unit. Whenever possible, the standard derived symbol
    is used instead of the formula for the derived unit. For example, the unit
    symbol Farad is defined as "F" instead of "CPerV". In cases where a standard
    symbol does not exist for a derived unit, the formula for the unit is used
    as the unit symbol. For example, density does not have a standard symbol
    and so it is represented as "kgPerm3". With the exception of the "kg",
    which is an SI unit, the unit symbols do not contain multipliers and therefore
    represent the base derived unit to which a multiplier can be applied as
    a whole.
    Every unit symbol is treated as an unparseable text as if it were a single-letter
    symbol. The meaning of each unit symbol is defined by the accompanying
    descriptive text and not by the text contents of the unit symbol.
    To allow the widest possible range of serializations without requiring
    special character handling, several substitutions are made which deviate
    from the format described in IEC 80000-1. The division symbol "/" is replaced
    by the letters "Per". Exponents are written in plain text after the unit
    as "m3" instead of being formatted as "m" with a superscript of 3 or introducing
    a symbol as in "m^3". The degree symbol "�" is replaced with the letters
    "deg". Any clarification of the meaning for a substitution is included
    in the description for the unit symbol.
    Non-SI units are included in list of unit symbols to allow sources of data
    to be correctly labelled with their non-SI units (for example, a GPS sensor
    that is reporting numbers that represent feet instead of meters). This
    allows software to use the unit symbol information correctly convert and
    scale the raw data of those sources into SI-based units.
    The integer values are used for harmonization with IEC 61850.
    '''

    A = 'A'
    '''
    Current in amperes.
    '''

    A2 = 'A2'
    '''
    Amperes squared (A�).
    '''

    A2h = 'A2h'
    '''
    Ampere-squared hour, ampere-squared hour.
    '''

    A2s = 'A2s'
    '''
    Ampere squared time in square amperes (A�s).
    '''

    APerA = 'APerA'
    '''
    Current, ratio of amperages. Note: Users may need to supply a prefix
    such as �m� to show rates such as �mA/A�.
    '''

    APerm = 'APerm'
    '''
    A/m, magnetic field strength, amperes per metre.
    '''

    Ah = 'Ah'
    '''
    Ampere-hours, ampere-hours.
    '''

    As = 'As'
    '''
    Ampere seconds (A�s).
    '''

    Bq = 'Bq'
    '''
    Radioactivity in becquerels (1/s).
    '''

    Btu = 'Btu'
    '''
    Energy, British Thermal Units.
    '''

    C = 'C'
    '''
    Electric charge in coulombs (A�s).
    '''

    CPerkg = 'CPerkg'
    '''
    Exposure (x rays), coulombs per kilogram.
    '''

    CPerm2 = 'CPerm2'
    '''
    Surface charge density, coulombs per square metre.
    '''

    CPerm3 = 'CPerm3'
    '''
    Electric charge density, coulombs per cubic metre.
    '''

    F = 'F'
    '''
    Electric capacitance in farads (C/V).
    '''

    FPerm = 'FPerm'
    '''
    Permittivity, farads per metre.
    '''

    G = 'G'
    '''
    Magnetic flux density, gausses (1 G = 10-4 T).
    '''

    Gy = 'Gy'
    '''
    Absorbed dose in grays (J/kg).
    '''

    GyPers = 'GyPers'
    '''
    Absorbed dose rate, grays per second.
    '''

    H = 'H'
    '''
    Electric inductance in henrys (Wb/A).
    '''

    HPerm = 'HPerm'
    '''
    Permeability, henrys per metre.
    '''

    Hz = 'Hz'
    '''
    Frequency in hertz (1/s).
    '''

    HzPerHz = 'HzPerHz'
    '''
    Frequency, rate of frequency change. Note: Users may need to supply
    a prefix such as �m� to show rates such as �mHz/Hz�.
    '''

    HzPers = 'HzPers'
    '''
    Rate of change of frequency in hertz per second.
    '''

    J = 'J'
    '''
    Energy in joules (N�m = C�V = W�s).
    '''

    JPerK = 'JPerK'
    '''
    Heat capacity in joules/kelvin.
    '''

    JPerkg = 'JPerkg'
    '''
    Specific energy, Joules / kg.
    '''

    JPerkgK = 'JPerkgK'
    '''
    Specific heat capacity, specific entropy, joules per kilogram Kelvin.
    '''

    JPerm2 = 'JPerm2'
    '''
    Insulation energy density, joules per square metre or watt second per
    square metre.
    '''

    JPerm3 = 'JPerm3'
    '''
    Energy density, joules per cubic metre.
    '''

    JPermol = 'JPermol'
    '''
    Molar energy, joules per mole.
    '''

    JPermolK = 'JPermolK'
    '''
    Molar entropy, molar heat capacity, joules per mole kelvin.
    '''

    JPers = 'JPers'
    '''
    Energy rate in joules per second (J/s).
    '''

    K = 'K'
    '''
    Temperature in kelvins.
    '''

    KPers = 'KPers'
    '''
    Temperature change rate in kelvins per second.
    '''

    M = 'M'
    '''
    Length, nautical miles (1 M = 1852 m).
    '''

    Mx = 'Mx'
    '''
    Magnetic flux, maxwells (1 Mx = 10-8 Wb).
    '''

    N = 'N'
    '''
    Force in newtons (kg�m/s�).
    '''

    NPerm = 'NPerm'
    '''
    Surface tension, newton per metre.
    '''

    Nm = 'Nm'
    '''
    Moment of force, newton metres.
    '''

    Oe = 'Oe'
    '''
    Magnetic field in oersteds, (1 Oe = (103/4p) A/m).
    '''

    Pa = 'Pa'
    '''
    Pressure in pascals (N/m�). Note: the absolute or relative measurement
    of pressure is implied with this entry. See below for more explicit
    forms.
    '''

    PaPers = 'PaPers'
    '''
    Pressure change rate in pascals per second.
    '''

    Pas = 'Pas'
    '''
    Dynamic viscosity, pascal seconds.
    '''

    Q = 'Q'
    '''
    Quantity power, Q.
    '''

    Qh = 'Qh'
    '''
    Quantity energy, Qh.
    '''

    S = 'S'
    '''
    Conductance in siemens.
    '''

    SPerm = 'SPerm'
    '''
    Conductance per length (F/m).
    '''

    Sv = 'Sv'
    '''
    Dose equivalent in sieverts (J/kg).
    '''

    T = 'T'
    '''
    Magnetic flux density in teslas (Wb/m2).
    '''

    V = 'V'
    '''
    Electric potential in volts (W/A).
    '''

    V2 = 'V2'
    '''
    Volt squared (W�/A�).
    '''

    V2h = 'V2h'
    '''
    Volt-squared hour, volt-squared-hours.
    '''

    VA = 'VA'
    '''
    Apparent power in volt amperes. See also real power and reactive power.
    '''

    VAh = 'VAh'
    '''
    Apparent energy in volt ampere hours.
    '''

    VAr = 'VAr'
    '''
    Reactive power in volt amperes reactive. The �reactive� or �imaginary�
    component of electrical power (VIsin(phi)). (See also real power and
    apparent power).
    Note: Different meter designs use different methods to arrive at their
    results. Some meters may compute reactive power as an arithmetic value,
    while others compute the value vectorially. The data consumer should
    determine the method in use and the suitability of the measurement
    for the intended purpose.
    '''

    VArh = 'VArh'
    '''
    Reactive energy in volt ampere reactive hours.
    '''

    VPerHz = 'VPerHz'
    '''
    Magnetic flux in volt per hertz.
    '''

    VPerV = 'VPerV'
    '''
    Voltage, ratio of voltages. Note: Users may need to supply a prefix
    such as �m� to show rates such as �mV/V�.
    '''

    VPerVA = 'VPerVA'
    '''
    Power factor, PF, the ratio of the active power to the apparent power.
    Note: The sign convention used for power factor will differ between
    IEC meters and EEI (ANSI) meters. It is assumed that the data consumers
    understand the type of meter being used and agree on the sign convention
    in use at any given utility.
    '''

    VPerVAr = 'VPerVAr'
    '''
    Power factor, PF, the ratio of the active power to the apparent power.
    Note: The sign convention used for power factor will differ between
    IEC meters and EEI (ANSI) meters. It is assumed that the data consumers
    understand the type of meter being used and agree on the sign convention
    in use at any given utility.
    '''

    VPerm = 'VPerm'
    '''
    Electric field strength, volts per metre.
    '''

    Vh = 'Vh'
    '''
    Volt-hour, Volt hours.
    '''

    Vs = 'Vs'
    '''
    Volt seconds (Ws/A).
    '''

    W = 'W'
    '''
    Real power in watts (J/s). Electrical power may have real and reactive
    components. The real portion of electrical power (I&#178;R or VIcos(phi)),
    is expressed in Watts. See also apparent power and reactive power.
    '''

    WPerA = 'WPerA'
    '''
    Active power per current flow, watts per Ampere.
    '''

    WPerW = 'WPerW'
    '''
    Signal Strength, ratio of power. Note: Users may need to supply a prefix
    such as �m� to show rates such as �mW/W�.
    '''

    WPerm2 = 'WPerm2'
    '''
    Heat flux density, irradiance, watts per square metre.
    '''

    WPerm2sr = 'WPerm2sr'
    '''
    Radiance, watts per square metre steradian.
    '''

    WPermK = 'WPermK'
    '''
    Thermal conductivity in watt/metres kelvin.
    '''

    WPers = 'WPers'
    '''
    Ramp rate in watts per second.
    '''

    WPersr = 'WPersr'
    '''
    Radiant intensity, watts per steradian.
    '''

    Wb = 'Wb'
    '''
    Magnetic flux in webers (V�s).
    '''

    Wh = 'Wh'
    '''
    Real energy in watt hours.
    '''

    anglemin = 'anglemin'
    '''
    Plane angle, minutes.
    '''

    anglesec = 'anglesec'
    '''
    Plane angle, seconds.
    '''

    bar = 'bar'
    '''
    Pressure in bars, (1 bar = 100 kPa).
    '''

    cd = 'cd'
    '''
    Luminous intensity in candelas.
    '''

    charPers = 'charPers'
    '''
    Data rate (baud) in characters per second.
    '''

    character = 'character'
    '''
    Number of characters.
    '''

    cosPhi = 'cosPhi'
    '''
    Power factor, dimensionless.
    Note 1: This definition of power factor only holds for balanced systems.
    See the alternative definition under code 153.
    Note 2�: Beware of differing sign conventions in use between the IEC
    and EEI. It is assumed that the data consumer understands the type
    of meter in use and the sign convention in use by the utility.
    '''

    count = 'count'
    '''
    Amount of substance, Counter value.
    '''

    d = 'd'
    '''
    Time in days, day = 24 h = 86400 s.
    '''

    dB = 'dB'
    '''
    Sound pressure level in decibels. Note: multiplier �d� is included
    in this unit symbol for compatibility with IEC 61850-7-3.
    '''

    dBm = 'dBm'
    '''
    Power level (logarithmic ratio of signal strength , Bel-mW), normalized
    to 1mW. Note: multiplier �d� is included in this unit symbol for compatibility
    with IEC 61850-7-3.
    '''

    deg = 'deg'
    '''
    Plane angle in degrees.
    '''

    degC = 'degC'
    '''
    Relative temperature in degrees Celsius.
    In the SI unit system the symbol is �C. Electric charge is measured
    in coulomb that has the unit symbol C. To distinguish degree Celsius
    from coulomb the symbol used in the UML is degC. The reason for not
    using �C is that the special character � is difficult to manage in
    software.
    '''

    ft3 = 'ft3'
    '''
    Volume, cubic feet.
    '''

    gPerg = 'gPerg'
    '''
    Concentration, The ratio of the mass of a solute divided by the mass
    of the solution. Note: Users may need use a prefix such a ��� to express
    a quantity such as ��g/g�.
    '''

    gal = 'gal'
    '''
    Volume in gallons, US gallon (1 gal = 231 in3 = 128 fl ounce).
    '''

    h = 'h'
    '''
    Time in hours, hour = 60 min = 3600 s.
    '''

    ha = 'ha'
    '''
    Area, hectares.
    '''

    kat = 'kat'
    '''
    Catalytic activity, katal = mol / s.
    '''

    katPerm3 = 'katPerm3'
    '''
    Catalytic activity concentration, katals per cubic metre.
    '''

    kg = 'kg'
    '''
    Mass in kilograms. Note: multiplier �k� is included in this unit symbol
    for compatibility with IEC 61850-7-3.
    '''

    kgPerJ = 'kgPerJ'
    '''
    Weight per energy in kilograms per joule (kg/J). Note: multiplier �k�
    is included in this unit symbol for compatibility with IEC 61850-7-3.
    '''

    kgPerm3 = 'kgPerm3'
    '''
    Density in kilogram/cubic metres (kg/m�). Note: multiplier �k� is included
    in this unit symbol for compatibility with IEC 61850-7-3.
    '''

    kgm = 'kgm'
    '''
    Moment of mass in kilogram metres (kg�m) (first moment of mass). Note:
    multiplier �k� is included in this unit symbol for compatibility with
    IEC 61850-7-3.
    '''

    kgm2 = 'kgm2'
    '''
    Moment of mass in kilogram square metres (kg�m�) (Second moment of
    mass, commonly called the moment of inertia). Note: multiplier �k�
    is included in this unit symbol for compatibility with IEC 61850-7-3.
    '''

    kn = 'kn'
    '''
    Speed, knots (1 kn = 1852/3600) m/s.
    '''

    l = 'l'
    '''
    Volume in litres, litre = dm3 = m3/1000.
    '''

    lPerh = 'lPerh'
    '''
    Volumetric flow rate, litres per hour.
    '''

    lPerl = 'lPerl'
    '''
    Concentration, The ratio of the volume of a solute divided by the volume
    of the solution. Note: Users may need use a prefix such a ��� to express
    a quantity such as ��L/L�.
    '''

    lPers = 'lPers'
    '''
    Volumetric flow rate in litres per second.
    '''

    lm = 'lm'
    '''
    Luminous flux in lumens (cd�sr).
    '''

    lx = 'lx'
    '''
    Illuminance in lux (lm/m�).
    '''

    m = 'm'
    '''
    Length in metres.
    '''

    m2 = 'm2'
    '''
    Area in square metres (m�).
    '''

    m2Pers = 'm2Pers'
    '''
    Viscosity in square metres / second (m�/s).
    '''

    m3 = 'm3'
    '''
    Volume in cubic metres (m�).
    '''

    m3Compensated = 'm3Compensated'
    '''
    Volume, cubic metres, with the value compensated for weather effects.
    '''

    m3Perh = 'm3Perh'
    '''
    Volumetric flow rate, cubic metres per hour.
    '''

    m3Perkg = 'm3Perkg'
    '''
    Specific volume, cubic metres per kilogram, v.
    '''

    m3Pers = 'm3Pers'
    '''
    Volumetric flow rate in cubic metres per second (m�/s).
    '''

    m3Uncompensated = 'm3Uncompensated'
    '''
    Volume, cubic metres, with the value uncompensated for weather effects.
    '''

    mPerm3 = 'mPerm3'
    '''
    Fuel efficiency in metres per cubic metres (m/m�).
    '''

    mPers = 'mPers'
    '''
    Velocity in metres per second (m/s).
    '''

    mPers2 = 'mPers2'
    '''
    Acceleration in metres per second squared (m/s�).
    '''

    min = 'min'
    '''
    Time in minutes, minute = 60 s.
    '''

    mmHg = 'mmHg'
    '''
    Pressure, millimetres of mercury (1 mmHg is approximately 133.3 Pa).
    '''

    mol = 'mol'
    '''
    Amount of substance in moles.
    '''

    molPerkg = 'molPerkg'
    '''
    Concentration, Molality, the amount of solute in moles and the amount
    of solvent in kilograms.
    '''

    molPerm3 = 'molPerm3'
    '''
    Concentration, The amount of substance concentration, (c), the amount
    of solvent in moles divided by the volume of solution in m�.
    '''

    molPermol = 'molPermol'
    '''
    Concentration, Molar fraction, the ratio of the molar amount of a solute
    divided by the molar amount of the solution.
    '''

    none = 'none'
    '''
    Dimension less quantity, e.g. count, per unit, etc.
    '''

    ohm = 'ohm'
    '''
    Electric resistance in ohms (V/A).
    '''

    ohmPerm = 'ohmPerm'
    '''
    Electric resistance per length in ohms per metre ((V/A)/m).
    '''

    ohmm = 'ohmm'
    '''
    Resistivity, ohm metres, (rho).
    '''

    onePerHz = 'onePerHz'
    '''
    Reciprocal of frequency (1/Hz).
    '''

    onePerm = 'onePerm'
    '''
    Wavenumber, reciprocal metres, (1/m).
    '''

    ppm = 'ppm'
    '''
    Concentration in parts per million.
    '''

    rad = 'rad'
    '''
    Plane angle in radians (m/m).
    '''

    radPers = 'radPers'
    '''
    Angular velocity in radians per second (rad/s).
    '''

    radPers2 = 'radPers2'
    '''
    Angular acceleration, radians per second squared.
    '''

    rev = 'rev'
    '''
    Amount of rotation, revolutions.
    '''

    rotPers = 'rotPers'
    '''
    Rotations per second (1/s). See also Hz (1/s).
    '''

    s = 's'
    '''
    Time in seconds.
    '''

    sPers = 'sPers'
    '''
    Time, Ratio of time. Note: Users may need to supply a prefix such as
    �&#181;� to show rates such as �&#181;s/s�.
    '''

    sr = 'sr'
    '''
    Solid angle in steradians (m2/m2).
    '''

    therm = 'therm'
    '''
    Energy, therms.
    '''

    tonne = 'tonne'
    '''
    Mass in tons, �tonne� or �metric ton� (1000 kg = 1 Mg).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class UnitType(Enum):
    '''
    Combined Cycle
    Gas Turbine
    Hydro Turbine
    Other
    Photovoltaic
    Hydro Pump-Turbine
    Reciprocating Engine
    Steam Turbine
    Synchronous Condenser
    Wind Turbine
    '''

    CCYC = 'CCYC'
    '''
    Combined Cycle
    '''

    GTUR = 'GTUR'
    '''
    Gas Turbine
    '''

    HYDR = 'HYDR'
    '''
    Hydro Turbine
    '''

    OTHR = 'OTHR'
    '''
    Other
    '''

    PHOT = 'PHOT'
    '''
    Photovoltaic
    '''

    PTUR = 'PTUR'
    '''
    Hydro Pump-Turbine
    '''

    RECP = 'RECP'
    '''
    Reciprocating Engine
    '''

    STUR = 'STUR'
    '''
    Steam Turbine
    '''

    SYNC = 'SYNC'
    '''
    Synchronous Condenser
    '''

    WIND = 'WIND'
    '''
    Wind Turbine
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'MktDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class UnitTypeEMS(Enum):
    '''
    MW
    FLAG
    '''

    FLAG = 'FLAG'
    '''
    '''

    MW = 'MW'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class UsagePointConnectedKind(Enum):
    '''
    State of the usage point with respect to connection to the network.
    '''

    connected = 'connected'
    '''
    The usage point is connected to the network and able to receive or
    send the applicable commodity (electricity, gas, water, etc.).
    '''

    logicallyDisconnected = 'logicallyDisconnected'
    '''
    The usage point has been disconnected through operation of a disconnect
    function within the meter present at the usage point. The usage point
    is unable to receive or send the applicable commodity (electricity,
    gas, water, etc.) A logical disconnect can often be achieved without
    utilising a field crew.
    '''

    physicallyDisconnected = 'physicallyDisconnected'
    '''
    The usage point has been disconnected from the network at a point upstream
    of the meter. The usage point is unable to receive or send the applicable
    commodity (electricity, gas, water, etc.). A physical disconnect is
    often achieved by utilising a field crew.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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 VehicleUsageKind(Enum):
    '''
    Usage of a vehicle.
    '''

    contractor = 'contractor'
    '''
    Contractor vehicle.
    '''

    crew = 'crew'
    '''
    Crew vehicle.
    '''

    other = 'other'
    '''
    Other vehicle.
    '''

    user = 'user'
    '''
    User vehicle.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @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 High Voltage
    DC (MTDC) systems where multiple HVDC Substations are connected to
    the HVDC transmission lines. The pilot voltage is then used to coordinate
    the control the DC voltage across the HVDC 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 WEPStandardEditionKind(Enum):
    '''
    List of editions for WEP standards.
    '''

    none = 'none'
    '''
    No edition.
    '''

    unknown = 'unknown'
    '''
    Unknown edition.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 WEPStandardKind(Enum):
    '''
    List of WEP standards.
    '''

    _121254E = '_121254E'
    '''
    Westinghouse Engineering Procedure 12,1254E.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 WeatherCodeKind(Enum):
    '''
    Kinds of weather conditions.
    '''

    blowingDust = 'blowingDust'
    '''
    "BD" weather code ("Blowing Dust").
    '''

    blowingSand = 'blowingSand'
    '''
    "BN" weather code ("Blowing Sand").
    '''

    blowingSnow = 'blowingSnow'
    '''
    "BS" weather code ("Blowing Snow").
    '''

    cloudy = 'cloudy'
    '''
    '''

    drizzle = 'drizzle'
    '''
    "L" weather code ("Drizzle").
    '''

    fog = 'fog'
    '''
    "F weather code ("Fog
    '''

    freezingDrizzle = 'freezingDrizzle'
    '''
    "ZL" weather code ("Freezing Drizzle").
    '''

    freezingRain = 'freezingRain'
    '''
    "ZR" weather code ("Freezing Rain").
    '''

    freezingSpray = 'freezingSpray'
    '''
    "ZF" weather code ("Freezing Spray").
    '''

    frost = 'frost'
    '''
    "FR" weather code ("Frost").
    '''

    hail = 'hail'
    '''
    "A" weather code ("Hail").
    '''

    haze = 'haze'
    '''
    "H" weather code ("Haze").
    '''

    iceCrystals = 'iceCrystals'
    '''
    "IC" weather code ("Ice Crystals").
    '''

    iceFog = 'iceFog'
    '''
    "IF" weather code ("Ice Fog").
    '''

    mist = 'mist'
    '''
    "BR" weather code ("Mist"),
    '''

    rain = 'rain'
    '''
    "R" weather code ("Rain").
    '''

    rainShowers = 'rainShowers'
    '''
    "RW" weather code ("Rain Showers").
    '''

    rainSnowMix = 'rainSnowMix'
    '''
    "RS" weather code ("Rain/Snow Mix").
    '''

    sleet = 'sleet'
    '''
    "IP" weather code ("Ice Pellets/Sleet").
    '''

    smoke = 'smoke'
    '''
    "K" weather code ("Smoke").
    '''

    snow = 'snow'
    '''
    "S" weather code ("Snow").
    '''

    snowShowers = 'snowShowers'
    '''
    "SW" weather code ("Snow Showers").
    '''

    snowSleetMix = 'snowSleetMix'
    '''
    "SI" weather code ("Snow/Sleet Mix").
    '''

    sunny = 'sunny'
    '''
    '''

    thunderStorms = 'thunderStorms'
    '''
    "T" weather code ("Thunder Storms").
    '''

    volcanicAsh = 'volcanicAsh'
    '''
    "VA" weather code ("Volcanic Ash").
    '''

    waterSpouts = 'waterSpouts'
    '''
    "WP" weather code ("Water Spouts")
    '''

    wintryMix = 'wintryMix'
    '''
    "WS" weather code ("Wintry Mix").
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @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://iec.ch/TC57/CIM100#'
    @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 WindLookupTableFunctionKind(Enum):
    '''
    Function of the lookup table.
    '''

    ipmax = 'ipmax'
    '''
    Lookup table for voltage dependency of active current limits (i<sub>pmax</sub>(u<sub>WT</sub>)).
    It is used for the current limitation model, IEC 61400-27-1:2015, 5.6.5.8.
    '''

    iqmax = 'iqmax'
    '''
    Lookup table for voltage dependency of reactive current limits (i<sub>qmax</sub>(u<sub>WT</sub>)).
    It is used for the current limitation model, IEC 61400-27-1:2015, 5.6.5.8.
    '''

    omegap = 'omegap'
    '''
    Power vs. speed lookup table (omega(p)). It is used for the P control
    model type 3, IEC 61400-27-1:2015, 5.6.5.4.
    '''

    prr = 'prr'
    '''
    Power versus speed change (negative slip) lookup table (p<sub>rr</sub>(deltaomega)).
    It is used for the rotor resistance control model, IEC 61400-27-1:2015,
    5.6.5.3.
    '''

    pwp = 'pwp'
    '''
    Power vs. frequency lookup table (p<sub>WPbias</sub>(f)). It is used
    for the wind power plant frequency and active power control model,
    IEC 61400-27-1:2015, Annex D.
    '''

    qmaxp = 'qmaxp'
    '''
    Lookup table for active power dependency of reactive power maximum
    limit (q<sub>maxp</sub>(p)). It is used for the QP and QU limitation
    model, IEC 61400-27-1:2015, 5.6.5.10.
    '''

    qmaxu = 'qmaxu'
    '''
    Lookup table for voltage dependency of reactive power maximum limit
    (q<sub>maxu</sub>(p)). It is used for the QP and QU limitation model,
    IEC 61400-27-1:2015, 5.6.5.10.
    '''

    qminp = 'qminp'
    '''
    Lookup table for active power dependency of reactive power minimum
    limit (q<sub>minp</sub>(p)). It is used for the QP and QU limitation
    model, IEC 61400-27-1:2015, 5.6.5.10.
    '''

    qminu = 'qminu'
    '''
    Lookup table for voltage dependency of reactive power minimum limit
    (q<sub>minu</sub>(p)). It is used for the QP and QU limitation model,
    IEC 61400-27-1:2015, 5.6.5.10.
    '''

    qwp = 'qwp'
    '''
    Look up table for the UQ static mode (q<sub>WP</sub>(u<sub>err</sub>)).
    It is used for the voltage and reactive power control model, IEC 61400-27-1:2015,
    Annex D.
    '''

    tcwdu = 'tcwdu'
    '''
    Crowbar duration versus voltage variation look-up table (T<sub>CW</sub>(du)).
    It is a case-dependent parameter. It is used for the type 3B generator
    set model, IEC 61400-27-1:2015, 5.6.3.3.
    '''

    tduwt = 'tduwt'
    '''
    Lookup table to determine the duration of the power reduction after
    a voltage dip, depending on the size of the voltage dip (T<sub>d</sub>(u<sub>WT</sub>)).
    It is a type-dependent parameter. It is used for the pitch control
    power model, IEC 61400-27-1:2015, 5.6.5.1.
    '''

    tfover = 'tfover'
    '''
    Disconnection time versus over-frequency lookup table (T<sub>fover</sub>(f<sub>WT</sub>)).
    It is used for the grid protection model, IEC 61400-27-1:2015, 5.6.6.
    '''

    tfunder = 'tfunder'
    '''
    Disconnection time versus under-frequency lookup table (T<sub>funder</sub>(f<sub>WT</sub>)).
    It is used for the grid protection model, IEC 61400-27-1:2015, 5.6.6.
    '''

    tuover = 'tuover'
    '''
    Disconnection time versus over-voltage lookup table (T<sub>uover</sub>(u<sub>WT</sub>)).
    It is used for the grid protection model, IEC 61400-27-1:2015, 5.6.6.
    '''

    tuunder = 'tuunder'
    '''
    Disconnection time versus under-voltage lookup table (T<sub>uunder</sub>(u<sub>WT</sub>)).
    It is used for the grid protection model, IEC 61400-27-1:2015, 5.6.6.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WindPlantQcontrolModeKind(Enum):
    '''
    Reactive power/voltage controller mode.
    '''

    powerFactor = 'powerFactor'
    '''
    Power factor reference.
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive power reference.
    '''

    uqStatic = 'uqStatic'
    '''
    UQ static.
    '''

    voltageControl = 'voltageControl'
    '''
    Voltage control.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WindQcontrolModeKind(Enum):
    '''
    General wind turbine Q control modes <i>M</i><i><sub>qG</sub></i><i>.</i>
    '''

    openLoopReactivePower = 'openLoopReactivePower'
    '''
    Open loop reactive power control (only used with closed loop at plant
    level) (<i>M</i><i><sub>qG</sub></i><sub> </sub>equals 2).
    '''

    openLooppowerFactor = 'openLooppowerFactor'
    '''
    Open loop power factor control (<i>M</i><i><sub>qG</sub></i><sub> </sub>equals
    4).
    '''

    powerFactor = 'powerFactor'
    '''
    Power factor control (<i>M</i><i><sub>qG</sub></i><sub> </sub>equals
    3).
    '''

    reactivePower = 'reactivePower'
    '''
    Reactive power control (<i>M</i><i><sub>qG</sub></i> equals 1).
    '''

    voltage = 'voltage'
    '''
    Voltage control (<i>M</i><i><sub>qG</sub></i> equals 0).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WindUVRTQcontrolModeKind(Enum):
    '''
    UVRT Q control modes <i>M</i><i><sub>qUVRT</sub></i><i>.</i>
    '''

    mode0 = 'mode0'
    '''
    Voltage-dependent reactive current injection (<i>M</i><i><sub>qUVRT</sub></i>
    <sub> </sub>equals 0).
    '''

    mode1 = 'mode1'
    '''
    Reactive current injection controlled as the pre-fault value plus an
    additional voltage dependent reactive current injection (<i>M</i><i><sub>qUVRT</sub></i>
    equals 1).
    '''

    mode2 = 'mode2'
    '''
    Reactive current injection controlled as the pre-fault value plus an
    additional voltage-dependent reactive current injection during fault,
    and as the pre-fault value plus an additional constant reactive current
    injection post fault (<i>M</i><i><sub>qUVRT</sub></i><sub> </sub>equals
    2).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'WindDynamics'
    @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://iec.ch/TC57/CIM100#'
    @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 WindingInsulationKind(Enum):
    '''
    Insulation kind for windings.
    '''

    nomex = 'nomex'
    '''
    '''

    other = 'other'
    '''
    '''

    paper = 'paper'
    '''
    '''

    thermallyUpgradedPaper = 'thermallyUpgradedPaper'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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://iec.ch/TC57/CIM100#'
    @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 WorkActionKind(Enum):
    '''
    Kinds of activities to be performed on a Compatible Unit.
    '''

    abandon = 'abandon'
    '''
    Leave it in place but not use it.
    '''

    install = 'install'
    '''
    Install.
    '''

    remove = 'remove'
    '''
    Remove.
    '''

    transfer = 'transfer'
    '''
    Remove from one and install at another loctation.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfWork'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WorkStatusKind(Enum):
    '''
    Kind of status, specific to work.
    '''

    approved = 'approved'
    '''
    Work has been approved.
    '''

    cancelled = 'cancelled'
    '''
    Work has been canceled.
    '''

    closed = 'closed'
    '''
    Work has been closed (typically by a person responsible for work management)
    and is ready for billing.
    '''

    completed = 'completed'
    '''
    Work has been completed, i.e., crew can leave the work location and
    is available for another work.
    '''

    dispatched = 'dispatched'
    '''
    Crew has been dispatched.
    '''

    enroute = 'enroute'
    '''
    Crew is 'en route'.
    '''

    inProgress = 'inProgress'
    '''
    Work is in progress.
    '''

    onSite = 'onSite'
    '''
    Crew is on the site.
    '''

    scheduled = 'scheduled'
    '''
    Work has been scheduled.
    '''

    waitingOnApproval = 'waitingOnApproval'
    '''
    Work approval is pending.
    '''

    waitingOnMaterial = 'waitingOnMaterial'
    '''
    Work has been waiting on material.
    '''

    waitingToBeScheduled = 'waitingToBeScheduled'
    '''
    Work needs to be scheduled.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WorkTaskKind(Enum):
    '''
    Kinds of work tasks.
    '''

    exchange = 'exchange'
    '''
    Work task deals with exchange of assets.
    '''

    install = 'install'
    '''
    Work task deals with installation of assets.
    '''

    investigate = 'investigate'
    '''
    Work task deals with investigation about assets.
    '''

    remove = 'remove'
    '''
    Work task deals with removal of assets.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
@stereotype(CIMStereotype.Attribute)
class WorkTimeScheduleKind(Enum):
    '''
    Kind of work schedule.
    '''

    actual = 'actual'
    '''
    Actual work time schedule.
    '''

    earliest = 'earliest'
    '''
    Earliest work time schedule.
    '''

    estimate = 'estimate'
    '''
    Estimate work time schedule.
    '''

    immediate = 'immediate'
    '''
    ??.
    '''

    latest = 'latest'
    '''
    Latest work time schedule.
    '''

    request = 'request'
    '''
    Request work time schedule.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Work'
    @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://iec.ch/TC57/CIM100#'
    @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 ZoneKind(Enum):
    '''
    Kind of zone.
    '''

    electricalNetwork = 'electricalNetwork'
    '''
    '''

    other = 'other'
    '''
    '''

    specialRestrictionLand = 'specialRestrictionLand'
    '''
    '''

    weatherZone = 'weatherZone'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfLocations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class ZoneType(Enum):
    '''
    zone type
    '''

    ASREGION = 'ASREGION'
    '''
    ancillary service region
    '''

    DCA = 'DCA'
    '''
    designated congestion area
    '''

    LOADZONE = 'LOADZONE'
    '''
    load zone
    '''

    RUCZONE = 'RUCZONE'
    '''
    RUC zone
    '''

    TRADINGHUB = 'TRADINGHUB'
    '''
    trading hub
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.enumeration)
class runTypeCAISO(Enum):
    '''
    S - Scheduling
    P - Pricing
    '''

    P = 'P'
    '''
    '''

    S = 'S'
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfDomain'
    @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 Bearing(CIMUnit):
    '''
    The bearing in degrees (with 360 degrees being True North). Measured in
    degrees clockwise from True North. 0 degrees indicates no direction being
    given.
    '''

    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 'EnvDomain'
    @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 MagneticField(CIMUnit):
    '''
    Magnetic field in nanotesla.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.n)
    @property # read-only
    def unit(self):
        return UnitSymbol.T
    def __init__(self, value, input_unit: str='T', 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 'EnvDomain'
    @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.k)
    @property # read-only
    def unit(self):
        return UnitSymbol.g
    def __init__(self, value, input_unit: str='g', 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 ParticulateDensity(CIMUnit):
    '''
    Particulate density as kg/m<sup>3</sup>.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.kgPerm3
    def __init__(self, value, input_unit: str='kgPerm3', 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 'EnvDomain'
    @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 Speed(CIMUnit):
    '''
    Distance per unit of time.
    '''

    value: float = field(default=None)
    multiplier: UnitMultiplier = field(default=UnitMultiplier.none)
    @property # read-only
    def unit(self):
        return UnitSymbol.mPers
    def __init__(self, value, input_unit: str='mPers', 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.Attribute)
@dataclass(repr=False)
class ASTMStandard(Identity):
    '''
    Standard published by ASTM (ASTM International).
    '''

    standardEdition: Optional[ ASTMStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of ASTM standard.
            '''

        })
    '''
    Edition of ASTM standard.
    '''

    standardNumber: Optional[ ASTMStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ASTM standard number.
            '''

        })
    '''
    ASTM standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class AcceptanceTest(Identity):
    '''
    Acceptance test for assets.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time the asset was last tested using the 'type' of test and yielding
            the current status in 'success' attribute.
            '''

        })
    '''
    Date and time the asset was last tested using the 'type' of test and
    yielding the current status in 'success' attribute.
    '''

    success: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if asset has passed acceptance test and may be placed in or is in
            service. It is set to false if asset is removed from service and is required
            to be tested again before being placed back in service, possibly in a new
            location. Since asset may go through multiple tests during its lifecycle,
            the date of each acceptance test may be recorded in 'Asset.ActivityRecord.status.dateTime'.
            '''

        })
    '''
    True if asset has passed acceptance test and may be placed in or is
    in service. It is set to false if asset is removed from service and
    is required to be tested again before being placed back in service,
    possibly in a new location. Since asset may go through multiple tests
    during its lifecycle, the date of each acceptance test may be recorded
    in 'Asset.ActivityRecord.status.dateTime'.
    '''

    type: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Type of test or group of tests that was conducted on 'dateTime'.
            '''

        })
    '''
    Type of test or group of tests that was conducted on 'dateTime'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class AccountMovement(Identity):
    '''
    Credit/debit movements for an account.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time when the credit/debit transaction was performed.
            '''

        })
    '''
    Date and time when the credit/debit transaction was performed.
    '''

    reason: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Reason for credit/debit transaction on an account. Example: payment received/arrears
            interest levied.
            '''

        })
    '''
    Reason for credit/debit transaction on an account. Example: payment
    received/arrears interest levied.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount that was credited to/debited from an account. For example: payment
            received/interest charge on arrears.
            '''

        })
    '''
    Amount that was credited to/debited from an account. For example: payment
    received/interest charge on arrears.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class AccountingUnit(Identity):
    '''
    Unit for accounting; use either 'energyUnit' or 'currencyUnit' to specify
    the unit for 'value'.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value expressed in applicable units.
            '''

        })
    '''
    Value expressed in applicable units.
    '''

    energyUnit: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of service.
            '''

        })
    '''
    Unit of service.
    '''

    monetaryUnit: Optional[ Currency ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of currency.
            '''

        })
    '''
    Unit of currency.
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Multiplier for the 'energyUnit' or 'monetaryUnit'.
            '''

        })
    '''
    Multiplier for the 'energyUnit' or 'monetaryUnit'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class BankAccountDetail(Identity):
    '''
    Details of a bank account.
    '''

    accountNumber: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Operational account reference number.
            '''

        })
    '''
    Operational account reference number.
    '''

    bankName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of bank where account is held.
            '''

        })
    '''
    Name of bank where account is held.
    '''

    branchCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Branch of bank where account is held.
            '''

        })
    '''
    Branch of bank where account is held.
    '''

    holderID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            National identity number (or equivalent) of account holder.
            '''

        })
    '''
    National identity number (or equivalent) of account holder.
    '''

    holderName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of account holder.
            '''

        })
    '''
    Name of account holder.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class CIGREStandard(Identity):
    '''
    Standard published by CIGRE (Council on Large Electric Systems).
    '''

    standardEdition: Optional[ CIGREStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of CIGRE standard.
            '''

        })
    '''
    Edition of CIGRE standard.
    '''

    standardNumber: Optional[ CIGREStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            CIGRE standard number.
            '''

        })
    '''
    CIGRE standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ControlledAppliance(Identity):
    '''
    Appliance controlled with a PAN device control.
    '''

    isElectricVehicle: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is an electric vehicle.
            '''

        })
    '''
    True if the appliance is an electric vehicle.
    '''

    isExteriorLighting: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is exterior lighting.
            '''

        })
    '''
    True if the appliance is exterior lighting.
    '''

    isGenerationSystem: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a generation system.
            '''

        })
    '''
    True if the appliance is a generation system.
    '''

    isHvacCompressorOrFurnace: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is HVAC compressor or furnace.
            '''

        })
    '''
    True if the appliance is HVAC compressor or furnace.
    '''

    isInteriorLighting: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is interior lighting.
            '''

        })
    '''
    True if the appliance is interior lighting.
    '''

    isIrrigationPump: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is an irrigation pump.
            '''

        })
    '''
    True if the appliance is an irrigation pump.
    '''

    isManagedCommercialIndustrialLoad: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is managed commercial or industrial load.
            '''

        })
    '''
    True if the appliance is managed commercial or industrial load.
    '''

    isPoolPumpSpaJacuzzi: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a pool, pump, spa or jacuzzi.
            '''

        })
    '''
    True if the appliance is a pool, pump, spa or jacuzzi.
    '''

    isSimpleMiscLoad: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a simple miscellaneous load.
            '''

        })
    '''
    True if the appliance is a simple miscellaneous load.
    '''

    isSmartAppliance: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a smart appliance.
            '''

        })
    '''
    True if the appliance is a smart appliance.
    '''

    isStripAndBaseboardHeater: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a stip or baseboard heater.
            '''

        })
    '''
    True if the appliance is a stip or baseboard heater.
    '''

    isWaterHeater: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the appliance is a water heater.
            '''

        })
    '''
    True if the appliance is a water heater.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class DINStandard(Identity):
    '''
    Standard published by DIN (German Institute of Standards).
    '''

    standardEdition: Optional[ DINStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of DIN standard.
            '''

        })
    '''
    Edition of DIN standard.
    '''

    standardNumber: Optional[ DINStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            DIN standard number.
            '''

        })
    '''
    DIN standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class DateInterval(Identity):
    '''
    Interval between two dates.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End date of this interval.
            '''

        })
    '''
    End date of this interval.
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start date of this interval.
            '''

        })
    '''
    Start date of this interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DateTimeInterval(Identity):
    '''
    Interval between two date and time points, where the interval includes
    the start time but excludes end time.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End date and time of this interval. The end date and time where the interval
            is defined up to, but excluded.
            '''

        })
    '''
    End date and time of this interval. The end date and time where the
    interval is defined up to, but excluded.
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start date and time of this interval. The start date and time is included
            in the defined interval.
            '''

        })
    '''
    Start date and time of this interval. The start date and time is included
    in the defined interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class DecimalQuantity(Identity):
    '''
    Quantity with decimal value and associated unit or currency information.
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of this quantity.
            '''

        })
    '''
    Value of this quantity.
    '''

    currency: Optional[ Currency ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Currency of this quantity.
            '''

        })
    '''
    Currency of this quantity.
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit multiplier of this quantity.
            '''

        })
    '''
    Unit multiplier of this quantity.
    '''

    unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of this quantity.
            '''

        })
    '''
    Unit of this quantity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 DeploymentDate(Identity):
    '''
    Dates for deployment events of an asset. May have multiple deployment type
    dates for this device and a compound type allows a query to return multiple
    dates.
    '''

    inServiceDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset most recently put in service.
            '''

        })
    '''
    Date and time asset most recently put in service.
    '''

    installedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset most recently installed.
            '''

        })
    '''
    Date and time asset most recently installed.
    '''

    notYetInstalledDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time of asset deployment transition to not yet installed.
            '''

        })
    '''
    Date and time of asset deployment transition to not yet installed.
    '''

    outOfServiceDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset most recently taken out of service.
            '''

        })
    '''
    Date and time asset most recently taken out of service.
    '''

    removedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time asset most recently removed.
            '''

        })
    '''
    Date and time asset most recently removed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class DobleStandard(Identity):
    '''
    Standard published by Doble.
    '''

    standardEdition: Optional[ DobleStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of Doble standard.
            '''

        })
    '''
    Edition of Doble standard.
    '''

    standardNumber: Optional[ DobleStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Doble standard number.
            '''

        })
    '''
    Doble standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class Due(Identity):
    '''
    Details on amounts due for an account.
    '''

    arrears: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of 'current' that constitutes the arrears portion.
            '''

        })
    '''
    Part of 'current' that constitutes the arrears portion.
    '''

    charges: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of 'current' that constitutes the charge portion: 'charges' = 'Charge.fixedPortion'
            + 'Charge.variablePortion'.
            '''

        })
    '''
    Part of 'current' that constitutes the charge portion: 'charges' =
    'Charge.fixedPortion' + 'Charge.variablePortion'.
    '''

    current: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Current total amount now due: current = principle + arrears + interest
            + charges. Typically the rule for settlement priority is: interest dues,
            then arrears dues, then current dues, then charge dues.
            '''

        })
    '''
    Current total amount now due: current = principle + arrears + interest
    + charges. Typically the rule for settlement priority is: interest
    dues, then arrears dues, then current dues, then charge dues.
    '''

    interest: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of 'current' that constitutes the interest portion.
            '''

        })
    '''
    Part of 'current' that constitutes the interest portion.
    '''

    principle: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Part of 'current' that constitutes the portion of the principle amount
            currently due.
            '''

        })
    '''
    Part of 'current' that constitutes the portion of the principle amount
    currently due.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class EPAStandard(Identity):
    '''
    Standard published by EPA (United States Environmental Protection Agency).
    '''

    standardEdition: Optional[ EPAStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of EPA standard.
            '''

        })
    '''
    Edition of EPA standard.
    '''

    standardNumber: Optional[ EPAStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            EPA standard number.
            '''

        })
    '''
    EPA standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ElectronicAddress(Identity):
    '''
    Electronic address information.
    '''

    email1: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Primary email address.
            '''

        })
    '''
    Primary email address.
    '''

    email2: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Alternate email address.
            '''

        })
    '''
    Alternate email address.
    '''

    lan: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Radio address.
            '''

        })
    '''
    Radio address.
    '''

    userID: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            World wide web address.
            '''

        })
    '''
    World wide web address.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 EndDeviceCapability(Identity):
    '''
    Inherent capabilities of an end device (i.e., the functions it supports).
    '''

    autonomousDst: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if autonomous DST (daylight saving time) function is supported.
            '''

        })
    '''
    True if autonomous DST (daylight saving time) function is supported.
    '''

    communication: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if communication function is supported.
            '''

        })
    '''
    True if communication function is supported.
    '''

    connectDisconnect: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if connect and disconnect function is supported.
            '''

        })
    '''
    True if connect and disconnect function is supported.
    '''

    demandResponse: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if demand response function is supported.
            '''

        })
    '''
    True if demand response function is supported.
    '''

    electricMetering: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if gas metering function is supported.
            '''

        })
    '''
    True if gas metering function is supported.
    '''

    metrology: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if metrology function is supported.
            '''

        })
    '''
    True if metrology function is supported.
    '''

    onRequestRead: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if on request read function is supported.
            '''

        })
    '''
    True if on request read function is supported.
    '''

    outageHistory: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if outage history function is supported.
            '''

        })
    '''
    True if outage history function is supported.
    '''

    pressureCompensation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if device performs pressure compensation for metered quantities.
            '''

        })
    '''
    True if device performs pressure compensation for metered quantities.
    '''

    pricingInfo: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if pricing information is supported.
            '''

        })
    '''
    True if pricing information is supported.
    '''

    pulseOutput: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if device produces pulse outputs.
            '''

        })
    '''
    True if device produces pulse outputs.
    '''

    relaysProgramming: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if relays programming function is supported.
            '''

        })
    '''
    True if relays programming function is supported.
    '''

    reverseFlow: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if reverse flow function is supported.
            '''

        })
    '''
    True if reverse flow function is supported.
    '''

    superCompressibilityCompensation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if device performs super compressibility compensation for metered
            quantities.
            '''

        })
    '''
    True if device performs super compressibility compensation for metered
    quantities.
    '''

    temperatureCompensation: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if device performs temperature compensation for metered quantities.
            '''

        })
    '''
    True if device performs temperature compensation for metered quantities.
    '''

    textMessage: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the displaying of text messages is supported.
            '''

        })
    '''
    True if the displaying of text messages is supported.
    '''

    waterMetering: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if water metering function is supported.
            '''

        })
    '''
    True if water metering function is supported.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class EndDeviceTiming(Identity):
    '''
    Timing for the control actions of end devices.
    '''

    durationIndefinite: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if 'duration' is indefinite.
            '''

        })
    '''
    True if 'duration' is indefinite.
    '''

    duration: Optional[ float | Minutes ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Duration of the end device control action or the business event that is
            the subject of the end device control.
            '''

        })
    '''
    Duration of the end device control action or the business event that
    is the subject of the end device control.
    '''

    randomisation: Optional[ RandomisationKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Kind of randomisation to be applied to the end device control actions to
            be executed.
            '''

        })
    '''
    Kind of randomisation to be applied to the end device control actions
    to be executed.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ExtensionItem(Identity):
    '''
    Specifies the extensions list items
    '''

    extName: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the name of the extension
            '''

        })
    '''
    the name of the extension
    '''

    extType: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The type of the extension
            '''

        })
    '''
    The type of the extension
    '''

    extValue: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            the value of the extension
            '''

        })
    '''
    the value of the extension
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class ExtensionsList(Identity):
    '''
    Specifies the enumeration of the extension item
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 FaultImpedance(Identity):
    '''
    Impedance description for the fault.
    '''

    rGround: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The resistance of the fault between phases and ground.
            '''

        })
    '''
    The resistance of the fault between phases and ground.
    '''

    rLineToLine: Optional[ float | Resistance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The resistance of the fault between phases.
            '''

        })
    '''
    The resistance of the fault between phases.
    '''

    xGround: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reactance of the fault between phases and ground.
            '''

        })
    '''
    The reactance of the fault between phases and ground.
    '''

    xLineToLine: Optional[ float | Reactance ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The reactance of the fault between phases.
            '''

        })
    '''
    The reactance of the fault between phases.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Faults'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class FloatQuantity(Identity):
    '''
    Quantity with float value and associated unit information.
    '''

    value: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of this quantity.
            '''

        })
    '''
    Value of this quantity.
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit multiplier of this quantity.
            '''

        })
    '''
    Unit multiplier of this quantity.
    '''

    unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of this quantity.
            '''

        })
    '''
    Unit of this quantity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class IECStandard(Identity):
    '''
    Standard published by IEC (International Electrotechnical Commission).
    '''

    standardEdition: Optional[ IECStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of IEC standard.
            '''

        })
    '''
    Edition of IEC standard.
    '''

    standardNumber: Optional[ IECStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            IEC standard number.
            '''

        })
    '''
    IEC standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class IEEEStandard(Identity):
    '''
    Standard published by IEEE (Institute of Electrical and Electronics Engineers).
    '''

    standardEdition: Optional[ IEEEStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of IEEE standard.
            '''

        })
    '''
    Edition of IEEE standard.
    '''

    standardNumber: Optional[ IEEEStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            IEEE standard number.
            '''

        })
    '''
    IEEE standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ISOStandard(Identity):
    '''
    Standard published by ISO (International Organization for Standardization).
    '''

    standardEdition: Optional[ ISOStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of ISO standard.
            '''

        })
    '''
    Edition of ISO standard.
    '''

    standardNumber: Optional[ ISOStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            ISO standard number.
            '''

        })
    '''
    ISO standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class InUseDate(Identity):
    '''
    Dates associated with asset 'in use' status. May have multiple in use dates
    for this device and a compound type allows a query to return multiple dates.
    '''

    inUseDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date asset was most recently put in use.
            '''

        })
    '''
    Date asset was most recently put in use.
    '''

    notReadyForUseDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of most recent asset transition to not ready for use state.
            '''

        })
    '''
    Date of most recent asset transition to not ready for use state.
    '''

    readyForUseDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date of most recent asset transition to ready for use state.
            '''

        })
    '''
    Date of most recent asset transition to ready for use state.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class IntegerQuantity(Identity):
    '''
    Quantity with integer value and associated unit information.
    '''

    value: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of this quantity.
            '''

        })
    '''
    Value of this quantity.
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit multiplier of this quantity.
            '''

        })
    '''
    Unit multiplier of this quantity.
    '''

    unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of this quantity.
            '''

        })
    '''
    Unit of this quantity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class LaborelecStandard(Identity):
    '''
    Standard published by Laborelec.
    '''

    standardEdition: Optional[ LaborelecStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of Laborelec standard.
            '''

        })
    '''
    Edition of Laborelec standard.
    '''

    standardNumber: Optional[ LaborelecStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Laborelec standard number.
            '''

        })
    '''
    Laborelec standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class LifecycleDate(Identity):
    '''
    Dates for asset lifecycle state changes. May have multiple lifecycle dates
    for this device and a compound type allows a query to return multiple dates.
    '''

    installationDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date current installation was completed, which may not be the same as the
            in-service date. Asset may have been installed at other locations previously.
            Ignored if asset is (1) not currently installed (e.g., stored in a depot)
            or (2) not intended to be installed (e.g., vehicle, tool).
            '''

        })
    '''
    Date current installation was completed, which may not be the same
    as the in-service date. Asset may have been installed at other locations
    previously. Ignored if asset is (1) not currently installed (e.g.,
    stored in a depot) or (2) not intended to be installed (e.g., vehicle,
    tool).
    '''

    manufacturedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date the asset was manufactured.
            '''

        })
    '''
    Date the asset was manufactured.
    '''

    purchaseDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date the asset was purchased. Note that even though an asset may have been
            purchased, it may not have been received into inventory at the time of
            purchase.
            '''

        })
    '''
    Date the asset was purchased. Note that even though an asset may have
    been purchased, it may not have been received into inventory at the
    time of purchase.
    '''

    receivedDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date the asset was received and first placed into inventory.
            '''

        })
    '''
    Date the asset was received and first placed into inventory.
    '''

    removalDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date when the asset was last removed from service. Ignored if (1) not intended
            to be in service, or (2) currently in service.
            '''

        })
    '''
    Date when the asset was last removed from service. Ignored if (1) not
    intended to be in service, or (2) currently in service.
    '''

    retiredDate: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date the asset is permanently retired from service and may be scheduled
            for disposal. Ignored if asset is (1) currently in service, or (2) permanently
            removed from service.
            '''

        })
    '''
    Date the asset is permanently retired from service and may be scheduled
    for disposal. Ignored if asset is (1) currently in service, or (2)
    permanently removed from service.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class LineDetail(Identity):
    '''
    Details on an amount line, with rounding, date and note.
    '''

    dateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Date and time when this line was created in the application process.
            '''

        })
    '''
    Date and time when this line was created in the application process.
    '''

    note: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Free format note relevant to this line.
            '''

        })
    '''
    Free format note relevant to this line.
    '''

    amount: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Amount for this line item.
            '''

        })
    '''
    Amount for this line item.
    '''

    rounding: Optional[ Money ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Totalised monetary value of all errors due to process rounding or truncating
            that is not reflected in 'amount'.
            '''

        })
    '''
    Totalised monetary value of all errors due to process rounding or truncating
    that is not reflected in 'amount'.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'PaymentMetering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class MonthDayInterval(Identity):
    '''
    Interval between two times specified as month and day.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End time of this interval.
            '''

        })
    '''
    End time of this interval.
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time of this interval.
            '''

        })
    '''
    Start time of this interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@dataclass(repr=False)
class PowerSystemProjectLifecycleToBeDeleted(Identity):
    '''
    Represent the base lifecycle of a functional model change that could be
    a construction of new elements.
    '''

    cancelled: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date the Power System Project is in cancelled stage.
            '''

        })
    '''
    The date the Power System Project is in cancelled stage.
    '''

    committed: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date Power System Project is in committed stage.
            '''

        })
    '''
    The date Power System Project is in committed stage.
    '''

    inBuild: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date Power System Project is in build stage.
            '''

        })
    '''
    The date Power System Project is in build stage.
    '''

    inPlan: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The date Power System Project is in planning stage.
            '''

        })
    '''
    The date Power System Project is in planning stage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'NetworkModelProjects'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class Priority(Identity):
    '''
    Priority definition.
    '''

    justification: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Justification for 'rank'.
            '''

        })
    '''
    Justification for 'rank'.
    '''

    rank: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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 Ratio(Identity):
    '''
    Fraction specified explicitly with a numerator and denominator, which can
    be used to calculate the quotient.
    '''

    denominator: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The part of a fraction that is below the line and that functions as the
            divisor of the numerator.
            '''

        })
    '''
    The part of a fraction that is below the line and that functions as
    the divisor of the numerator.
    '''

    numerator: Optional[float] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            The part of a fraction that is above the line and signifies the number
            to be divided by the denominator.
            '''

        })
    '''
    The part of a fraction that is above the line and signifies the number
    to be divided by the denominator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'InfCommon'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class RationalNumber(Identity):
    '''
    Rational number = 'numerator' / 'denominator'.
    '''

    denominator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Denominator. Value 1 indicates the number is a simple integer.
            '''

        })
    '''
    Denominator. Value 1 indicates the number is a simple integer.
    '''

    numerator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Numerator.
            '''

        })
    '''
    Numerator.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ReadingInterharmonic(Identity):
    '''
    Interharmonics are represented as a rational number 'numerator' / 'denominator',
    and harmonics are represented using the same mechanism and identified by
    'denominator'=1.
    '''

    denominator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interharmonic denominator. Value 0 means not applicable. Value 2 is used
            in combination with 'numerator'=1 to represent interharmonic 1/2. Finally,
            value 1 indicates the harmonic of the order specified with 'numerator'.
            '''

        })
    '''
    Interharmonic denominator. Value 0 means not applicable. Value 2 is
    used in combination with 'numerator'=1 to represent interharmonic 1/2.
    Finally, value 1 indicates the harmonic of the order specified with
    'numerator'.
    '''

    numerator: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Interharmonic numerator. Value 0 means not applicable. Value 1 is used
            in combination with 'denominator'=2 to represent interharmonic 1/2, and
            with 'denominator'=1 it represents fundamental frequency. Finally, values
            greater than 1 indicate the harmonic of that order (e.g., 'numerator'=5
            is the fifth harmonic).
            '''

        })
    '''
    Interharmonic numerator. Value 0 means not applicable. Value 1 is used
    in combination with 'denominator'=2 to represent interharmonic 1/2,
    and with 'denominator'=1 it represents fundamental frequency. Finally,
    values greater than 1 indicate the harmonic of that order (e.g., 'numerator'=5
    is the fifth harmonic).
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Metering'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class RelativeDisplacement(Identity):
    '''
    Vertical displacement relative to either sealevel, ground or the center
    of the earth.
    '''

    displacement: Optional[ float | Displacement ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    kind: Optional[ RelativeDisplacementKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            '''

        })
    '''
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'EnvDomain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@dataclass(repr=False)
class RemoteConnectDisconnectInfo(Identity):
    '''
    Details of remote connect and disconnect function.
    '''

    energyUsageStartDateTime: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start date and time to accumulate energy for energy usage limiting.
            '''

        })
    '''
    Start date and time to accumulate energy for energy usage limiting.
    '''

    isArmConnect: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the RCD switch has to be armed before a connect action can be initiated.
            '''

        })
    '''
    True if the RCD switch has to be armed before a connect action can
    be initiated.
    '''

    isArmDisconnect: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the RCD switch has to be armed before a disconnect action can be
            initiated.
            '''

        })
    '''
    True if the RCD switch has to be armed before a disconnect action can
    be initiated.
    '''

    isEnergyLimiting: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if the energy usage is limited and the customer will be disconnected
            if they go over the limit.
            '''

        })
    '''
    True if the energy usage is limited and the customer will be disconnected
    if they go over the limit.
    '''

    needsPowerLimitCheck: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if load limit has to be checked to issue an immediate disconnect (after
            a connect) if load is over the limit.
            '''

        })
    '''
    True if load limit has to be checked to issue an immediate disconnect
    (after a connect) if load is over the limit.
    '''

    needsVoltageLimitCheck: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if voltage limit has to be checked to prevent connect if voltage is
            over the limit.
            '''

        })
    '''
    True if voltage limit has to be checked to prevent connect if voltage
    is over the limit.
    '''

    usePushbutton: Optional[bool] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            True if pushbutton has to be used for connect.
            '''

        })
    '''
    True if pushbutton has to be used for connect.
    '''

    armedTimeout: Optional[ float | Seconds ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Setting of the timeout elapsed time.
            '''

        })
    '''
    Setting of the timeout elapsed time.
    '''

    customerVoltageLimit: Optional[ float | Voltage ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Voltage limit on customer side of RCD switch above which the connect should
            not be made.
            '''

        })
    '''
    Voltage limit on customer side of RCD switch above which the connect
    should not be made.
    '''

    energyLimit: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Limit of energy before disconnect.
            '''

        })
    '''
    Limit of energy before disconnect.
    '''

    energyUsageWarning: Optional[ float | RealEnergy ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Warning energy limit, used to trigger event code that energy usage is nearing
            limit.
            '''

        })
    '''
    Warning energy limit, used to trigger event code that energy usage
    is nearing limit.
    '''

    powerLimit: Optional[ float | ActivePower ] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Load limit above which the connect should either not take place or should
            cause an immediate disconnect.
            '''

        })
    '''
    Load limit above which the connect should either not take place or
    should cause an immediate disconnect.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'LoadControl'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class ServicePointOutageSummary(Identity):
    '''
    Summary counts of service points affected by an outage. These counts are
    sometimes referred to as total and critical customer count.
    '''

    criticalCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of critical service (delivery) points affected by an outage.
            '''

        })
    '''
    Number of critical service (delivery) points affected by an outage.
    '''

    totalCount: Optional[int] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Number of all service (delivery) points affected by an outage.
            '''

        })
    '''
    Number of all service (delivery) points affected by an outage.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Operations'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Common'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@stereotype(CIMStereotype.Compound)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Post office box.
            '''

        })
    '''
    Post office box.
    '''

    postalCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Postal code for the address.
            '''

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

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 StreetDetail(Identity):
    '''
    Street details, in the context of address.
    '''

    addressGeneral: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#'
    @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.
    '''

    value: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Value of this quantity.
            '''

        })
    '''
    Value of this quantity.
    '''

    multiplier: Optional[ UnitMultiplier ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit multiplier of this quantity.
            '''

        })
    '''
    Unit multiplier of this quantity.
    '''

    unit: Optional[ UnitSymbol ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Unit of this quantity.
            '''

        })
    '''
    Unit of this quantity.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Domain'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class TAPPIStandard(Identity):
    '''
    Standard published by TAPPI.
    '''

    standardEdition: Optional[ TAPPIStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of TAPPI standard.
            '''

        })
    '''
    Edition of TAPPI standard.
    '''

    standardNumber: Optional[ TAPPIStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            TAPPI standard number.
            '''

        })
    '''
    TAPPI standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Compound)
@stereotype(CIMStereotype.Attribute)
@dataclass(repr=False)
class TelephoneNumber(Identity):
    '''
    Telephone number.
    '''

    areaCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            City code.
            '''

        })
    '''
    City code.
    '''

    countryCode: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Country code.
            '''

        })
    '''
    Country code.
    '''

    dialOut: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Main (local) part of this telephone number.
            '''

        })
    '''
    Main (local) part of this telephone number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TimeInterval(Identity):
    '''
    Interval between two times.
    '''

    end: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            End time of this interval.
            '''

        })
    '''
    End time of this interval.
    '''

    start: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Start time of this interval.
            '''

        })
    '''
    Start time of this interval.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 TownDetail(Identity):
    '''
    Town details, in the context of address.
    '''

    code: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Town code.
            '''

        })
    '''
    Town code.
    '''

    country: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Town name.
            '''

        })
    '''
    Town name.
    '''

    section: Optional[str] = field(
        default=None,
        metadata={
        'type': 'Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Name of the state or province.
            '''

        })
    '''
    Name of the state or province.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 UKMinistryOfDefenceStandard(Identity):
    '''
    Standard published by United Kingdom Ministry of Defence.
    '''

    standardEdition: Optional[ UKMinistryOfDefenceStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of UK Ministry of Defence standard.
            '''

        })
    '''
    Edition of UK Ministry of Defence standard.
    '''

    standardNumber: Optional[ UKMinistryofDefenceStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            UK Ministry of Defence standard number.
            '''

        })
    '''
    UK Ministry of Defence standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

@stereotype(CIMStereotype.Attribute)
@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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        '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://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            revision level for this version
            '''

        })
    '''
    revision level for this version
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @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 WEPStandard(Identity):
    '''
    Standard published by Westinghouse - a WEP (Westinghouse Engineering Procedure).
    '''

    standardEdition: Optional[ WEPStandardEditionKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            Edition of WEP standard.
            '''

        })
    '''
    Edition of WEP standard.
    '''

    standardNumber: Optional[ WEPStandardKind ] = field(
        default=None,
        metadata={
        'type': 'enumeration Attribute',
        'minOccurs': '0',
        'maxOccurs': '1',
        'namespace': 'http://iec.ch/TC57/CIM100#',
        'serialize': True,
        'docstring':
            '''
            WEP standard number.
            '''

        })
    '''
    WEP standard number.
    '''

    @property
    def __namespace__(self):
        return 'http://iec.ch/TC57/CIM100#'
    @property
    def __package__(self):
        return 'Assets'
    @property
    def __minOccurs__(self):
        return '0'
    @property
    def __maxOccurs__(self):
        return 'unbounded'

