Skip to content

Commit 7676a08

Browse files
authored
Merge pull request #624 from PowerGridModel/feature/add-tap-regulator-data-validation-required-check
tap regulator data validation required check
2 parents 4dd00df + 999999d commit 7676a08

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/power_grid_model/validation/validation.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,13 @@ def validate_required_values(
328328
"tap_max",
329329
"tap_size",
330330
]
331+
332+
# Regulators
333+
required["regulator"] = required["base"] + ["regulated_object", "status"]
334+
required["transformer_tap_regulator"] = required["regulator"]
335+
if calculation_type is None or calculation_type == CalculationType.power_flow:
336+
required["transformer_tap_regulator"] += ["control_side", "u_set", "u_band"]
337+
331338
# Appliances
332339
required["appliance"] = required["base"] + ["node", "status"]
333340
required["source"] = required["appliance"].copy()

tests/unit/validation/test_input_validation.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ def input_data() -> Dict[str, np.ndarray]:
156156
three_winding_transformer["pk_13_max"] = [-40, nan_type("three_winding_transformer", "pk_12_max"), 40, 50]
157157
three_winding_transformer["pk_23_max"] = [-120, nan_type("three_winding_transformer", "pk_12_max"), 40, 30]
158158

159+
transformer_tap_regulator = initialize_array("input", "transformer_tap_regulator", 4)
160+
transformer_tap_regulator["id"] = [51, 52, 53, 1]
161+
transformer_tap_regulator["status"] = [0, -1, 2, 5]
162+
transformer_tap_regulator["regulated_object"] = [14, 15, 28, 2]
163+
transformer_tap_regulator["control_side"] = [1, 2, 0, 60]
164+
transformer_tap_regulator["u_set"] = [100, -100, 100, 100]
165+
transformer_tap_regulator["u_band"] = [100, -4, 100, 0]
166+
transformer_tap_regulator["line_drop_compensation_r"] = [0.0, -1.0, 1.0, 2.0]
167+
transformer_tap_regulator["line_drop_compensation_x"] = [0.0, 4.0, 2.0, -4.0]
168+
159169
source = initialize_array("input", "source", 3)
160170
source["id"] = [16, 17, 1]
161171
source["node"] = [10, 1, 2]
@@ -238,6 +248,7 @@ def input_data() -> Dict[str, np.ndarray]:
238248
"link": link,
239249
"transformer": transformer,
240250
"three_winding_transformer": three_winding_transformer,
251+
"transformer_tap_regulator": transformer_tap_regulator,
241252
"source": source,
242253
"shunt": shunt,
243254
"sym_load": sym_load,
@@ -273,6 +284,7 @@ def test_validate_input_data_sym_calculation(input_data):
273284
("transformer", "id"),
274285
("three_winding_transformer", "id"),
275286
("fault", "id"),
287+
("transformer_tap_regulator", "id"),
276288
],
277289
[
278290
("asym_gen", 1),
@@ -301,6 +313,7 @@ def test_validate_input_data_sym_calculation(input_data):
301313
("transformer", 1),
302314
("three_winding_transformer", 1),
303315
("fault", 1),
316+
("transformer_tap_regulator", 1),
304317
],
305318
)
306319
in validation_errors
@@ -550,6 +563,31 @@ def test_validate_three_winding_transformer_ukpkminmax(input_data):
550563
assert NotGreaterOrEqualError("three_winding_transformer", "pk_23_max", [1], 0) in validation_errors
551564

552565

566+
def test_validate_input_data_transformer_tap_regulator(input_data):
567+
validation_errors = validate_input_data(input_data, calculation_type=CalculationType.power_flow)
568+
assert NotBooleanError("transformer_tap_regulator", "status", [52, 1, 53]) in validation_errors
569+
assert (
570+
InvalidIdError(
571+
"transformer_tap_regulator", "regulated_object", [1], ["transformer", "three_winding_transformer"]
572+
)
573+
in validation_errors
574+
)
575+
assert (
576+
InvalidEnumValueError("transformer_tap_regulator", "control_side", [1], [BranchSide, Branch3Side])
577+
in validation_errors
578+
)
579+
# TODO (nbharambe) Add control side error after it is included
580+
# assert InvalidControlSideError("transformer_tap_regulator", "control_side", [52], BranchSide) in validation_errors
581+
assert NotGreaterOrEqualError("transformer_tap_regulator", "u_set", [52], 0.0) in validation_errors
582+
assert NotGreaterThanError("transformer_tap_regulator", "u_band", [52, 1], 0.0) in validation_errors
583+
assert (
584+
NotGreaterOrEqualError("transformer_tap_regulator", "line_drop_compensation_r", [52], 0.0) in validation_errors
585+
)
586+
assert (
587+
NotGreaterOrEqualError("transformer_tap_regulator", "line_drop_compensation_x", [1], 0.0) in validation_errors
588+
)
589+
590+
553591
def test_fault(input_data):
554592
validation_errors = validate_input_data(input_data, calculation_type=CalculationType.short_circuit)
555593
assert InvalidEnumValueError("fault", "fault_type", [50], FaultType) in validation_errors

0 commit comments

Comments
 (0)