from __future__ import annotations
from typing import List, Optional, Union, Any
from enum import Enum
from pydantic import Field
from ..base import CIMBase, CIMModelRegistry
from rdflib import URIRef

CIM = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#')

from .DiagramLayout import IdentifiedObject
from .Dynamics import ACDCTerminal, ConductingEquipment, EnergyConsumer, Equipment, PowerSystemResource, RegulatingCondEq
from .EquipmentBoundary import ConnectivityNodeContainer, Connector, EquipmentContainer

class EquipmentVersion(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion')
    baseUML: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.baseUML')
    baseURIcore: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.baseURIcore')
    baseURIoperation: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.baseURIoperation')
    baseURIshortCircuit: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.baseURIshortCircuit')
    date: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.date')
    differenceModelURI: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.differenceModelURI')
    entsoeUML: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.entsoeUML')
    entsoeURIcore: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.entsoeURIcore')
    entsoeURIoperation: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.entsoeURIoperation')
    entsoeURIshortCircuit: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.entsoeURIshortCircuit')
    modelDescriptionURI: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.modelDescriptionURI')
    namespaceRDF: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.namespaceRDF')
    namespaceUML: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.namespaceUML')
    shortName: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion.shortName')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquipmentVersion'), EquipmentVersion)

class Resistance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Resistance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Resistance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Resistance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Resistance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Resistance'), Resistance)

class ActivePowerPerCurrentFlow(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerCurrentFlow'), ActivePowerPerCurrentFlow)

class DCPolarityKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCPolarityKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCPolarityKind'), DCPolarityKind)

class DCBaseTerminal(ACDCTerminal):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBaseTerminal')
    DCNode: Optional['DCNode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCBaseTerminal.DCNode')
    DCTopologicalNode: Optional['DCTopologicalNode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCBaseTerminal.DCTopologicalNode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBaseTerminal'), DCBaseTerminal)

class DCConverterOperatingModeKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterOperatingModeKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterOperatingModeKind'), DCConverterOperatingModeKind)

