Skip to content

Commit deca40b

Browse files
authored
feat: add AsymPowerSensorArray and remove optional columns from GenericBranch (#113)
* Add AsymPowerSensorArray Signed-off-by: Thijs Baaijen <[email protected]> * rename and update test Signed-off-by: Thijs Baaijen <[email protected]> * remove defaulted fields for consistency Signed-off-by: Thijs Baaijen <[email protected]> * revert change Signed-off-by: Thijs Baaijen <[email protected]> * cleanup Signed-off-by: Thijs Baaijen <[email protected]> --------- Signed-off-by: Thijs Baaijen <[email protected]>
1 parent 86033ca commit deca40b

File tree

7 files changed

+40
-44
lines changed

7 files changed

+40
-44
lines changed

src/power_grid_model_ds/_core/model/arrays/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from power_grid_model_ds._core.model.arrays.pgm_arrays import (
1010
AsymCurrentSensorArray,
1111
AsymLineArray,
12+
AsymPowerSensorArray,
1213
AsymVoltageSensorArray,
1314
Branch3Array,
1415
BranchArray,
@@ -29,6 +30,7 @@
2930
)
3031

3132
__all__ = [
33+
"AsymPowerSensorArray",
3234
"AsymVoltageSensorArray",
3335
"AsymCurrentSensorArray",
3436
"Branch3Array",

src/power_grid_model_ds/_core/model/arrays/pgm_arrays.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from power_grid_model_ds._core.model.dtypes.regulators import TransformerTapRegulator
2828
from power_grid_model_ds._core.model.dtypes.sensors import (
2929
AsymCurrentSensor,
30+
AsymPowerSensor,
3031
AsymVoltageSensor,
3132
SymCurrentSensor,
3233
SymPowerSensor,
@@ -154,11 +155,15 @@ class SymVoltageSensorArray(IdArray, SymVoltageSensor):
154155
pass
155156

156157

157-
class AsymVoltageSensorArray(IdArray, AsymVoltageSensor):
158+
class SymCurrentSensorArray(IdArray, SymCurrentSensor):
158159
pass
159160

160161

161-
class SymCurrentSensorArray(IdArray, SymCurrentSensor):
162+
class AsymPowerSensorArray(IdArray, AsymPowerSensor):
163+
pass
164+
165+
166+
class AsymVoltageSensorArray(IdArray, AsymVoltageSensor):
162167
pass
163168

164169

src/power_grid_model_ds/_core/model/dtypes/branches.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,6 @@ class GenericBranch(Branch):
5454
x1: NDArray[np.float64] # positive-sequence reactance
5555
g1: NDArray[np.float64] # positive-sequence conductance
5656
b1: NDArray[np.float64] # positive-sequence susceptance
57-
k: NDArray[np.float64] # off-nominal ratio
58-
theta: NDArray[np.float64] # angle shift (radian)
59-
sn: NDArray[np.float64] # rated power
60-
61-
_defaults = {
62-
"k": 1.0,
63-
"theta": 0.0,
64-
"sn": 0.0,
65-
}
6657

6758

6859
class Transformer(Branch):

src/power_grid_model_ds/_core/model/dtypes/sensors.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ class SymPowerSensor(GenericPowerSensor):
4343
q_sigma: NDArray[np.float64] # std of reactive power
4444

4545

46+
class AsymPowerSensor(GenericPowerSensor):
47+
"""AsymPowerSensor data type"""
48+
49+
p_measured: NDArray3[np.float64] # measured active power
50+
q_measured: NDArray3[np.float64] # measured reactive power
51+
p_sigma: NDArray3[np.float64] # std of active power
52+
q_sigma: NDArray3[np.float64] # std of reactive power
53+
54+
4655
class GenericVoltageSensor(Sensor):
4756
"""Base class for voltage sensor data type"""
4857

src/power_grid_model_ds/_core/model/grids/base.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from power_grid_model_ds._core.model.arrays import (
2020
AsymCurrentSensorArray,
2121
AsymLineArray,
22+
AsymPowerSensorArray,
2223
AsymVoltageSensorArray,
2324
Branch3Array,
2425
BranchArray,
@@ -89,8 +90,9 @@ class Grid(FancyArrayContainer):
8990
# sensors
9091
sym_power_sensor: SymPowerSensorArray
9192
sym_voltage_sensor: SymVoltageSensorArray
92-
asym_voltage_sensor: AsymVoltageSensorArray
9393
sym_current_sensor: SymCurrentSensorArray
94+
asym_power_sensor: AsymPowerSensorArray
95+
asym_voltage_sensor: AsymVoltageSensorArray
9496
asym_current_sensor: AsymCurrentSensorArray
9597

9698
def __str__(self) -> str:

tests/unit/model/arrays/test_build.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from numpy.typing import NDArray
99

1010
from power_grid_model_ds._core import fancypy as fp
11-
from power_grid_model_ds._core.model.arrays import AsymVoltageSensorArray, SymPowerSensorArray
11+
from power_grid_model_ds._core.model.arrays import AsymVoltageSensorArray
1212
from power_grid_model_ds._core.model.arrays.base.array import FancyArray
1313
from power_grid_model_ds._core.model.arrays.base.errors import ArrayDefinitionError
1414
from power_grid_model_ds._core.model.constants import EMPTY_ID
@@ -232,27 +232,13 @@ def test_initialization_from_args_with_extra_columns():
232232
assert "undefined" not in array.dtype.names
233233

234234

235-
def test_sensor_array():
236-
test_len = 2
237-
# test proper intiliazation of a SensorArray
238-
pow_sens = SymPowerSensorArray.empty(test_len)
239-
sym_pow_fields = [
240-
"measured_object",
241-
"measured_terminal_type",
242-
"power_sigma",
243-
"p_measured",
244-
"p_sigma",
245-
"q_measured",
246-
"q_sigma",
247-
]
248-
for field in sym_pow_fields:
249-
assert field in pow_sens.dtype.fields
250-
235+
def test_asymmetric_sensor_array():
236+
array_length = 2
251237
# test if asymmetric array has NDArray3 fields, i.e. with 3 floats per element (one per phase)
252-
asym_volt_sens = AsymVoltageSensorArray.empty(test_len)
238+
asym_volt_sens = AsymVoltageSensorArray.empty(array_length)
253239
nd3_fields = ["u_sigma", "u_measured", "u_angle_measured"]
254240
for field in nd3_fields:
255-
assert asym_volt_sens[field].shape == (test_len, 3)
241+
assert asym_volt_sens[field].shape == (array_length, 3)
256242

257243

258244
def test_inherit_defaults_from_multiple_parents():

tests/unit/model/grids/test_grid_base.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,25 @@ def test_initialize_empty_grid(grid: Grid):
3131
assert isinstance(grid, Grid)
3232
fields = dataclasses.asdict(grid).keys()
3333
assert {
34-
"link",
35-
"sym_load",
36-
"sym_power_sensor",
37-
"source",
3834
"_id_counter",
39-
"transformer_tap_regulator",
40-
"asym_voltage_sensor",
41-
"sym_current_sensor",
4235
"asym_current_sensor",
43-
"three_winding_transformer",
44-
"transformer",
45-
"node",
46-
"line",
47-
"generic_branch",
4836
"asym_line",
49-
"sym_gen",
37+
"asym_power_sensor",
38+
"asym_voltage_sensor",
39+
"generic_branch",
5040
"graphs",
41+
"line",
42+
"link",
43+
"node",
44+
"source",
45+
"sym_current_sensor",
46+
"sym_gen",
47+
"sym_load",
48+
"sym_power_sensor",
5149
"sym_voltage_sensor",
50+
"three_winding_transformer",
51+
"transformer",
52+
"transformer_tap_regulator",
5253
} == set(fields)
5354

5455

0 commit comments

Comments
 (0)