from typing import Tuple, Set, Iterable, List


class WiringType:
    Arc = 0
    Chamfer = 1


class PowerFactorStateType:
    Leading = 0
    Lagging = 1


class CircuitType:
    Circuit = 0
    Spare = 1
    Space = 2


class LoadClassification:
    Undefined = 0
    Power = 1
    Lighting = 2
    Hvac = 3


class CircuitConnectionType:
    NotApplicable = 0
    Breaker = 1
    FeedThruLugs = 2


class CircuitNumberingOption:
    Default = 0
    Continuous = 1


class CircuitNaming:
    Prefixed = 0
    Standard = 1
    PanelName = 2
    Phase = 3
    ProjectSetting = 4
    Customized = 5
    Undefined = -1


class ElectricalSystemType:
    UndefinedSystemType = 0
    Data = 5
    PowerCircuit = 6
    Telephone = 9
    Security = 10
    FireAlarm = 11
    NurseCall = 12
    Controls = 13
    Communication = 14
    PowerBalanced = 30
    PowerUnBalanced = 31


class ElectricalPhase:
    SinglePhase = 0
    ThreePhase = 1


class ElectricalPhaseConfiguration:
    Undefined = 0
    Wye = 1
    Delta = 2


class LoadClassificationType:
    Other = 0
    Power = 1
    Lighting = 2
    HVAC = 3


class ElectricalSystemSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> ElectricalSystemSetIterator: ...
    def ReverseIterator(self) -> ElectricalSystemSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: ElectricalSystem) -> bool: ...
    def Insert(self, item: ElectricalSystem) -> bool: ...
    def Erase(self, item: ElectricalSystem) -> int: ...


class ElectricalSystemSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class ElectricalSystem(MEPSystem):
    def AddToCircuit(self, components: ElementSet) -> bool: ...
    def RemoveFromCircuit(self, components: ElementSet) -> None: ...
    def NewWires(self, view: View, wiringType: WiringType) -> WireSet: ...
    @property
    def CircuitNumber(self) -> str: ...
    @property
    def CircuitNamingIndex(self) -> int: ...
    @property
    def StartSlot(self) -> int: ...
    @property
    def SlotIndex(self) -> str: ...
    @property
    def WireType(self) -> WireType: ...
    @WireType.setter
    def WireType(self, wireType: WireType) -> None: ...
    @property
    def LoadName(self) -> str: ...
    @LoadName.setter
    def LoadName(self, strValue: str) -> None: ...
    @property
    def WireSizeString(self) -> str: ...
    @property
    def Voltage(self) -> float: ...
    @property
    def ApparentLoad(self) -> float: ...
    @property
    def ApparentLoadPhaseA(self) -> float: ...
    @property
    def ApparentLoadPhaseB(self) -> float: ...
    @property
    def ApparentLoadPhaseC(self) -> float: ...
    @property
    def PowerFactor(self) -> float: ...
    @property
    def TrueLoad(self) -> float: ...
    @TrueLoad.setter
    def TrueLoad(self, trueLoad: float) -> None: ...
    @property
    def TrueLoadPhaseA(self) -> float: ...
    @property
    def TrueLoadPhaseB(self) -> float: ...
    @property
    def TrueLoadPhaseC(self) -> float: ...
    @property
    def Rating(self) -> float: ...
    @Rating.setter
    def Rating(self, rating: float) -> None: ...
    @property
    def PathOffset(self) -> float: ...
    @PathOffset.setter
    def PathOffset(self, pathOffset: float) -> None: ...
    @property
    def HasPathOffset(self) -> bool: ...
    @property
    def Frame(self) -> float: ...
    @Frame.setter
    def Frame(self, frame: float) -> None: ...
    @property
    def Length(self) -> float: ...
    @property
    def ApparentCurrent(self) -> float: ...
    @property
    def ApparentCurrentPhaseA(self) -> float: ...
    @property
    def ApparentCurrentPhaseB(self) -> float: ...
    @property
    def ApparentCurrentPhaseC(self) -> float: ...
    @property
    def TrueCurrent(self) -> float: ...
    @property
    def TrueCurrentPhaseA(self) -> float: ...
    @property
    def TrueCurrentPhaseB(self) -> float: ...
    @property
    def TrueCurrentPhaseC(self) -> float: ...
    @property
    def VoltageDrop(self) -> float: ...
    @property
    def SystemType(self) -> ElectricalSystemType: ...
    @property
    def PowerFactorState(self) -> PowerFactorStateType: ...
    @property
    def LoadClassifications(self) -> str: ...
    @property
    def LoadClassificationAbbreviations(self) -> str: ...
    @property
    def PhaseLabel(self) -> str: ...
    @property
    def Ways(self) -> int: ...
    @property
    def PolesNumber(self) -> int: ...
    @property
    def BalancedLoad(self) -> bool: ...
    @property
    def RunsNumber(self) -> int: ...
    @property
    def HotConductorsNumber(self) -> int: ...
    @property
    def NeutralConductorsNumber(self) -> int: ...
    @NeutralConductorsNumber.setter
    def NeutralConductorsNumber(self, numNeutrals: int) -> None: ...
    @property
    def GroundConductorsNumber(self) -> int: ...
    @property
    def CircuitType(self) -> CircuitType: ...
    @property
    def PanelName(self) -> str: ...
    @property
    def IsBasePanelFeedThroughLugsOccupied(self) -> bool: ...
    @property
    def HasCustomCircuitPath(self) -> bool: ...
    @property
    def CircuitPathMode(self) -> ElectricalCircuitPathMode: ...
    @CircuitPathMode.setter
    def CircuitPathMode(self, circuitPathMode: ElectricalCircuitPathMode) -> None: ...
    @property
    def CircuitConnectionType(self) -> CircuitConnectionType: ...
    @CircuitConnectionType.setter
    def CircuitConnectionType(self, circuitConnectionType: CircuitConnectionType) -> None: ...
    @overload
    def Create(connector: Connector, elecSysType: ElectricalSystemType) -> ElectricalSystem: ...
    @overload
    def Create(document: Document, electComponents: List[ElementId], elecSysType: ElectricalSystemType) -> ElectricalSystem: ...
    def SelectPanel(self, panel: FamilyInstance) -> None: ...
    def DisconnectPanel(self) -> None: ...
    def GetCircuitPath(self) -> List[XYZ]: ...
    def SetCircuitPath(self, nodes: List[XYZ]) -> None: ...
    def IsCircuitPathValid(self, nodes: List[XYZ]) -> bool: ...


