Coverage for src/distopf/pyomo_models/protocol.py: 100%

72 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-13 17:34 -0800

1from typing import Protocol, Dict, List 

2import pyomo.environ as pyo 

3 

4 

5class LindistModelProtocol(Protocol): 

6 """Protocol defining the structure of a Lindist Pyomo model for IDE support.""" 

7 

8 # ==================== SETS ==================== 

9 time_set: pyo.RangeSet 

10 bus_set: pyo.Set 

11 swing_bus_set: pyo.Set 

12 swing_phase_set: pyo.Set 

13 branch_set: pyo.Set 

14 phase_pair_set: pyo.Set 

15 bus_phase_set: pyo.Set 

16 branch_phase_set: pyo.Set 

17 gen_phase_set: pyo.Set 

18 cap_phase_set: pyo.Set 

19 reg_phase_set: pyo.Set 

20 bat_phase_set: pyo.Set 

21 bat_set: pyo.Set 

22 

23 # ==================== PARAMETERS ==================== 

24 # Model configuration parameters 

25 delta_t: pyo.Param 

26 start_step: pyo.Param 

27 n_steps: pyo.Param 

28 

29 # Resistance and reactance parameters 

30 r: pyo.Param # Resistance indexed by (branch, phase_pair) 

31 x: pyo.Param # Reactance indexed by (branch, phase_pair) 

32 

33 # Load parameters 

34 p_load_nom: pyo.Param # Nominal active power load at 1.0 p.u. voltage 

35 q_load_nom: pyo.Param # Nominal reactive power load at 1.0 p.u. voltage 

36 cvr_p: pyo.Param # CVR factor for active power loads 

37 cvr_q: pyo.Param # CVR factor for reactive power loads 

38 

39 # Generator parameters 

40 p_gen_nom: pyo.Param # Nominal active power generation 

41 q_gen_nom: pyo.Param # Nominal reactive power generation 

42 s_rated: pyo.Param # Maximum apparent power rating 

43 q_gen_max: pyo.Param # Maximum reactive power generation 

44 q_gen_min: pyo.Param # Minimum reactive power generation 

45 gen_control_type: pyo.Param # Generator control variable type 

46 

47 # Capacitor parameters 

48 q_cap_nom: pyo.Param # Nominal capacitor reactive power at 1.0 p.u. voltage 

49 

50 # Regulator parameters 

51 reg_ratio: pyo.Param # Voltage regulator turn ratio 

52 

53 # Voltage parameters 

54 v_swing: pyo.Param # Swing bus voltage magnitude squared 

55 v_min: pyo.Param # Minimum voltage magnitude squared 

56 v_max: pyo.Param # Maximum voltage magnitude squared 

57 

58 # Battery parameters 

59 p_bat_nom: pyo.Param # Nominal active power discharge from battery 

60 q_bat_nom: pyo.Param # Nominal reactive power discharge from battery 

61 s_bat_rated: pyo.Param # Maximum apparent power rating for battery 

62 q_bat_max: pyo.Param # Maximum reactive power generation for battery 

63 q_bat_min: pyo.Param # Minimum reactive power generation for battery 

64 bat_control_type: pyo.Param # Battery control variable type 

65 energy_capacity: pyo.Param # Battery energy capacity in units power-base * Wh 

66 soc_min: pyo.Param # Battery soc minimum as a fraction of energy capacity 

67 soc_max: pyo.Param # Battery soc maximum as a fraction of energy capacity 

68 start_soc: pyo.Param # Battery starting soc as a fraction of energy capacity 

69 charge_efficiency: pyo.Param # Battery charging efficiency 

70 discharge_efficiency: pyo.Param # Battery discharging efficiency 

71 annual_cycle_limit: pyo.Param # Limit to number of discharge cycles per year 

72 battery_has_a_phase: pyo.Param # Whether battery has phase A 

73 battery_has_b_phase: pyo.Param # Whether battery has phase B 

74 battery_has_c_phase: pyo.Param # Whether battery has phase C 

75 battery_has_phase: pyo.Param # Whether battery has specific phase 

76 battery_n_phases: pyo.Param # Number of phases connected to battery 

77 

78 # ==================== VARIABLES ==================== 

79 # Voltage variables 

80 v2: pyo.Var # Voltage magnitude squared 

81 v2_reg: pyo.Var # Regulator voltage magnitude squared 

82 

83 # Power flow variables 

84 p_flow: pyo.Var # Active power flow 

85 q_flow: pyo.Var # Reactive power flow 

86 

87 # Generator variables 

88 p_gen: pyo.Var # Active power generation 

89 q_gen: pyo.Var # Reactive power generation 

90 

91 # Load variables 

92 p_load: pyo.Var # Active power load 

93 q_load: pyo.Var # Reactive power load 

94 

95 # Capacitor variables 

96 q_cap: pyo.Var # Capacitor reactive power 

97 

98 # Battery variables 

99 p_charge: pyo.Var # Battery charging power 

100 p_discharge: pyo.Var # Battery discharging power 

101 p_bat: pyo.Var # Net battery active power 

102 q_bat: pyo.Var # Battery reactive power 

103 soc: pyo.Var # State of charge 

104 

105 # ==================== MAPPINGS & UTILITIES ==================== 

106 from_bus_map: Dict[int, int] # Mapping from to_bus to from_bus 

107 to_bus_map: Dict[int, List[int]] # Mapping from bus to list of downstream buses 

108 name_map: Dict[int, str] # Mapping from bus ID to bus name 

109 

110 # ==================== PYOMO UTILITIES ==================== 

111 dual: pyo.Suffix # Dual variable suffix for sensitivity analysis 

112 

113 # ==================== METHODS ==================== 

114 # Standard Pyomo ConcreteModel methods that you might use 

115 def pprint(self, *args, **kwargs) -> None: ... 

116 def display(self, *args, **kwargs) -> None: ... 

117 def write(self, *args, **kwargs) -> None: ... 

118 def load(self, *args, **kwargs) -> None: ... 

119 def clone(self, *args, **kwargs) -> "LindistModelProtocol": ... 

120 

121 # Component access methods 

122 def component(self, name: str) -> pyo.Component: ... 

123 def component_objects(self, *args, **kwargs): ... 

124 def component_data_objects(self, *args, **kwargs): ... 

125 

126 # Constraint and objective methods (for when you add them) 

127 def add_component(self, name: str, val: pyo.Component) -> None: ... 

128 def del_component(self, name: str) -> None: ... 

129 

130 # Standard Python dict-like access 

131 def __setattr__(self, name: str, val) -> None: ... 

132 def __getattr__(self, name: str): ... 

133 def __contains__(self, name: str) -> bool: ...