Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/power_grid_model/validation/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,13 @@ def validate_required_values(
"tap_max",
"tap_size",
]

# Regulators
required["regulator"] = required["base"] + ["regulated_object", "status"]
required["transformer_tap_regulator"] = required["regulator"]
if calculation_type is None or calculation_type == CalculationType.power_flow:
required["transformer_tap_regulator"] += ["control_side", "u_set", "u_band"]

# Appliances
required["appliance"] = required["base"] + ["node", "status"]
required["source"] = required["appliance"].copy()
Expand Down
38 changes: 38 additions & 0 deletions tests/unit/validation/test_input_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,16 @@ def input_data() -> Dict[str, np.ndarray]:
three_winding_transformer["pk_13_max"] = [-40, nan_type("three_winding_transformer", "pk_12_max"), 40, 50]
three_winding_transformer["pk_23_max"] = [-120, nan_type("three_winding_transformer", "pk_12_max"), 40, 30]

transformer_tap_regulator = initialize_array("input", "transformer_tap_regulator", 4)
transformer_tap_regulator["id"] = [51, 52, 53, 1]
transformer_tap_regulator["status"] = [0, -1, 2, 5]
transformer_tap_regulator["regulated_object"] = [14, 15, 28, 2]
transformer_tap_regulator["control_side"] = [1, 2, 0, 60]
transformer_tap_regulator["u_set"] = [100, -100, 100, 100]
transformer_tap_regulator["u_band"] = [100, -4, 100, 0]
transformer_tap_regulator["line_drop_compensation_r"] = [0.0, -1.0, 1.0, 2.0]
transformer_tap_regulator["line_drop_compensation_x"] = [0.0, 4.0, 2.0, -4.0]

source = initialize_array("input", "source", 3)
source["id"] = [16, 17, 1]
source["node"] = [10, 1, 2]
Expand Down Expand Up @@ -238,6 +248,7 @@ def input_data() -> Dict[str, np.ndarray]:
"link": link,
"transformer": transformer,
"three_winding_transformer": three_winding_transformer,
"transformer_tap_regulator": transformer_tap_regulator,
"source": source,
"shunt": shunt,
"sym_load": sym_load,
Expand Down Expand Up @@ -273,6 +284,7 @@ def test_validate_input_data_sym_calculation(input_data):
("transformer", "id"),
("three_winding_transformer", "id"),
("fault", "id"),
("transformer_tap_regulator", "id"),
],
[
("asym_gen", 1),
Expand Down Expand Up @@ -301,6 +313,7 @@ def test_validate_input_data_sym_calculation(input_data):
("transformer", 1),
("three_winding_transformer", 1),
("fault", 1),
("transformer_tap_regulator", 1),
],
)
in validation_errors
Expand Down Expand Up @@ -550,6 +563,31 @@ def test_validate_three_winding_transformer_ukpkminmax(input_data):
assert NotGreaterOrEqualError("three_winding_transformer", "pk_23_max", [1], 0) in validation_errors


def test_validate_input_data_transformer_tap_regulator(input_data):
validation_errors = validate_input_data(input_data, calculation_type=CalculationType.power_flow)
assert NotBooleanError("transformer_tap_regulator", "status", [52, 1, 53]) in validation_errors
assert (
InvalidIdError(
"transformer_tap_regulator", "regulated_object", [1], ["transformer", "three_winding_transformer"]
)
in validation_errors
)
assert (
InvalidEnumValueError("transformer_tap_regulator", "control_side", [1], [BranchSide, Branch3Side])
in validation_errors
)
# TODO (nbharambe) Add control side error after it is included
# assert InvalidControlSideError("transformer_tap_regulator", "control_side", [52], BranchSide) in validation_errors
assert NotGreaterOrEqualError("transformer_tap_regulator", "u_set", [52], 0.0) in validation_errors
assert NotGreaterThanError("transformer_tap_regulator", "u_band", [52, 1], 0.0) in validation_errors
assert (
NotGreaterOrEqualError("transformer_tap_regulator", "line_drop_compensation_r", [52], 0.0) in validation_errors
)
assert (
NotGreaterOrEqualError("transformer_tap_regulator", "line_drop_compensation_x", [1], 0.0) in validation_errors
)


def test_fault(input_data):
validation_errors = validate_input_data(input_data, calculation_type=CalculationType.short_circuit)
assert InvalidEnumValueError("fault", "fault_type", [50], FaultType) in validation_errors
Expand Down