class ElectricalCircuitPathMode:
    Custom = 0
    FarthestDevice = 1
    AllDevices = 2


class Wire(MEPCurve):
    @property
    def WiringType(self) -> WiringType: ...
    @WiringType.setter
    def WiringType(self, wiringType: WiringType) -> None: ...
    @property
    def HotConductorNum(self) -> int: ...
    @HotConductorNum.setter
    def HotConductorNum(self, hotConductorNum: int) -> None: ...
    @property
    def NeutralConductorNum(self) -> int: ...
    @NeutralConductorNum.setter
    def NeutralConductorNum(self, neutralConductorNum: int) -> None: ...
    @property
    def GroundConductorNum(self) -> int: ...
    @GroundConductorNum.setter
    def GroundConductorNum(self, groundConductorNum: int) -> None: ...
    @property
    def NumberOfVertices(self) -> int: ...
    def Create(document: Document, wireTypeId: ElementId, viewId: ElementId, wiringType: WiringType, vertexPoints: List[XYZ], startConnectorTo: Connector, endConnectorTo: Connector) -> Wire: ...
    def ConnectTo(self, startConnectorTo: Connector, endConnectorTo: Connector) -> None: ...
    def AreVertexPointsValid(vertexPoints: List[XYZ], startConnector: Connector, endConnector: Connector) -> bool: ...
    def AppendVertex(self, vertexPoint: XYZ) -> None: ...
    def InsertVertex(self, index: int, vertexPoint: XYZ) -> None: ...
    def RemoveVertex(self, index: int) -> None: ...
    def SetVertex(self, index: int, vertexPoint: XYZ) -> None: ...
    def GetVertex(self, index: int) -> XYZ: ...
    def IsVertexPointValid(self, vertexPoint: XYZ) -> bool: ...
    def GetMEPSystems(self) -> List[ElementId]: ...


class WireSize(APIObject):
    @property
    def Ampacity(self) -> Int64: ...
    @property
    def Size(self) -> str: ...
    @property
    def Diameter(self) -> float: ...
    @property
    def InUse(self) -> bool: ...
    @InUse.setter
    def InUse(self, A_0: bool) -> None: ...


class CorrectionFactor(APIObject):
    @property
    def Temperature(self) -> Int64: ...
    @property
    def Factor(self) -> float: ...


class GroundConductorSize(APIObject):
    @property
    def MaterialBelongTo(self) -> WireMaterialType: ...
    @property
    def Ampacity(self) -> Int64: ...
    @property
    def ConductorSize(self) -> str: ...


class InsulationType(ElementType):
    @Name.setter
    def Name(self, A_0: str) -> None: ...
    @property
    def IsInUse(self) -> bool: ...


class TemperatureRatingType(ElementType):
    @Name.setter
    def Name(self, A_0: str) -> None: ...
    @property
    def MaterialType(self) -> WireMaterialType: ...
    @property
    def InsulationTypes(self) -> InsulationTypeSet: ...
    @property
    def WireSizes(self) -> WireSizeSet: ...
    @property
    def CorrectionFactors(self) -> CorrectionFactorSet: ...
    @property
    def IsInUse(self) -> bool: ...
    def AddInsulationType(self, name: str) -> InsulationType: ...
    def RemoveInsulationType(self, insulationType: InsulationType) -> None: ...
    def AddWireSize(self, size: str, ampacity: Int64, diameter: float) -> WireSize: ...
    def RemoveWireSize(self, wireSize: WireSize) -> None: ...
    def AddCorrectionFactor(self, temperature: Int64, factor: float) -> CorrectionFactor: ...
    def RemoveCorrectionFactor(self, correctionFactor: CorrectionFactor) -> None: ...


class WireMaterialType(ElementType):
    @Name.setter
    def Name(self, A_0: str) -> None: ...
    @property
    def TemperatureRatings(self) -> TemperatureRatingTypeSet: ...
    @property
    def GroundConductorSizes(self) -> GroundConductorSizeSet: ...
    @property
    def IsInUse(self) -> bool: ...
    def AddTemperatureRatingType(self, name: str, baseOn: TemperatureRatingType) -> TemperatureRatingType: ...
    def RemoveTemperatureRatingType(self, temperatureRating: TemperatureRatingType) -> None: ...
    def AddGroundConductorSize(self, ampacity: Int64, size: str) -> GroundConductorSize: ...
    def RemoveGroundConductorSize(self, grdConductorSize: GroundConductorSize) -> None: ...


class WireConduitType(APIObject):
    @property
    def Name(self) -> str: ...