class DCEquipmentContainer(EquipmentContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCEquipmentContainer')
    DCNodes: List['DCNode'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCEquipmentContainer.DCNodes')
    DCTopologicalNode: List['DCTopologicalNode'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCEquipmentContainer.DCTopologicalNode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCEquipmentContainer'), DCEquipmentContainer)

class Inductance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Inductance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Inductance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Inductance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Inductance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Inductance'), Inductance)

class DCLine(DCEquipmentContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCLine')
    Region: Optional['SubGeographicalRegion'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLine.Region')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCLine'), DCLine)

class Capacitance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Capacitance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Capacitance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Capacitance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Capacitance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Capacitance'), Capacitance)

class DCNode(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCNode')
    DCEquipmentContainer: Optional['DCEquipmentContainer'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCNode.DCEquipmentContainer')
    DCTerminals: List['DCBaseTerminal'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCNode.DCTerminals')
    DCTopologicalNode: Optional['DCTopologicalNode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCNode.DCTopologicalNode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCNode'), DCNode)

class DCTerminal(DCBaseTerminal):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCTerminal')
    DCConductingEquipment: Optional['DCConductingEquipment'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCTerminal.DCConductingEquipment')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCTerminal'), DCTerminal)

class PerLengthDCLineParameter(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter')
    DCLineSegments: List['DCLineSegment'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter.DCLineSegments')
    capacitance: Optional['CapacitancePerLength'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter.capacitance')
    inductance: Optional['InductancePerLength'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter.inductance')
    resistance: Optional['ResistancePerLength'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter.resistance')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PerLengthDCLineParameter'), PerLengthDCLineParameter)

class CapacitancePerLength(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CapacitancePerLength'), CapacitancePerLength)

class InductancePerLength(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#InductancePerLength'), InductancePerLength)

class ResistancePerLength(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ResistancePerLength'), ResistancePerLength)

class BusNameMarker(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BusNameMarker')
    ReportingGroup: Optional['ReportingGroup'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BusNameMarker.ReportingGroup')
    Terminal: List['ACDCTerminal'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BusNameMarker.Terminal')
    priority: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BusNameMarker.priority')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BusNameMarker'), BusNameMarker)

class DateTime(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DateTime')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DateTime'), DateTime)

class PhaseCode(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode'), PhaseCode)

class PerCent(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PerCent')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerCent.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerCent.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PerCent.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PerCent'), PerCent)

class Source(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Source')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Source'), Source)

class Validity(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Validity')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Validity'), Validity)

class AngleRadians(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AngleRadians')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AngleRadians.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AngleRadians.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AngleRadians.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AngleRadians'), AngleRadians)

class Reactance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Reactance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Reactance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Reactance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Reactance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Reactance'), Reactance)

class FossilFuel(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#FossilFuel')
    ThermalGeneratingUnit: Optional['ThermalGeneratingUnit'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#FossilFuel.ThermalGeneratingUnit')
    fossilFuelType: Optional['FuelType'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#FossilFuel.fossilFuelType')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#FossilFuel'), FossilFuel)

class FuelType(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#FuelType')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#FuelType'), FuelType)

class GeneratorControlSource(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratorControlSource')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratorControlSource'), GeneratorControlSource)

class Money(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Money')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Money.multiplier')
    unit: Optional['Currency'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Money.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Money.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Money'), Money)

class Currency(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Currency')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Currency'), Currency)

class Decimal(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Decimal')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Decimal'), Decimal)

class HydroEnergyConversionKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroEnergyConversionKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroEnergyConversionKind'), HydroEnergyConversionKind)

class HydroPlantStorageKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPlantStorageKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPlantStorageKind'), HydroPlantStorageKind)

class HydroPowerPlant(PowerSystemResource):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPowerPlant')
    HydroGeneratingUnits: List['HydroGeneratingUnit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPowerPlant.HydroGeneratingUnits')
    HydroPumps: List['HydroPump'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPowerPlant.HydroPumps')
    hydroPlantStorageType: Optional['HydroPlantStorageKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPowerPlant.hydroPlantStorageType')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPowerPlant'), HydroPowerPlant)

class WindGenUnitKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindGenUnitKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindGenUnitKind'), WindGenUnitKind)

class BasicIntervalSchedule(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BasicIntervalSchedule')
    startTime: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BasicIntervalSchedule.startTime')
    value1Unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BasicIntervalSchedule.value1Unit')
    value2Unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BasicIntervalSchedule.value2Unit')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BasicIntervalSchedule'), BasicIntervalSchedule)

class Curve(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Curve')
    CurveDatas: List['CurveData'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Curve.CurveDatas')
    curveStyle: Optional['CurveStyle'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Curve.curveStyle')
    xUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Curve.xUnit')
    y1Unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Curve.y1Unit')
    y2Unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Curve.y2Unit')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Curve'), Curve)

class CurveStyle(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurveStyle')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurveStyle'), CurveStyle)

class CurveData(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData')
    Curve: Optional['Curve'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData.Curve')
    xvalue: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData.xvalue')
    y1value: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData.y1value')
    y2value: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData.y2value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurveData'), CurveData)

class RegularIntervalSchedule(BasicIntervalSchedule):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegularIntervalSchedule')
    TimePoints: List['RegularTimePoint'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularIntervalSchedule.TimePoints')
    endTime: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularIntervalSchedule.endTime')
    timeStep: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularIntervalSchedule.timeStep')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegularIntervalSchedule'), RegularIntervalSchedule)

class ReportingGroup(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReportingGroup')
    BusNameMarker: List['BusNameMarker'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReportingGroup.BusNameMarker')
    TopologicalNode: List['TopologicalNode'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReportingGroup.TopologicalNode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReportingGroup'), ReportingGroup)

class Substation(EquipmentContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Substation')
    DCConverterUnit: List['DCConverterUnit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Substation.DCConverterUnit')
    Region: Optional['SubGeographicalRegion'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Substation.Region')
    VoltageLevels: List['VoltageLevel'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Substation.VoltageLevels')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Substation'), Substation)

class VoltageLevel(EquipmentContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel')
    BaseVoltage: Optional['BaseVoltage'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel.BaseVoltage')
    Bays: List['Bay'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel.Bays')
    Substation: Optional['Substation'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel.Substation')
    highVoltageLimit: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel.highVoltageLimit')
    lowVoltageLimit: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel.lowVoltageLimit')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLevel'), VoltageLevel)

class LimitTypeKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LimitTypeKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LimitTypeKind'), LimitTypeKind)

class OperationalLimit(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimit')
    OperationalLimitSet: Optional['OperationalLimitSet'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimit.OperationalLimitSet')
    OperationalLimitType: Optional['OperationalLimitType'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimit.OperationalLimitType')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimit'), OperationalLimit)

class OperationalLimitDirectionKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitDirectionKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitDirectionKind'), OperationalLimitDirectionKind)

class OperationalLimitSet(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitSet')
    Equipment: Optional['Equipment'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitSet.Equipment')
    OperationalLimitValue: List['OperationalLimit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitSet.OperationalLimitValue')
    Terminal: Optional['ACDCTerminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitSet.Terminal')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitSet'), OperationalLimitSet)

class OperationalLimitType(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType')
    OperationalLimit: List['OperationalLimit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType.OperationalLimit')
    acceptableDuration: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType.acceptableDuration')
    direction: Optional['OperationalLimitDirectionKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType.direction')
    limitType: Optional['LimitTypeKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType.limitType')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#OperationalLimitType'), OperationalLimitType)

class VoltageLimit(OperationalLimit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLimit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLimit.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltageLimit'), VoltageLimit)

class Susceptance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Susceptance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Susceptance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Susceptance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Susceptance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Susceptance'), Susceptance)

class Conductance(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Conductance')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Conductance.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Conductance.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Conductance.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Conductance'), Conductance)

class RotationSpeed(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RotationSpeed'), RotationSpeed)

class ReactivePower(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReactivePower')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReactivePower.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReactivePower.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReactivePower.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReactivePower'), ReactivePower)

class ActivePowerPerFrequency(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ActivePowerPerFrequency'), ActivePowerPerFrequency)

class NonlinearShuntCompensatorPoint(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint')
    NonlinearShuntCompensator: Optional['NonlinearShuntCompensator'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.NonlinearShuntCompensator')
    b: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.b')
    b0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.b0')
    g: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.g')
    g0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.g0')
    sectionNumber: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint.sectionNumber')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensatorPoint'), NonlinearShuntCompensatorPoint)

class PetersenCoilModeKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PetersenCoilModeKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PetersenCoilModeKind'), PetersenCoilModeKind)

class PhaseTapChangerTable(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTable')
    PhaseTapChangerTablePoint: List['PhaseTapChangerTablePoint'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTable.PhaseTapChangerTablePoint')
    PhaseTapChangerTabular: List['PhaseTapChangerTabular'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTable.PhaseTapChangerTabular')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTable'), PhaseTapChangerTable)

class WindingConnection(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindingConnection')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindingConnection'), WindingConnection)

class TransformerControlMode(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerControlMode')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerControlMode'), TransformerControlMode)

class RatioTapChangerTable(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTable')
    RatioTapChanger: List['RatioTapChanger'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTable.RatioTapChanger')
    RatioTapChangerTablePoint: List['RatioTapChangerTablePoint'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTable.RatioTapChangerTablePoint')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTable'), RatioTapChangerTable)

class ReactiveCapabilityCurve(Curve):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReactiveCapabilityCurve')
    EquivalentInjection: List['EquivalentInjection'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReactiveCapabilityCurve.EquivalentInjection')
    InitiallyUsedBySynchronousMachines: List['SynchronousMachine'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ReactiveCapabilityCurve.InitiallyUsedBySynchronousMachines')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ReactiveCapabilityCurve'), ReactiveCapabilityCurve)

class RegulatingControl(PowerSystemResource):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl')
    RegulatingCondEq: List['RegulatingCondEq'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.RegulatingCondEq')
    RegulationSchedule: List['RegulationSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.RegulationSchedule')
    Terminal: Optional['Terminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.Terminal')
    discrete: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.discrete')
    enabled: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.enabled')
    mode: Optional['RegulatingControlModeKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.mode')
    targetDeadband: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.targetDeadband')
    targetValue: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.targetValue')
    targetValueUnitMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl.targetValueUnitMultiplier')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControl'), RegulatingControl)

class RegulatingControlModeKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControlModeKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegulatingControlModeKind'), RegulatingControlModeKind)

class ShortCircuitRotorKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ShortCircuitRotorKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ShortCircuitRotorKind'), ShortCircuitRotorKind)

class VoltagePerReactivePower(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower')
    denominatorMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower.denominatorMultiplier')
    denominatorUnit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower.denominatorUnit')
    multiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower.multiplier')
    unit: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower.unit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VoltagePerReactivePower'), VoltagePerReactivePower)

class SVCControlMode(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SVCControlMode')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SVCControlMode'), SVCControlMode)

class SynchronousMachineKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SynchronousMachineKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SynchronousMachineKind'), SynchronousMachineKind)

class TapChanger(PowerSystemResource):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger')
    SvTapStep: Optional['SvTapStep'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.SvTapStep')
    TapChangerControl: Optional['TapChangerControl'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.TapChangerControl')
    TapSchedules: List['TapSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.TapSchedules')
    controlEnabled: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.controlEnabled')
    highStep: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.highStep')
    lowStep: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.lowStep')
    ltcFlag: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.ltcFlag')
    neutralStep: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.neutralStep')
    neutralU: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.neutralU')
    normalStep: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.normalStep')
    step: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger.step')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChanger'), TapChanger)

class TapChangerControl(RegulatingControl):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerControl')
    TapChanger: List['TapChanger'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerControl.TapChanger')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerControl'), TapChangerControl)

class TapChangerTablePoint(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint')
    b: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.b')
    g: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.g')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.r')
    ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.ratio')
    step: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.step')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint.x')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TapChangerTablePoint'), TapChangerTablePoint)

class TransformerEnd(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd')
    BaseVoltage: Optional['BaseVoltage'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.BaseVoltage')
    PhaseTapChanger: Optional['PhaseTapChanger'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.PhaseTapChanger')
    RatioTapChanger: Optional['RatioTapChanger'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.RatioTapChanger')
    Terminal: Optional['Terminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.Terminal')
    endNumber: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.endNumber')
    grounded: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.grounded')
    rground: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.rground')
    xground: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd.xground')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TransformerEnd'), TransformerEnd)

class LoadGroup(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadGroup')
    SubLoadArea: Optional['SubLoadArea'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadGroup.SubLoadArea')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadGroup'), LoadGroup)

class LoadResponseCharacteristic(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic')
    EnergyConsumer: List['EnergyConsumer'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.EnergyConsumer')
    exponentModel: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.exponentModel')
    pConstantCurrent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.pConstantCurrent')
    pConstantImpedance: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.pConstantImpedance')
    pConstantPower: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.pConstantPower')
    pFrequencyExponent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.pFrequencyExponent')
    pVoltageExponent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.pVoltageExponent')
    qConstantCurrent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.qConstantCurrent')
    qConstantImpedance: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.qConstantImpedance')
    qConstantPower: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.qConstantPower')
    qFrequencyExponent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.qFrequencyExponent')
    qVoltageExponent: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic.qVoltageExponent')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadResponseCharacteristic'), LoadResponseCharacteristic)

class NonConformLoadGroup(LoadGroup):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoadGroup')
    EnergyConsumers: List['NonConformLoad'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoadGroup.EnergyConsumers')
    NonConformLoadSchedules: List['NonConformLoadSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoadGroup.NonConformLoadSchedules')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoadGroup'), NonConformLoadGroup)

class MonthDay(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#MonthDay')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#MonthDay'), MonthDay)

class EquivalentNetwork(ConnectivityNodeContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentNetwork')
    EquivalentEquipments: List['EquivalentEquipment'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentNetwork.EquivalentEquipments')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentNetwork'), EquivalentNetwork)

class ControlArea(PowerSystemResource):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea')
    ControlAreaGeneratingUnit: List['ControlAreaGeneratingUnit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.ControlAreaGeneratingUnit')
    EnergyArea: Optional['EnergyArea'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.EnergyArea')
    TieFlow: List['TieFlow'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.TieFlow')
    netInterchange: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.netInterchange')
    pTolerance: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.pTolerance')
    type: Optional['ControlAreaTypeKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea.type')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlArea'), ControlArea)

class ControlAreaTypeKind(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaTypeKind')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaTypeKind'), ControlAreaTypeKind)

class ControlAreaGeneratingUnit(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaGeneratingUnit')
    ControlArea: Optional['ControlArea'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaGeneratingUnit.ControlArea')
    GeneratingUnit: Optional['GeneratingUnit'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaGeneratingUnit.GeneratingUnit')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ControlAreaGeneratingUnit'), ControlAreaGeneratingUnit)

class TieFlow(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TieFlow')
    ControlArea: Optional['ControlArea'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TieFlow.ControlArea')
    Terminal: Optional['Terminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TieFlow.Terminal')
    positiveFlowIn: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#TieFlow.positiveFlowIn')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#TieFlow'), TieFlow)

class ACDCConverterDCTerminal(DCBaseTerminal):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverterDCTerminal')
    DCConductingEquipment: Optional['ACDCConverter'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverterDCTerminal.DCConductingEquipment')
    polarity: Optional['DCPolarityKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverterDCTerminal.polarity')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverterDCTerminal'), ACDCConverterDCTerminal)

class DCConductingEquipment(Equipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConductingEquipment')
    DCTerminals: List['DCTerminal'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCConductingEquipment.DCTerminals')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConductingEquipment'), DCConductingEquipment)

class DCConverterUnit(DCEquipmentContainer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterUnit')
    Substation: Optional['Substation'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterUnit.Substation')
    operationMode: Optional['DCConverterOperatingModeKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterUnit.operationMode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCConverterUnit'), DCConverterUnit)

class DCGround(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCGround')
    inductance: Optional['Inductance'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCGround.inductance')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCGround.r')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCGround'), DCGround)

class DCLineSegment(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment')
    PerLengthParameter: Optional['PerLengthDCLineParameter'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment.PerLengthParameter')
    capacitance: Optional['Capacitance'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment.capacitance')
    inductance: Optional['Inductance'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment.inductance')
    length: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment.length')
    resistance: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment.resistance')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCLineSegment'), DCLineSegment)

class DCSeriesDevice(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCSeriesDevice')
    inductance: Optional['Inductance'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCSeriesDevice.inductance')
    ratedUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCSeriesDevice.ratedUdc')
    resistance: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCSeriesDevice.resistance')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCSeriesDevice'), DCSeriesDevice)

class DCShunt(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCShunt')
    capacitance: Optional['Capacitance'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCShunt.capacitance')
    ratedUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCShunt.ratedUdc')
    resistance: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DCShunt.resistance')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCShunt'), DCShunt)

class DCSwitch(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCSwitch')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCSwitch'), DCSwitch)

class VsCapabilityCurve(Curve):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VsCapabilityCurve')
    VsConverterDCSides: List['VsConverter'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsCapabilityCurve.VsConverterDCSides')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VsCapabilityCurve'), VsCapabilityCurve)

class GeneratingUnit(Equipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit')
    ControlAreaGeneratingUnit: List['ControlAreaGeneratingUnit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.ControlAreaGeneratingUnit')
    GrossToNetActivePowerCurves: List['GrossToNetActivePowerCurve'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.GrossToNetActivePowerCurves')
    RotatingMachine: List['RotatingMachine'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.RotatingMachine')
    genControlSource: Optional['GeneratorControlSource'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.genControlSource')
    governorSCD: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.governorSCD')
    initialP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.initialP')
    longPF: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.longPF')
    maxOperatingP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.maxOperatingP')
    maximumAllowableSpinningReserve: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.maximumAllowableSpinningReserve')
    minOperatingP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.minOperatingP')
    nominalP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.nominalP')
    normalPF: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.normalPF')
    ratedGrossMaxP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.ratedGrossMaxP')
    ratedGrossMinP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.ratedGrossMinP')
    ratedNetMaxP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.ratedNetMaxP')
    shortPF: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.shortPF')
    startupCost: Optional['Money'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.startupCost')
    totalEfficiency: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.totalEfficiency')
    variableCost: Optional['Money'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit.variableCost')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#GeneratingUnit'), GeneratingUnit)

class HydroGeneratingUnit(GeneratingUnit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroGeneratingUnit')
    HydroPowerPlant: Optional['HydroPowerPlant'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroGeneratingUnit.HydroPowerPlant')
    energyConversionCapability: Optional['HydroEnergyConversionKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroGeneratingUnit.energyConversionCapability')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroGeneratingUnit'), HydroGeneratingUnit)

class HydroPump(Equipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPump')
    HydroPowerPlant: Optional['HydroPowerPlant'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPump.HydroPowerPlant')
    RotatingMachine: Optional['RotatingMachine'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPump.RotatingMachine')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#HydroPump'), HydroPump)

class NuclearGeneratingUnit(GeneratingUnit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NuclearGeneratingUnit')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NuclearGeneratingUnit'), NuclearGeneratingUnit)

class SolarGeneratingUnit(GeneratingUnit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SolarGeneratingUnit')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SolarGeneratingUnit'), SolarGeneratingUnit)

class ThermalGeneratingUnit(GeneratingUnit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ThermalGeneratingUnit')
    FossilFuels: List['FossilFuel'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ThermalGeneratingUnit.FossilFuels')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ThermalGeneratingUnit'), ThermalGeneratingUnit)

class WindGeneratingUnit(GeneratingUnit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindGeneratingUnit')
    windGenUnitType: Optional['WindGenUnitKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#WindGeneratingUnit.windGenUnitType')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#WindGeneratingUnit'), WindGeneratingUnit)

class CurrentLimit(OperationalLimit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurrentLimit')
    value: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CurrentLimit.value')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CurrentLimit'), CurrentLimit)

class PhaseTapChanger(TapChanger):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChanger')
    TransformerEnd: Optional['TransformerEnd'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChanger.TransformerEnd')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChanger'), PhaseTapChanger)

class PhaseTapChangerLinear(PhaseTapChanger):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerLinear')
    stepPhaseShiftIncrement: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerLinear.stepPhaseShiftIncrement')
    xMax: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerLinear.xMax')
    xMin: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerLinear.xMin')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerLinear'), PhaseTapChangerLinear)

class PhaseTapChangerNonLinear(PhaseTapChanger):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerNonLinear')
    voltageStepIncrement: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerNonLinear.voltageStepIncrement')
    xMax: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerNonLinear.xMax')
    xMin: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerNonLinear.xMin')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerNonLinear'), PhaseTapChangerNonLinear)

class PhaseTapChangerSymmetrical(PhaseTapChangerNonLinear):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerSymmetrical')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerSymmetrical'), PhaseTapChangerSymmetrical)

class PhaseTapChangerTablePoint(TapChangerTablePoint):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTablePoint')
    PhaseTapChangerTable: Optional['PhaseTapChangerTable'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTablePoint.PhaseTapChangerTable')
    angle: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTablePoint.angle')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTablePoint'), PhaseTapChangerTablePoint)

class PhaseTapChangerTabular(PhaseTapChanger):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTabular')
    PhaseTapChangerTable: Optional['PhaseTapChangerTable'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTabular.PhaseTapChangerTable')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerTabular'), PhaseTapChangerTabular)

class PowerTransformerEnd(TransformerEnd):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd')
    PowerTransformer: Optional['PowerTransformer'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.PowerTransformer')
    b: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.b')
    b0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.b0')
    connectionKind: Optional['WindingConnection'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.connectionKind')
    g: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.g')
    g0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.g0')
    phaseAngleClock: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.phaseAngleClock')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.r')
    r0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.r0')
    ratedS: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.ratedS')
    ratedU: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.ratedU')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.x')
    x0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd.x0')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformerEnd'), PowerTransformerEnd)

class RatioTapChanger(TapChanger):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger')
    RatioTapChangerTable: Optional['RatioTapChangerTable'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger.RatioTapChangerTable')
    TransformerEnd: Optional['TransformerEnd'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger.TransformerEnd')
    stepVoltageIncrement: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger.stepVoltageIncrement')
    tculControlMode: Optional['TransformerControlMode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger.tculControlMode')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChanger'), RatioTapChanger)

class RatioTapChangerTablePoint(TapChangerTablePoint):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTablePoint')
    RatioTapChangerTable: Optional['RatioTapChangerTable'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTablePoint.RatioTapChangerTable')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RatioTapChangerTablePoint'), RatioTapChangerTablePoint)

class ConformLoadGroup(LoadGroup):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoadGroup')
    ConformLoadSchedules: List['ConformLoadSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoadGroup.ConformLoadSchedules')
    EnergyConsumers: List['ConformLoad'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoadGroup.EnergyConsumers')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoadGroup'), ConformLoadGroup)

class ACDCConverter(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter')
    DCTerminals: List['ACDCConverterDCTerminal'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.DCTerminals')
    PccTerminal: Optional['Terminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.PccTerminal')
    baseS: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.baseS')
    idc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.idc')
    idleLoss: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.idleLoss')
    maxUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.maxUdc')
    minUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.minUdc')
    numberOfValves: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.numberOfValves')
    p: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.p')
    poleLossP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.poleLossP')
    q: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.q')
    ratedUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.ratedUdc')
    resistiveLoss: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.resistiveLoss')
    switchingLoss: Optional['ActivePowerPerCurrentFlow'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.switchingLoss')
    targetPpcc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.targetPpcc')
    targetUdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.targetUdc')
    uc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.uc')
    udc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.udc')
    valveU0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter.valveU0')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACDCConverter'), ACDCConverter)

class CsConverter(ACDCConverter):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter')
    alpha: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.alpha')
    gamma: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.gamma')
    maxAlpha: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.maxAlpha')
    maxGamma: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.maxGamma')
    maxIdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.maxIdc')
    minAlpha: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.minAlpha')
    minGamma: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.minGamma')
    minIdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.minIdc')
    operatingMode: Optional['CsOperatingModeKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.operatingMode')
    pPccControl: Optional['CsPpccControlKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.pPccControl')
    ratedIdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.ratedIdc')
    targetAlpha: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.targetAlpha')
    targetGamma: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.targetGamma')
    targetIdc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter.targetIdc')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#CsConverter'), CsConverter)

class DCBreaker(DCSwitch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBreaker')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBreaker'), DCBreaker)

class DCBusbar(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBusbar')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCBusbar'), DCBusbar)

class DCChopper(DCConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCChopper')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCChopper'), DCChopper)

class DCDisconnector(DCSwitch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCDisconnector')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DCDisconnector'), DCDisconnector)

class VsConverter(ACDCConverter):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter')
    CapabilityCurve: Optional['VsCapabilityCurve'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.CapabilityCurve')
    delta: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.delta')
    droop: Optional['PU'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.droop')
    droopCompensation: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.droopCompensation')
    maxModulationIndex: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.maxModulationIndex')
    maxValveCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.maxValveCurrent')
    pPccControl: Optional['VsPpccControlKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.pPccControl')
    qPccControl: Optional['VsQpccControlKind'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.qPccControl')
    qShare: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.qShare')
    targetQpcc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.targetQpcc')
    targetUpcc: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.targetUpcc')
    uf: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter.uf')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#VsConverter'), VsConverter)

class BusbarSection(Connector):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BusbarSection')
    ipMax: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#BusbarSection.ipMax')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#BusbarSection'), BusbarSection)

class Conductor(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Conductor')
    length: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Conductor.length')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Conductor'), Conductor)

class ExternalNetworkInjection(RegulatingCondEq):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection')
    governorSCD: Optional['ActivePowerPerFrequency'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.governorSCD')
    ikSecond: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.ikSecond')
    maxInitialSymShCCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxInitialSymShCCurrent')
    maxP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxP')
    maxQ: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxQ')
    maxR0ToX0Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxR0ToX0Ratio')
    maxR1ToX1Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxR1ToX1Ratio')
    maxZ0ToZ1Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.maxZ0ToZ1Ratio')
    minInitialSymShCCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minInitialSymShCCurrent')
    minP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minP')
    minQ: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minQ')
    minR0ToX0Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minR0ToX0Ratio')
    minR1ToX1Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minR1ToX1Ratio')
    minZ0ToZ1Ratio: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.minZ0ToZ1Ratio')
    p: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.p')
    q: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.q')
    referencePriority: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.referencePriority')
    voltageFactor: Optional['PU'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection.voltageFactor')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ExternalNetworkInjection'), ExternalNetworkInjection)

class PhaseTapChangerAsymmetrical(PhaseTapChangerNonLinear):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerAsymmetrical')
    windingConnectionAngle: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerAsymmetrical.windingConnectionAngle')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseTapChangerAsymmetrical'), PhaseTapChangerAsymmetrical)

class PowerTransformer(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer')
    PowerTransformerEnd: List['PowerTransformerEnd'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.PowerTransformerEnd')
    beforeShCircuitHighestOperatingCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.beforeShCircuitHighestOperatingCurrent')
    beforeShCircuitHighestOperatingVoltage: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.beforeShCircuitHighestOperatingVoltage')
    beforeShortCircuitAnglePf: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.beforeShortCircuitAnglePf')
    highSideMinOperatingU: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.highSideMinOperatingU')
    isPartOfGeneratorUnit: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.isPartOfGeneratorUnit')
    operationalValuesConsidered: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer.operationalValuesConsidered')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#PowerTransformer'), PowerTransformer)

class SeriesCompensator(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.r')
    r0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.r0')
    varistorPresent: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.varistorPresent')
    varistorRatedCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.varistorRatedCurrent')
    varistorVoltageThreshold: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.varistorVoltageThreshold')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.x')
    x0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator.x0')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#SeriesCompensator'), SeriesCompensator)

class ShuntCompensator(RegulatingCondEq):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator')
    SvShuntCompensatorSections: Optional['SvShuntCompensatorSections'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.SvShuntCompensatorSections')
    aVRDelay: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.aVRDelay')
    grounded: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.grounded')
    maximumSections: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.maximumSections')
    nomU: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.nomU')
    normalSections: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.normalSections')
    sections: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.sections')
    switchOnCount: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.switchOnCount')
    switchOnDate: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.switchOnDate')
    voltageSensitivity: Optional['VoltagePerReactivePower'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator.voltageSensitivity')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ShuntCompensator'), ShuntCompensator)

class StaticVarCompensator(RegulatingCondEq):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator')
    capacitiveRating: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.capacitiveRating')
    inductiveRating: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.inductiveRating')
    q: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.q')
    sVCControlMode: Optional['SVCControlMode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.sVCControlMode')
    slope: Optional['VoltagePerReactivePower'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.slope')
    voltageSetPoint: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator.voltageSetPoint')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#StaticVarCompensator'), StaticVarCompensator)

class Switch(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Switch')
    SwitchSchedules: List['SwitchSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Switch.SwitchSchedules')
    normalOpen: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Switch.normalOpen')
    open: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Switch.open')
    ratedCurrent: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Switch.ratedCurrent')
    retained: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Switch.retained')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Switch'), Switch)

class ConformLoad(EnergyConsumer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoad')
    LoadGroup: Optional['ConformLoadGroup'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoad.LoadGroup')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ConformLoad'), ConformLoad)

class NonConformLoad(EnergyConsumer):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoad')
    LoadGroup: Optional['NonConformLoadGroup'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoad.LoadGroup')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonConformLoad'), NonConformLoad)

class EquivalentEquipment(ConductingEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentEquipment')
    EquivalentNetwork: Optional['EquivalentNetwork'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentEquipment.EquivalentNetwork')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentEquipment'), EquivalentEquipment)

class EquivalentInjection(EquivalentEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection')
    ReactiveCapabilityCurve: Optional['ReactiveCapabilityCurve'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.ReactiveCapabilityCurve')
    maxP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.maxP')
    maxQ: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.maxQ')
    minP: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.minP')
    minQ: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.minQ')
    p: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.p')
    q: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.q')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.r')
    r0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.r0')
    r2: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.r2')
    regulationCapability: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.regulationCapability')
    regulationStatus: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.regulationStatus')
    regulationTarget: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.regulationTarget')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.x')
    x0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.x0')
    x2: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection.x2')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentInjection'), EquivalentInjection)

class EquivalentShunt(EquivalentEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentShunt')
    b: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentShunt.b')
    g: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentShunt.g')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentShunt'), EquivalentShunt)

class ACLineSegment(Conductor):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment')
    b0ch: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.b0ch')
    bch: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.bch')
    g0ch: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.g0ch')
    gch: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.gch')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.r')
    r0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.r0')
    shortCircuitEndTemperature: Optional['Temperature'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.shortCircuitEndTemperature')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.x')
    x0: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment.x0')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ACLineSegment'), ACLineSegment)

class Disconnector(Switch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Disconnector')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Disconnector'), Disconnector)

class LinearShuntCompensator(ShuntCompensator):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator')
    b0PerSection: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator.b0PerSection')
    bPerSection: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator.bPerSection')
    g0PerSection: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator.g0PerSection')
    gPerSection: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator.gPerSection')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LinearShuntCompensator'), LinearShuntCompensator)

class NonlinearShuntCompensator(ShuntCompensator):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensator')
    NonlinearShuntCompensatorPoints: List['NonlinearShuntCompensatorPoint'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensator.NonlinearShuntCompensatorPoints')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#NonlinearShuntCompensator'), NonlinearShuntCompensator)

class ProtectedSwitch(Switch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ProtectedSwitch')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ProtectedSwitch'), ProtectedSwitch)

