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 ConductingEquipment, EnergyConsumer
from .EquipmentBoundary import EquipmentContainer
from .EquipmentProfileCore import Curve, OperationalLimit, RegularIntervalSchedule, Switch

class Control(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Control')
    PowerSystemResource: Optional['PowerSystemResource'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.PowerSystemResource')
    controlType: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.controlType')
    operationInProgress: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.operationInProgress')
    timeStamp: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.timeStamp')
    unitMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.unitMultiplier')
    unitSymbol: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Control.unitSymbol')

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

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

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

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

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

class Measurement(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement')
    PowerSystemResource: Optional['PowerSystemResource'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.PowerSystemResource')
    Terminal: Optional['ACDCTerminal'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.Terminal')
    measurementType: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.measurementType')
    phases: Optional['PhaseCode'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.phases')
    unitMultiplier: Optional['UnitMultiplier'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.unitMultiplier')
    unitSymbol: Optional['UnitSymbol'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Measurement.unitSymbol')

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

class MeasurementValue(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#MeasurementValue')
    MeasurementValueQuality: Optional['MeasurementValueQuality'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#MeasurementValue.MeasurementValueQuality')
    MeasurementValueSource: Optional['MeasurementValueSource'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#MeasurementValue.MeasurementValueSource')
    sensorAccuracy: Optional[float] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#MeasurementValue.sensorAccuracy')
    timeStamp: Optional[str] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#MeasurementValue.timeStamp')

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

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

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

class Quality61850(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850')
    badReference: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.badReference')
    estimatorReplaced: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.estimatorReplaced')
    failure: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.failure')
    oldData: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.oldData')
    operatorBlocked: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.operatorBlocked')
    oscillatory: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.oscillatory')
    outOfRange: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.outOfRange')
    overFlow: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.overFlow')
    source: Optional['Source'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.source')
    suspect: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.suspect')
    test: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.test')
    validity: Optional['Validity'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Quality61850.validity')

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

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

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

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

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

class ValueAliasSet(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#ValueAliasSet')
    Commands: List['Command'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ValueAliasSet.Commands')
    Discretes: List['Discrete'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ValueAliasSet.Discretes')
    RaiseLowerCommands: List['RaiseLowerCommand'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ValueAliasSet.RaiseLowerCommands')
    Values: List['ValueToAlias'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#ValueAliasSet.Values')

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

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

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

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

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

class RegularTimePoint(CIMBase):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#RegularTimePoint')
    IntervalSchedule: Optional['RegularIntervalSchedule'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularTimePoint.IntervalSchedule')
    sequenceNumber: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularTimePoint.sequenceNumber')
    value1: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularTimePoint.value1')
    value2: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#RegularTimePoint.value2')

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

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

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

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

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

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

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

class Season(IdentifiedObject):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Season')
    SeasonDayTypeSchedules: List['SeasonDayTypeSchedule'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Season.SeasonDayTypeSchedules')
    endDate: Optional['MonthDay'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Season.endDate')
    startDate: Optional['MonthDay'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Season.startDate')

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

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

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

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

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

class Accumulator(Measurement):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Accumulator')
    AccumulatorValues: List['AccumulatorValue'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Accumulator.AccumulatorValues')
    LimitSets: List['AccumulatorLimitSet'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Accumulator.LimitSets')

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

class AccumulatorLimit(Limit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimit')
    LimitSet: Optional['AccumulatorLimitSet'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimit.LimitSet')
    value: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimit.value')

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

class AccumulatorLimitSet(LimitSet):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimitSet')
    Limits: List['AccumulatorLimit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimitSet.Limits')
    Measurements: List['Accumulator'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorLimitSet.Measurements')

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

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

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

class AccumulatorValue(MeasurementValue):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorValue')
    Accumulator: Optional['Accumulator'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorValue.Accumulator')
    AccumulatorReset: Optional['AccumulatorReset'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorValue.AccumulatorReset')
    value: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AccumulatorValue.value')

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

class Analog(Measurement):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Analog')
    AnalogValues: List['AnalogValue'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Analog.AnalogValues')
    LimitSets: List['AnalogLimitSet'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Analog.LimitSets')
    positiveFlowIn: Optional[bool] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Analog.positiveFlowIn')

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

class AnalogControl(Control):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogControl')
    AnalogValue: Optional['AnalogValue'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogControl.AnalogValue')
    maxValue: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogControl.maxValue')
    minValue: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogControl.minValue')

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

class AnalogLimit(Limit):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimit')
    LimitSet: Optional['AnalogLimitSet'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimit.LimitSet')
    value: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimit.value')

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

class AnalogLimitSet(LimitSet):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimitSet')
    Limits: List['AnalogLimit'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimitSet.Limits')
    Measurements: List['Analog'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogLimitSet.Measurements')

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

class AnalogValue(MeasurementValue):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogValue')
    Analog: Optional['Analog'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogValue.Analog')
    AnalogControl: Optional['AnalogControl'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogValue.AnalogControl')
    value: Optional['Simple_Float'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#AnalogValue.value')

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

class Command(Control):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Command')
    DiscreteValue: Optional['DiscreteValue'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Command.DiscreteValue')
    ValueAliasSet: Optional['ValueAliasSet'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Command.ValueAliasSet')
    normalValue: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Command.normalValue')
    value: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Command.value')

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

class Discrete(Measurement):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#Discrete')
    DiscreteValues: List['DiscreteValue'] = Field(default_factory=list, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Discrete.DiscreteValues')
    ValueAliasSet: Optional['ValueAliasSet'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#Discrete.ValueAliasSet')

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

class DiscreteValue(MeasurementValue):
    __cim_class__ = URIRef('http://iec.ch/TC57/2013/CIM-schema-cim16#DiscreteValue')
    Command: Optional['Command'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DiscreteValue.Command')
    Discrete: Optional['Discrete'] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DiscreteValue.Discrete')
    value: Optional[int] = Field(default=None, alias='http://iec.ch/TC57/2013/CIM-schema-cim16#DiscreteValue.value')

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

__all__ = [
    'Control',
    'Limit',
    'LimitSet',
    'Measurement',
    'MeasurementValue',
    'MeasurementValueSource',
    'Quality61850',
    'StringMeasurement',
    'StringMeasurementValue',
    'ValueAliasSet',
    'ValueToAlias',
    'Bay',
    'RegularTimePoint',
    'DayType',
    'EnergyArea',
    'LoadArea',
    'Season',
    'SeasonDayTypeSchedule',
    'SubLoadArea',
    'Accumulator',
    'AccumulatorLimit',
    'AccumulatorLimitSet',
    'AccumulatorReset',
    'AccumulatorValue',
    'Analog',
    'AnalogControl',
    'AnalogLimit',
    'AnalogLimitSet',
    'AnalogValue',
    'Command',
    'Discrete',
    'DiscreteValue',
    'MeasurementValueQuality',
    'RaiseLowerCommand',
    'SetPoint',
    'GrossToNetActivePowerCurve',
    'ActivePowerLimit',
    'ApparentPowerLimit',
    'RegulationSchedule',
    'SwitchSchedule',
    'TapSchedule',
    'ConformLoadSchedule',
    'NonConformLoadSchedule',
    'Ground',
    'StationSupply',
    'GroundDisconnector',
]