class WireType(ElementType):
    @property
    def WireMaterial(self) -> WireMaterialType: ...
    @WireMaterial.setter
    def WireMaterial(self, A_0: WireMaterialType) -> None: ...
    @property
    def TemperatureRating(self) -> TemperatureRatingType: ...
    @TemperatureRating.setter
    def TemperatureRating(self, A_0: TemperatureRatingType) -> None: ...
    @property
    def Insulation(self) -> InsulationType: ...
    @Insulation.setter
    def Insulation(self, A_0: InsulationType) -> None: ...
    @property
    def MaxSize(self) -> WireSize: ...
    @MaxSize.setter
    def MaxSize(self, A_0: WireSize) -> None: ...
    @property
    def NeutralMultiplier(self) -> float: ...
    @NeutralMultiplier.setter
    def NeutralMultiplier(self, A_0: float) -> None: ...
    @property
    def NeutralRequired(self) -> bool: ...
    @NeutralRequired.setter
    def NeutralRequired(self, A_0: bool) -> None: ...
    @property
    def NeutralSize(self) -> NeutralMode: ...
    @NeutralSize.setter
    def NeutralSize(self, A_0: NeutralMode) -> None: ...
    @property
    def Conduit(self) -> WireConduitType: ...
    @Conduit.setter
    def Conduit(self, A_0: WireConduitType) -> None: ...
    @property
    def IsInUse(self) -> bool: ...


class ElectricalSetting(Element):
    @property
    def VoltageTypes(self) -> VoltageTypeSet: ...
    @property
    def WireTypes(self) -> WireTypeSet: ...
    @property
    def DistributionSysTypes(self) -> DistributionSysTypeSet: ...
    @property
    def WireMaterialTypes(self) -> WireMaterialTypeSet: ...
    @property
    def WireConduitTypes(self) -> WireConduitTypeSet: ...
    def AddVoltageType(self, name: str, actualValue: float, minValue: float, maxValue: float) -> VoltageType: ...
    def RemoveVoltageType(self, voltageType: VoltageType) -> None: ...
    def AddDistributionSysType(self, name: str, phase: ElectricalPhase, phaseConfig: ElectricalPhaseConfiguration, numWire: int, volLineToLine: VoltageType, volLineToGround: VoltageType) -> DistributionSysType: ...
    def RemoveDistributionSysType(self, distributionSysType: DistributionSysType) -> None: ...
    def AddWireMaterialType(self, name: str, baseMaterial: WireMaterialType) -> WireMaterialType: ...
    def RemoveWireMaterialType(self, materialType: WireMaterialType) -> None: ...
    def AddWireType(self, name: str, materialType: WireMaterialType, temperatureRating: TemperatureRatingType, insulation: InsulationType, maxSize: WireSize, neutralMultiplier: float, neutralRequired: bool, neutralMode: NeutralMode, conduit: WireConduitType) -> WireType: ...
    def RemoveWireType(self, wireType: WireType) -> None: ...
    @property
    def CircuitNamePhaseA(self) -> str: ...
    @CircuitNamePhaseA.setter
    def CircuitNamePhaseA(self, circuitNamePhaseA: str) -> None: ...
    @property
    def CircuitNamePhaseB(self) -> str: ...
    @CircuitNamePhaseB.setter
    def CircuitNamePhaseB(self, circuitNamePhaseB: str) -> None: ...
    @property
    def CircuitNamePhaseC(self) -> str: ...
    @CircuitNamePhaseC.setter
    def CircuitNamePhaseC(self, circuitNamePhaseC: str) -> None: ...
    @property
    def CircuitRating(self) -> float: ...
    @CircuitRating.setter
    def CircuitRating(self, circuitRating: float) -> None: ...
    @property
    def CircuitPathOffset(self) -> float: ...
    @CircuitPathOffset.setter
    def CircuitPathOffset(self, circuitPathOffset: float) -> None: ...
    @property
    def CircuitLoadCalculationMethod(self) -> CircuitLoadCalculationMethod: ...
    @CircuitLoadCalculationMethod.setter
    def CircuitLoadCalculationMethod(self, circuitLoadCalculationMethod: CircuitLoadCalculationMethod) -> None: ...
    @property
    def CircuitSequence(self) -> CircuitSequence: ...
    @CircuitSequence.setter
    def CircuitSequence(self, circuitSequence: CircuitSequence) -> None: ...
    def GetElectricalSettings(document: Document) -> ElectricalSetting: ...
    def GetCircuitNamingSchemeSettings(cda: Document) -> CircuitNamingSchemeSettings: ...
    def GetSpecificFittingAngles(self) -> List[float]: ...
    def SetSpecificFittingAngleStatus(self, angle: float, bStatus: bool) -> None: ...
    def GetSpecificFittingAngleStatus(self, angle: float) -> bool: ...
    def IsValidSpecificFittingAngle(self, angle: float) -> bool: ...


class NeutralMode:
    HotConductorSize = 0
    UnbalancedCurrent = 1


class CapitalizationForLoadNames:
    SourceParameters = 0
    Initial = 1
    Sentence = 2
    Upper = 3


class CircuitSequence:
    Numerical = 0
    GroupByPhase = 1
    OddThenEven = 2


class CircuitLoadCalculationMethod:
    SumTrueLoadAndReactiveLoad = 0
    SumApparentLoad = 1


class ElectricalEquipment(MEPModel):
    @property
    def DistributionSystem(self) -> DistributionSysType: ...
    @DistributionSystem.setter
    def DistributionSystem(self, distributionSystem: DistributionSysType) -> None: ...
    @property
    def CircuitNamingSchemeId(self) -> ElementId: ...
    @CircuitNamingSchemeId.setter
    def CircuitNamingSchemeId(self, idCircuitNamingScheme: ElementId) -> None: ...
    @property
    def MaxNumberOfCircuits(self) -> int: ...
    @MaxNumberOfCircuits.setter
    def MaxNumberOfCircuits(self, nMaxNumberOfCircuits: int) -> None: ...
    @property
    def IsSwitchboard(self) -> bool: ...
    def IsValidDistributionSystem(self, distributionSystem: DistributionSysType) -> bool: ...
    def IsValidCircuitNamingSchemeId(aDocument: Document, circuitNamingSchemeId: ElementId) -> bool: ...
    def GetCircuitNamingSchemeType(self) -> CircuitNaming: ...
    def SetCircuitNamingSchemeType(self, circuitNamingType: CircuitNaming) -> None: ...


