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
« 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
5class LindistModelProtocol(Protocol):
6 """Protocol defining the structure of a Lindist Pyomo model for IDE support."""
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
23 # ==================== PARAMETERS ====================
24 # Model configuration parameters
25 delta_t: pyo.Param
26 start_step: pyo.Param
27 n_steps: pyo.Param
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)
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
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
47 # Capacitor parameters
48 q_cap_nom: pyo.Param # Nominal capacitor reactive power at 1.0 p.u. voltage
50 # Regulator parameters
51 reg_ratio: pyo.Param # Voltage regulator turn ratio
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
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
78 # ==================== VARIABLES ====================
79 # Voltage variables
80 v2: pyo.Var # Voltage magnitude squared
81 v2_reg: pyo.Var # Regulator voltage magnitude squared
83 # Power flow variables
84 p_flow: pyo.Var # Active power flow
85 q_flow: pyo.Var # Reactive power flow
87 # Generator variables
88 p_gen: pyo.Var # Active power generation
89 q_gen: pyo.Var # Reactive power generation
91 # Load variables
92 p_load: pyo.Var # Active power load
93 q_load: pyo.Var # Reactive power load
95 # Capacitor variables
96 q_cap: pyo.Var # Capacitor reactive power
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
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
110 # ==================== PYOMO UTILITIES ====================
111 dual: pyo.Suffix # Dual variable suffix for sensitivity analysis
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": ...
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): ...
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: ...
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: ...