class EquivalentBranch(EquivalentEquipment):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch')
    negativeR12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.negativeR12')
    negativeR21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.negativeR21')
    negativeX12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.negativeX12')
    negativeX21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.negativeX21')
    positiveR12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.positiveR12')
    positiveR21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.positiveR21')
    positiveX12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.positiveX12')
    positiveX21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.positiveX21')
    r: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.r')
    r21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.r21')
    x: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.x')
    x21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.x21')
    zeroR12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.zeroR12')
    zeroR21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.zeroR21')
    zeroX12: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.zeroX12')
    zeroX21: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch.zeroX21')

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#EquivalentBranch'), EquivalentBranch)

class Breaker(ProtectedSwitch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Breaker')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Breaker'), Breaker)

class LoadBreakSwitch(ProtectedSwitch):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadBreakSwitch')
    pass

CIMModelRegistry.register(URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#LoadBreakSwitch'), LoadBreakSwitch)

__all__ = [
    'EquipmentVersion',
    'Resistance',
    'ActivePowerPerCurrentFlow',
    'DCPolarityKind',
    'DCBaseTerminal',
    'DCConverterOperatingModeKind',
    'DCEquipmentContainer',
    'Inductance',
    'DCLine',
    'Capacitance',
    'DCNode',
    'DCTerminal',
    'PerLengthDCLineParameter',
    'CapacitancePerLength',
    'InductancePerLength',
    'ResistancePerLength',
    'BusNameMarker',
    'DateTime',
    'PhaseCode',
    'PerCent',
    'Source',
    'Validity',
    'AngleRadians',
    'Reactance',
    'FossilFuel',
    'FuelType',
    'GeneratorControlSource',
    'Money',
    'Currency',
    'Decimal',
    'HydroEnergyConversionKind',
    'HydroPlantStorageKind',
    'HydroPowerPlant',
    'WindGenUnitKind',
    'BasicIntervalSchedule',
    'Curve',
    'CurveStyle',
    'CurveData',
    'RegularIntervalSchedule',
    'ReportingGroup',
    'Substation',
    'VoltageLevel',
    'LimitTypeKind',
    'OperationalLimit',
    'OperationalLimitDirectionKind',
    'OperationalLimitSet',
    'OperationalLimitType',
    'VoltageLimit',
    'Susceptance',
    'Conductance',
    'RotationSpeed',
    'ReactivePower',
    'ActivePowerPerFrequency',
    'NonlinearShuntCompensatorPoint',
    'PetersenCoilModeKind',
    'PhaseTapChangerTable',
    'WindingConnection',
    'TransformerControlMode',
    'RatioTapChangerTable',
    'ReactiveCapabilityCurve',
    'RegulatingControl',
    'RegulatingControlModeKind',
    'ShortCircuitRotorKind',
    'VoltagePerReactivePower',
    'SVCControlMode',
    'SynchronousMachineKind',
    'TapChanger',
    'TapChangerControl',
    'TapChangerTablePoint',
    'TransformerEnd',
    'LoadGroup',
    'LoadResponseCharacteristic',
    'NonConformLoadGroup',
    'MonthDay',
    'EquivalentNetwork',
    'ControlArea',
    'ControlAreaTypeKind',
    'ControlAreaGeneratingUnit',
    'TieFlow',
    'ACDCConverterDCTerminal',
    'DCConductingEquipment',
    'DCConverterUnit',
    'DCGround',
    'DCLineSegment',
    'DCSeriesDevice',
    'DCShunt',
    'DCSwitch',
    'VsCapabilityCurve',
    'GeneratingUnit',
    'HydroGeneratingUnit',
    'HydroPump',
    'NuclearGeneratingUnit',
    'SolarGeneratingUnit',
    'ThermalGeneratingUnit',
    'WindGeneratingUnit',
    'CurrentLimit',
    'PhaseTapChanger',
    'PhaseTapChangerLinear',
    'PhaseTapChangerNonLinear',
    'PhaseTapChangerSymmetrical',
    'PhaseTapChangerTablePoint',
    'PhaseTapChangerTabular',
    'PowerTransformerEnd',
    'RatioTapChanger',
    'RatioTapChangerTablePoint',
    'ConformLoadGroup',
    'ACDCConverter',
    'CsConverter',
    'DCBreaker',
    'DCBusbar',
    'DCChopper',
    'DCDisconnector',
    'VsConverter',
    'BusbarSection',
    'Conductor',
    'ExternalNetworkInjection',
    'PhaseTapChangerAsymmetrical',
    'PowerTransformer',
    'SeriesCompensator',
    'ShuntCompensator',
    'StaticVarCompensator',
    'Switch',
    'ConformLoad',
    'NonConformLoad',
    'EquivalentEquipment',
    'EquivalentInjection',
    'EquivalentShunt',
    'ACLineSegment',
    'Disconnector',
    'LinearShuntCompensator',
    'NonlinearShuntCompensator',
    'ProtectedSwitch',
    'EquivalentBranch',
    'Breaker',
    'LoadBreakSwitch',
]