class LightingDevice(MEPModel):


class LightingFixture(MEPModel):


class VoltageType(ElementType):
    @property
    def ActualValue(self) -> float: ...
    @property
    def MaxValue(self) -> float: ...
    @property
    def MinValue(self) -> float: ...
    @property
    def IsInUse(self) -> bool: ...
    def SetVoltageValue(self, actualValue: float, minValue: float, maxValue: float) -> None: ...


class DistributionSysType(ElementType):
    @property
    def ElectricalPhaseConfiguration(self) -> ElectricalPhaseConfiguration: ...
    @ElectricalPhaseConfiguration.setter
    def ElectricalPhaseConfiguration(self, A_0: ElectricalPhaseConfiguration) -> None: ...
    @property
    def ElectricalPhase(self) -> ElectricalPhase: ...
    @ElectricalPhase.setter
    def ElectricalPhase(self, A_0: ElectricalPhase) -> None: ...
    @property
    def NumWires(self) -> int: ...
    @NumWires.setter
    def NumWires(self, A_0: int) -> None: ...
    @property
    def VoltageLineToLine(self) -> VoltageType: ...
    @VoltageLineToLine.setter
    def VoltageLineToLine(self, A_0: VoltageType) -> None: ...
    @property
    def VoltageLineToGround(self) -> VoltageType: ...
    @VoltageLineToGround.setter
    def VoltageLineToGround(self, A_0: VoltageType) -> None: ...
    @property
    def IsInUse(self) -> bool: ...


class DistributionSysTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> DistributionSysTypeSetIterator: ...
    def ReverseIterator(self) -> DistributionSysTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: DistributionSysType) -> bool: ...
    def Insert(self, item: DistributionSysType) -> bool: ...
    def Erase(self, item: DistributionSysType) -> int: ...


class DistributionSysTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class VoltageTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> VoltageTypeSetIterator: ...
    def ReverseIterator(self) -> VoltageTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: VoltageType) -> bool: ...
    def Insert(self, item: VoltageType) -> bool: ...
    def Erase(self, item: VoltageType) -> int: ...


class VoltageTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class WireSizeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> WireSizeSetIterator: ...
    def ReverseIterator(self) -> WireSizeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: WireSize) -> bool: ...
    def Insert(self, item: WireSize) -> bool: ...
    def Erase(self, item: WireSize) -> int: ...


class WireSizeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class GroundConductorSizeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> GroundConductorSizeSetIterator: ...
    def ReverseIterator(self) -> GroundConductorSizeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: GroundConductorSize) -> bool: ...
    def Insert(self, item: GroundConductorSize) -> bool: ...
    def Erase(self, item: GroundConductorSize) -> int: ...


class GroundConductorSizeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class CorrectionFactorSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> CorrectionFactorSetIterator: ...
    def ReverseIterator(self) -> CorrectionFactorSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: CorrectionFactor) -> bool: ...
    def Insert(self, item: CorrectionFactor) -> bool: ...
    def Erase(self, item: CorrectionFactor) -> int: ...


class CorrectionFactorSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class WireConduitTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> WireConduitTypeSetIterator: ...
    def ReverseIterator(self) -> WireConduitTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: WireConduitType) -> bool: ...
    def Insert(self, item: WireConduitType) -> bool: ...
    def Erase(self, item: WireConduitType) -> int: ...


class WireConduitTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class WireMaterialTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> WireMaterialTypeSetIterator: ...
    def ReverseIterator(self) -> WireMaterialTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: WireMaterialType) -> bool: ...
    def Insert(self, item: WireMaterialType) -> bool: ...
    def Erase(self, item: WireMaterialType) -> int: ...


class WireMaterialTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class TemperatureRatingTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> TemperatureRatingTypeSetIterator: ...
    def ReverseIterator(self) -> TemperatureRatingTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: TemperatureRatingType) -> bool: ...
    def Insert(self, item: TemperatureRatingType) -> bool: ...
    def Erase(self, item: TemperatureRatingType) -> int: ...


class TemperatureRatingTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class InsulationTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> InsulationTypeSetIterator: ...
    def ReverseIterator(self) -> InsulationTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: InsulationType) -> bool: ...
    def Insert(self, item: InsulationType) -> bool: ...
    def Erase(self, item: InsulationType) -> int: ...


class InsulationTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class WireTypeSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> WireTypeSetIterator: ...
    def ReverseIterator(self) -> WireTypeSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: WireType) -> bool: ...
    def Insert(self, item: WireType) -> bool: ...
    def Erase(self, item: WireType) -> int: ...


class WireTypeSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class WireSet(APIObject):
    def __init__(self): ...
    def Clear(self) -> None: ...
    @property
    def Size(self) -> int: ...
    @property
    def IsEmpty(self) -> bool: ...
    def ForwardIterator(self) -> WireSetIterator: ...
    def ReverseIterator(self) -> WireSetIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Contains(self, item: Wire) -> bool: ...
    def Insert(self, item: Wire) -> bool: ...
    def Erase(self, item: Wire) -> int: ...


class WireSetIterator(APIObject):
    def __init__(self): ...
    @property
    def Current(self) -> Object: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...


class PanelSchedulePhaseLoadType:
    NoLoadInformation = 0
    LoadsByPhaseInSplitColumns = 1
    MirroredPhaseColumns = 2
    LoadsByPhaseInSharedColumns = 3
    LoadsByPhase = 4
    TotalLoadOnlyPerCircuit = 5
    SeperatePhaseLoadsPerCircuit = 6


class CableTrayConduitBase(MEPCurve):
    @property
    def RunId(self) -> ElementId: ...
    def IsWithFitting(self) -> bool: ...
    def IsValidLevelId(document: Document, levelId: ElementId) -> bool: ...
    def IsValidEndPoints(startPoint: XYZ, endPoint: XYZ) -> bool: ...


class CableTray(CableTrayConduitBase):
    @property
    def RungSpace(self) -> float: ...
    @RungSpace.setter
    def RungSpace(self, rungSpace: float) -> None: ...
    @property
    def CurveNormal(self) -> XYZ: ...
    @CurveNormal.setter
    def CurveNormal(self, normal: XYZ) -> None: ...
    def Create(document: Document, cabletrayType: ElementId, startPoint: XYZ, endPoint: XYZ, levelId: ElementId) -> CableTray: ...
    def IsValidCableTrayType(document: Document, cabletrayType: ElementId) -> bool: ...
    def GetShapeType(self) -> CableTrayShape: ...
    def IsValidRungSpace(self, rungSpace: float) -> bool: ...


class CableTrayConduitRunBase(Element):
    @property
    def Length(self) -> float: ...


class CableTrayRun(CableTrayConduitRunBase):


class CableTraySettings(Element):
    @property
    def SizeSeparator(self) -> str: ...
    @SizeSeparator.setter
    def SizeSeparator(self, sizeSeparator: str) -> None: ...
    @property
    def SizeSuffix(self) -> str: ...
    @SizeSuffix.setter
    def SizeSuffix(self, sizeSuffix: str) -> None: ...
    @property
    def ConnectorSeparator(self) -> str: ...
    @ConnectorSeparator.setter
    def ConnectorSeparator(self, connectorSeparator: str) -> None: ...
    @property
    def FittingAnnotationSize(self) -> float: ...
    @FittingAnnotationSize.setter
    def FittingAnnotationSize(self, fittingAnnotationSize: float) -> None: ...
    @property
    def RiseDropAnnotationSize(self) -> float: ...
    @RiseDropAnnotationSize.setter
    def RiseDropAnnotationSize(self, riseDropAnnotationSize: float) -> None: ...
    @property
    def UseAnnotationScaleForSingleLineFittings(self) -> bool: ...
    @UseAnnotationScaleForSingleLineFittings.setter
    def UseAnnotationScaleForSingleLineFittings(self, useAnnotationScaleForSingleLineFittings: bool) -> None: ...
    def GetCableTraySettings(document: Document) -> CableTraySettings: ...


class CableTraySizeIterator:
    @property
    def IsValidObject(self) -> bool: ...
    def MoveNext(self) -> bool: ...
    def IsDone(self) -> bool: ...
    def Reset(self) -> None: ...
    def GetCurrent(self) -> MEPSize: ...
    def HasCurrent(self) -> bool: ...
    @property
    def Current(self) -> MEPSize: ...
    def Dispose(self) -> None: ...


class CableTraySizes(Element):
    def GetSizeCount(self) -> int: ...
    def Contains(self, nominalDiameter: float) -> bool: ...
    def GetCableTraySizes(aDoc: Document) -> CableTraySizes: ...
    def AddSize(self, sizeInfo: MEPSize) -> None: ...
    def RemoveSize(self, sizeInfo: MEPSize) -> None: ...
    def ClearAll(self) -> None: ...
    def GetCableTraySizesIterator(self) -> CableTraySizeIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...


class CableTrayType(MEPCurveType):
    @property
    def BendMultiplier(self) -> float: ...
    @BendMultiplier.setter
    def BendMultiplier(self, bendMultiplier: float) -> None: ...
    @property
    def ShapeType(self) -> CableTrayShape: ...
    @property
    def IsWithFitting(self) -> bool: ...
    def IsValidBendMultiplier(self, bendMultiplier: float) -> bool: ...


class CircuitNamingScheme(Element):
    def Create(document: Document, name: str, data: List[TableCellCombinedParameterData]) -> CircuitNamingScheme: ...
    def IsValidCombinedParameters(aDocument: Document, data: List[TableCellCombinedParameterData]) -> bool: ...
    def IsNameUnique(aDocument: Document, name: str) -> bool: ...
    def GetCombinedParameters(self) -> List[TableCellCombinedParameterData]: ...
    def SetCombinedParameters(self, data: List[TableCellCombinedParameterData]) -> None: ...


class CircuitNamingSchemeSettings(Element):
    @property
    def CircuitNamingSchemeId(self) -> ElementId: ...
    @CircuitNamingSchemeId.setter
    def CircuitNamingSchemeId(self, circuitNamingSchemeId: ElementId) -> None: ...
    def GetCircuitNamingSchemeSettings(cda: Document) -> CircuitNamingSchemeSettings: ...
    def IsValidCircuitNamingSchemeId(aDocument: Document, circuitNamingSchemeId: ElementId) -> bool: ...


class Conduit(CableTrayConduitBase):
    def Create(document: Document, conduitType: ElementId, startPoint: XYZ, endPoint: XYZ, levelId: ElementId) -> Conduit: ...
    def IsValidConduitType(document: Document, conduitType: ElementId) -> bool: ...


class ConduitRun(CableTrayConduitRunBase):


class ConduitSettings(Element):
    @property
    def SizeSuffix(self) -> str: ...
    @SizeSuffix.setter
    def SizeSuffix(self, sizeSuffix: str) -> None: ...
    @property
    def SizePrefix(self) -> str: ...
    @SizePrefix.setter
    def SizePrefix(self, sizePrefix: str) -> None: ...
    @property
    def ConnectorSeparator(self) -> str: ...
    @ConnectorSeparator.setter
    def ConnectorSeparator(self, connectorSeparator: str) -> None: ...
    @property
    def FittingAnnotationSize(self) -> float: ...
    @FittingAnnotationSize.setter
    def FittingAnnotationSize(self, fittingAnnotationSize: float) -> None: ...
    @property
    def RiseDropAnnotationSize(self) -> float: ...
    @RiseDropAnnotationSize.setter
    def RiseDropAnnotationSize(self, riseDropAnnotationSize: float) -> None: ...
    @property
    def UseAnnotationScaleForSingleLineFittings(self) -> bool: ...
    @UseAnnotationScaleForSingleLineFittings.setter
    def UseAnnotationScaleForSingleLineFittings(self, useAnnotationScaleForSingleLineFittings: bool) -> None: ...
    def GetConduitSettings(document: Document) -> ConduitSettings: ...


class ConduitSize:
    def __init__(self, nominalDiameter: float, innerDiameter: float, outerDiameter: float, bendRadius: float, usedInSizeLists: bool, usedInSizing: bool): ...
    @property
    def NominalDiameter(self) -> float: ...
    @property
    def InnerDiameter(self) -> float: ...
    @property
    def OuterDiameter(self) -> float: ...
    @property
    def BendRadius(self) -> float: ...
    @property
    def UsedInSizeLists(self) -> bool: ...
    @property
    def UsedInSizing(self) -> bool: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class ConduitSizeIterator:
    @property
    def IsValidObject(self) -> bool: ...
    def MoveNext(self) -> bool: ...
    def IsDone(self) -> bool: ...
    def Reset(self) -> None: ...
    def GetCurrent(self) -> ConduitSize: ...
    def HasCurrent(self) -> bool: ...
    @property
    def Current(self) -> ConduitSize: ...
    def Dispose(self) -> None: ...


class ConduitSizes:
    @property
    def Count(self) -> int: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Contains(self, nominalDiameter: float) -> bool: ...
    def GetConduitSizesIterator(self) -> ConduitSizeIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...
    def Dispose(self) -> None: ...


class ConduitSizeSettingIterator:
    @property
    def IsValidObject(self) -> bool: ...
    def MoveNext(self) -> bool: ...
    def IsDone(self) -> bool: ...
    def Reset(self) -> None: ...
    def HasCurrent(self) -> bool: ...
    @property
    def Current(self) -> KeyValuePair: ...
    def Dispose(self) -> None: ...


class ConduitSizeSettings(Element):
    def GetConduitSizeSettings(aDoc: Document) -> ConduitSizeSettings: ...
    def GetSizeCount(self, standardName: str) -> int: ...
    def AddSize(self, standardName: str, sizeInfo: ConduitSize) -> None: ...
    def RemoveSize(self, standardName: str, nominalDiameter: float) -> None: ...
    def CreateConduitStandardTypeFromExisingStandardType(self, pADoc: Document, newStandardName: str, existingStandardName: str) -> bool: ...
    def DoesConduitStandardTypeExist(self, standardName: str) -> bool: ...
    def RemoveConduitStandardType(self, pADoc: Document, standardName: str) -> bool: ...
    def GetConduitSizeSettingsIterator(self) -> ConduitSizeSettingIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...


class ConduitType(MEPCurveType):
    @property
    def IsWithFitting(self) -> bool: ...


class CableTrayShape:
    Invalid = 0
    Channel = 1
    Ladder = 2


class ElectricalDemandFactorDefinition(Element):
    def __init__(self): ...
    @property
    def AdditionalLoad(self) -> float: ...
    @AdditionalLoad.setter
    def AdditionalLoad(self, additionalLoad: float) -> None: ...
    @property
    def RuleType(self) -> ElectricalDemandFactorRule: ...
    @RuleType.setter
    def RuleType(self, ruleType: ElectricalDemandFactorRule) -> None: ...
    @property
    def IncludeAdditionalLoad(self) -> bool: ...
    @IncludeAdditionalLoad.setter
    def IncludeAdditionalLoad(self, includeAdditionalLoad: bool) -> None: ...
    def Create(ADoc: Document, strName: str) -> ElectricalDemandFactorDefinition: ...
    def ClearValues(self) -> None: ...
    def AddValue(self, dfValue: ElectricalDemandFactorValue) -> None: ...
    def RemoveValue(self, dfValue: ElectricalDemandFactorValue) -> None: ...
    def SetValues(self, values: ICollection) -> None: ...
    def GetValues(self) -> ICollection: ...
    def GetValuesCount(self) -> int: ...
    def GetApplicableDemandFactor(self, numberOrLoad: float) -> float: ...


class ElectricalDemandFactorValue:
    @overload
    def __init__(self, minRange: float, maxRange: float, factor: float): ...
    @overload
    def __init__(self): ...
    @property
    def Factor(self) -> float: ...
    @Factor.setter
    def Factor(self, factor: float) -> None: ...
    @property
    def MinRange(self) -> float: ...
    @MinRange.setter
    def MinRange(self, minRange: float) -> None: ...
    @property
    def MaxRange(self) -> float: ...
    @MaxRange.setter
    def MaxRange(self, maxRange: float) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def SetMaxRangeToUnlimited(self) -> None: ...
    def Dispose(self) -> None: ...


class ElectricalLoadClassification(Element):
    @property
    def DemandFactorId(self) -> ElementId: ...
    @DemandFactorId.setter
    def DemandFactorId(self, elemId: ElementId) -> None: ...
    @property
    def SpaceLoadClass(self) -> ElectricalLoadClassificationSpace: ...
    @SpaceLoadClass.setter
    def SpaceLoadClass(self, spaceLoadClass: ElectricalLoadClassificationSpace) -> None: ...
    @property
    def Motor(self) -> bool: ...
    @property
    def LoadSummaryDemandFactorLabel(self) -> str: ...
    @LoadSummaryDemandFactorLabel.setter
    def LoadSummaryDemandFactorLabel(self, loadSummaryDemandFactorLabel: str) -> None: ...
    @property
    def PanelConnectedLabel(self) -> str: ...
    @PanelConnectedLabel.setter
    def PanelConnectedLabel(self, panelConnectedLabel: str) -> None: ...
    @property
    def PanelEstimatedLabel(self) -> str: ...
    @PanelEstimatedLabel.setter
    def PanelEstimatedLabel(self, panelEstimatedLabel: str) -> None: ...
    @property
    def PanelConnectedCurrentLabel(self) -> str: ...
    @PanelConnectedCurrentLabel.setter
    def PanelConnectedCurrentLabel(self, panelConnectedCurrentLabel: str) -> None: ...
    @property
    def PanelEstimatedCurrentLabel(self) -> str: ...
    @PanelEstimatedCurrentLabel.setter
    def PanelEstimatedCurrentLabel(self, panelEstimatedCurrentLabel: str) -> None: ...
    @property
    def ActualElectricalLoadLabel(self) -> str: ...
    @ActualElectricalLoadLabel.setter
    def ActualElectricalLoadLabel(self, actualElectricalLoadLabel: str) -> None: ...
    @property
    def Abbreviation(self) -> str: ...
    @Abbreviation.setter
    def Abbreviation(self, abbreviation: str) -> None: ...
    def Create(ADoc: Document, strName: str) -> ElectricalLoadClassification: ...


class ElectricalDemandFactorRule:
    Constant = 0
    QuantityTable = 1
    LoadTable = 2
    QuantityTablePerPortion = 3
    LoadTablePerPortion = 4


class ElectricalLoadClassificationData:
    Name = 0
    SpaceLoadClass = 1
    DemandFactor = 2
    LoadSummaryDemandFactorLabel = 3
    PanelConnectedLabel = 4
    PanelEstimatedLabel = 5
    PanelConnectedCurrentLabel = 6
    PanelEstimatedCurrentLabel = 7
    ActualElecLoadNameLabel = 8
    Abbreviation = 9


class ElectricalLoadClassificationSpace:
    #None = 0
    Lighting = 1
    Power = 2


class PanelScheduleData(TableData):
    @property
    def BorderAroundSections(self) -> ElementId: ...
    @property
    def BorderAroundSchedule(self) -> ElementId: ...
    @property
    def ScheduleType(self) -> PanelScheduleType: ...
    @property
    def PanelConfiguration(self) -> PanelConfiguration: ...
    @property
    def PhaseLoadType(self) -> PanelSchedulePhaseLoadType: ...
    @property
    def NumberOfSlots(self) -> int: ...
    @property
    def IsHeaderSectionHidden(self) -> bool: ...
    @property
    def IsSummarySectionHidden(self) -> bool: ...
    @property
    def IsFooterSectionHidden(self) -> bool: ...
    @property
    def IsThirdPhaseHidden(self) -> bool: ...
    @IsThirdPhaseHidden.setter
    def IsThirdPhaseHidden(self, isThirdPhaseHidden: bool) -> None: ...
    @property
    def SummaryShowsOnlyConnectedLoads(self) -> bool: ...
    @SummaryShowsOnlyConnectedLoads.setter
    def SummaryShowsOnlyConnectedLoads(self, summaryShowsOnlyConnectedLoads: bool) -> None: ...
    @property
    def SummaryShowsGroups(self) -> bool: ...
    @SummaryShowsGroups.setter
    def SummaryShowsGroups(self, summaryShowsGroups: bool) -> None: ...
    @property
    def SummaryShowsVerticalHeaders(self) -> bool: ...
    @property
    def BodyShowsVerticalHeaders(self) -> bool: ...
    @property
    def IsPanelSinglePhase(self) -> bool: ...
    @IsPanelSinglePhase.setter
    def IsPanelSinglePhase(self, isPanelSinglePhase: bool) -> None: ...
    @property
    def ShowCircuitNumberOnOneRowForMultiphaseCircuits(self) -> bool: ...
    @ShowCircuitNumberOnOneRowForMultiphaseCircuits.setter
    def ShowCircuitNumberOnOneRowForMultiphaseCircuits(self, showCircuitNumberOnOneRowForMultiphaseCircuits: bool) -> None: ...
    @property
    def ShowMultipleRowsForMultiphaseCircuits(self) -> bool: ...
    @ShowMultipleRowsForMultiphaseCircuits.setter
    def ShowMultipleRowsForMultiphaseCircuits(self, showMultipleRowsForMultiphaseCircuits: bool) -> None: ...
    @property
    def ShowSlotFromDeviceInsteadOfTemplate(self) -> bool: ...
    @ShowSlotFromDeviceInsteadOfTemplate.setter
    def ShowSlotFromDeviceInsteadOfTemplate(self, showSlotFromDeviceInsteadOfTemplate: bool) -> None: ...
    @property
    def PhasesAsCurrents(self) -> bool: ...
    @property
    def IsUnusedPhaseHidden(self) -> bool: ...
    @IsUnusedPhaseHidden.setter
    def IsUnusedPhaseHidden(self, isUnusedPhaseHidden: bool) -> None: ...
    def IsSymmetric(self) -> bool: ...
    def UpdateIsSectionHidden(self, sectionType: SectionType, bHide: bool) -> None: ...
    def UpdateCircuitTableForInstance(self, pPanel: FamilyInstance) -> None: ...
    def UpdateCircuitTableForTemplate(self, newType: PanelSchedulePhaseLoadType, nNumSlots: int, bPhasesAsCurrents: bool) -> None: ...
    def UpdateLoadSummary(self) -> None: ...
    def UpdateVerticalHeadersInSection(self, sectionType: SectionType, bVertical: bool) -> None: ...
    def GetNumberOfCircuitRows(self) -> int: ...
    def GetLoadClassifications(self) -> List[ElementId]: ...
    def SetLoadClassifications(self, loadClassificaions: List[ElementId]) -> None: ...
    def RemoveLoadClassification(self, nIndex: int) -> None: ...
    def AddLoadClassification(self, loadClassficationId: ElementId) -> bool: ...
    def SetBorderAroundSections(self, borderId: ElementId) -> None: ...
    def SetBorderAroundSchedule(self, borderId: ElementId) -> None: ...


class PanelScheduleSheetInstance(Element):
    @property
    def Origin(self) -> XYZ: ...
    @Origin.setter
    def Origin(self, origin: XYZ) -> None: ...
    @property
    def ScheduleId(self) -> ElementId: ...
    @ScheduleId.setter
    def ScheduleId(self, scheduleId: ElementId) -> None: ...
    def Create(ADoc: Document, scheduleId: ElementId, DBView: View) -> PanelScheduleSheetInstance: ...
    def GetSchedule(self) -> PanelScheduleView: ...
    def SplitSegment(self, iSeg: int) -> bool: ...


class PanelScheduleView(TableView):
    @overload
    def CreateInstanceView(ADoc: Document, templateId: ElementId, panelId: ElementId) -> PanelScheduleView: ...
    @overload
    def CreateInstanceView(ADoc: Document, panelId: ElementId) -> PanelScheduleView: ...
    def GenerateInstanceFromTemplate(self, templateId: ElementId) -> None: ...
    def IsPanelScheduleTemplate(self) -> bool: ...
    def GetTableData(self) -> PanelScheduleData: ...
    def GetSectionData(self, sectionType: SectionType) -> TableSectionData: ...
    def GetTemplate(self) -> ElementId: ...
    def GetPanel(self) -> ElementId: ...
    def GetParamValue(self, sectionType: SectionType, nRow: int, nCol: int) -> str: ...
    def SetParamValue(self, sectionType: SectionType, nRow: int, nCol: int, sValue: str) -> bool: ...
    def GetLoadClassificationParamValue(self, parameterId: ElementId, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationName(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationDemandLoad(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationConnectedLoad(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationDemandCurrent(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationConnectedCurrent(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationDemandFactor(self, nRow: int, nCol: int) -> str: ...
    def GetLoadClassificationId(self, nRow: int) -> ElementId: ...
    def GetApparentPhaseValue(self, circuitId: ElementId, apparentLoadParam: ElementId) -> float: ...
    def GetCircuitByCell(self, nRow: int, nCol: int) -> ElectricalSystem: ...
    def GetCircuitIdByCell(self, nRow: int, nCol: int) -> ElementId: ...
    def GetSlotNumberByCell(self, nRow: int, nCol: int) -> int: ...
    def GetCellsBySlotNumber(self, nSlotNumber: int) -> Tuple[List[int], List[int]]: ...
    def SetSpareLoadValue(self, row: int, column: int, idLoadParameter: ElementId, value: float) -> None: ...
    def GetSpareLoadValue(self, row: int, column: int, idLoadParameter: ElementId) -> float: ...
    def SetSpareCurrentValue(self, row: int, column: int, idCurrentParameter: ElementId, value: float) -> None: ...
    def GetSpareCurrentValue(self, row: int, column: int, idCurrentParameter: ElementId) -> float: ...
    def IsCellInPhaseLoads(self, nRow: int, nCol: int) -> bool: ...
    def IsRowInCircuitTable(self, nRow: int) -> bool: ...
    def IsColumnInLoadSummary(self, nCol: int) -> bool: ...
    def GetCombinedParamValue(self, sectionType: SectionType, nRow: int, nCol: int) -> str: ...
    def IsSlotLocked(self, nRow: int, nCol: int) -> bool: ...
    def IsSlotGrouped(self, nRow: int, nCol: int) -> int: ...
    def IsSpare(self, nRow: int, nCol: int) -> bool: ...
    def IsSpace(self, nRow: int, nCol: int) -> bool: ...
    def AddSpace(self, nRow: int, nCol: int) -> None: ...
    def AddSpare(self, nRow: int, nCol: int) -> None: ...
    def RemoveSpace(self, nRow: int, nCol: int) -> None: ...
    def RemoveSpare(self, nRow: int, nCol: int) -> None: ...
    def CanMoveSlotTo(self, nMovingRow: int, nMovingCol: int, nToRow: int, nToCol: int) -> bool: ...
    def MoveSlotTo(self, nMovingRow: int, nMovingCol: int, nToRow: int, nToCol: int) -> None: ...
    def RenumberIndexes(self) -> None: ...
    def SwitchPhases(self, nRow: int, nCol: int) -> None: ...


class PanelScheduleTemplate(Element):
    @property
    def IsBranchPanelSchedule(self) -> bool: ...
    @property
    def IsDataPanelSchedule(self) -> bool: ...
    @property
    def IsSwitchboardSchedule(self) -> bool: ...
    @property
    def IsDefault(self) -> bool: ...
    def Create(document: Document, type: PanelScheduleType, config: PanelConfiguration, strName: str) -> PanelScheduleTemplate: ...
    def CopyFrom(self, OtherADoc: Document, otherElem: PanelScheduleTemplate) -> None: ...
    def GetPanelScheduleType(self) -> PanelScheduleType: ...
    def SetTableData(self, Data: PanelScheduleData) -> None: ...
    def GetTableData(self) -> PanelScheduleData: ...
    def GetSectionData(self, sectionType: SectionType) -> TableSectionData: ...
    @overload
    def IsValidType(panelScheduleType: PanelScheduleType) -> bool: ...
    def HasSameType(self, otherTemplate: PanelScheduleTemplate) -> bool: ...
    def IsValidPanelConfiguration(scheduleType: PanelScheduleType, configuration: PanelConfiguration) -> bool: ...


class PanelConfiguration:
    OneColumn = 0
    TwoColumnsCircuitsAcross = 1
    TwoColumnsCircuitsDown = 2


class PanelScheduleType:
    Branch = 0
    Switchboard = 1
    Data = 2
    Unknown = -1
