16
16
from power_grid_model .validation import assert_valid_input_data
17
17
from power_grid_model .validation ._validation import (
18
18
assert_valid_data_structure ,
19
+ validate_generic_current_sensor ,
19
20
validate_generic_power_sensor ,
20
21
validate_ids ,
21
22
validate_input_data ,
@@ -213,6 +214,12 @@ def test_validate_required_values_sym_calculation(calculation_type, symmetric):
213
214
asym_power_sensor ["p_measured" ] = [[np .nan , 2.0 , 1.0 ]]
214
215
asym_power_sensor ["q_measured" ] = [[2.0 , 1.0 , np .nan ]]
215
216
217
+ sym_current_sensor = initialize_array ("input" , "sym_current_sensor" , 1 )
218
+
219
+ asym_current_sensor = initialize_array ("input" , "asym_current_sensor" , 1 )
220
+ asym_current_sensor ["i_measured" ] = [[np .nan , 2.0 , 1.0 ]]
221
+ asym_current_sensor ["i_angle_measured" ] = [[2.0 , 1.0 , np .nan ]]
222
+
216
223
fault = initialize_array ("input" , "fault" , 1 )
217
224
218
225
data = {
@@ -231,6 +238,8 @@ def test_validate_required_values_sym_calculation(calculation_type, symmetric):
231
238
"asym_voltage_sensor" : asym_voltage_sensor ,
232
239
"sym_power_sensor" : sym_power_sensor ,
233
240
"asym_power_sensor" : asym_power_sensor ,
241
+ "sym_current_sensor" : sym_current_sensor ,
242
+ "asym_current_sensor" : asym_current_sensor ,
234
243
"fault" : fault ,
235
244
}
236
245
required_values_errors = validate_required_values (data = data , calculation_type = calculation_type , symmetric = symmetric )
@@ -382,6 +391,28 @@ def test_validate_required_values_sym_calculation(calculation_type, symmetric):
382
391
assert (MissingValueError ("asym_power_sensor" , "p_measured" , [NaN ]) in required_values_errors ) == se_dependent
383
392
assert (MissingValueError ("asym_power_sensor" , "q_measured" , [NaN ]) in required_values_errors ) == se_dependent
384
393
394
+ assert MissingValueError ("sym_current_sensor" , "id" , [NaN ]) in required_values_errors
395
+ assert MissingValueError ("sym_current_sensor" , "measured_object" , [NaN ]) in required_values_errors
396
+ assert MissingValueError ("sym_current_sensor" , "measured_terminal_type" , [NaN ]) in required_values_errors
397
+ assert MissingValueError ("sym_current_sensor" , "angle_measurement_type" , [NaN ]) in required_values_errors
398
+ assert (MissingValueError ("sym_current_sensor" , "i_measured" , [NaN ]) in required_values_errors ) == se_dependent
399
+ assert (
400
+ MissingValueError ("sym_current_sensor" , "i_angle_measured" , [NaN ]) in required_values_errors
401
+ ) == se_dependent
402
+ assert (MissingValueError ("sym_current_sensor" , "i_sigma" , [NaN ]) in required_values_errors ) == se_dependent
403
+ assert (MissingValueError ("sym_current_sensor" , "i_angle_sigma" , [NaN ]) in required_values_errors ) == se_dependent
404
+
405
+ assert MissingValueError ("asym_current_sensor" , "id" , [NaN ]) in required_values_errors
406
+ assert MissingValueError ("asym_current_sensor" , "measured_object" , [NaN ]) in required_values_errors
407
+ assert MissingValueError ("asym_current_sensor" , "measured_terminal_type" , [NaN ]) in required_values_errors
408
+ assert MissingValueError ("asym_current_sensor" , "angle_measurement_type" , [NaN ]) in required_values_errors
409
+ assert (MissingValueError ("asym_current_sensor" , "i_measured" , [NaN ]) in required_values_errors ) == se_dependent
410
+ assert (
411
+ MissingValueError ("asym_current_sensor" , "i_angle_measured" , [NaN ]) in required_values_errors
412
+ ) == se_dependent
413
+ assert (MissingValueError ("asym_current_sensor" , "i_sigma" , [NaN ]) in required_values_errors ) == se_dependent
414
+ assert (MissingValueError ("asym_current_sensor " , "i_angle_sigma" , [NaN ]) in required_values_errors ) == se_dependent
415
+
385
416
assert MissingValueError ("fault" , "id" , [NaN ]) in required_values_errors
386
417
assert (MissingValueError ("fault" , "status" , [NaN ]) in required_values_errors ) == sc_dependent
387
418
assert (MissingValueError ("fault" , "fault_type" , [NaN ]) in required_values_errors ) == sc_dependent
@@ -464,6 +495,10 @@ def test_validate_values__calculation_types():
464
495
("asym_voltage_sensor" , "u_sigma" ),
465
496
("sym_power_sensor" , "power_sigma" ),
466
497
("asym_power_sensor" , "power_sigma" ),
498
+ ("sym_current_sensor" , "i_sigma" ),
499
+ ("sym_current_sensor" , "i_angle_sigma" ),
500
+ ("asym_current_sensor" , "i_sigma" ),
501
+ ("asym_current_sensor" , "i_angle_sigma" ),
467
502
],
468
503
)
469
504
def test_validate_values__infinite_sigmas (sensor_type , parameter ):
@@ -718,6 +753,66 @@ def test_validate_generic_power_sensor__terminal_types(
718
753
)
719
754
720
755
756
+ @pytest .mark .parametrize (
757
+ "measured_terminal_type" ,
758
+ [
759
+ MeasuredTerminalType .branch_from ,
760
+ MeasuredTerminalType .branch_to ,
761
+ MeasuredTerminalType .branch3_1 ,
762
+ MeasuredTerminalType .branch3_2 ,
763
+ MeasuredTerminalType .branch3_3 ,
764
+ ],
765
+ )
766
+ @patch ("power_grid_model.validation._validation.validate_base" , new = MagicMock ())
767
+ @patch ("power_grid_model.validation._validation._all_greater_than_zero" , new = MagicMock ())
768
+ @patch ("power_grid_model.validation._validation._all_valid_enum_values" , new = MagicMock ())
769
+ @patch ("power_grid_model.validation._validation._all_valid_ids" )
770
+ def test_validate_generic_current_sensor__all_terminal_types (
771
+ _all_valid_ids : MagicMock , measured_terminal_type : MeasuredTerminalType
772
+ ):
773
+ # Act
774
+ validate_generic_current_sensor (data = {}, component = "" ) # type: ignore
775
+
776
+ # Assert
777
+ _all_valid_ids .assert_any_call (
778
+ ANY ,
779
+ ANY ,
780
+ field = ANY ,
781
+ ref_components = ANY ,
782
+ measured_terminal_type = measured_terminal_type ,
783
+ )
784
+
785
+
786
+ @pytest .mark .parametrize (
787
+ ("ref_component" , "measured_terminal_type" ),
788
+ [
789
+ (["line" , "generic_branch" , "transformer" ], MeasuredTerminalType .branch_from ),
790
+ (["line" , "generic_branch" , "transformer" ], MeasuredTerminalType .branch_to ),
791
+ ("three_winding_transformer" , MeasuredTerminalType .branch3_1 ),
792
+ ("three_winding_transformer" , MeasuredTerminalType .branch3_2 ),
793
+ ("three_winding_transformer" , MeasuredTerminalType .branch3_3 ),
794
+ ],
795
+ )
796
+ @patch ("power_grid_model.validation._validation.validate_base" , new = MagicMock ())
797
+ @patch ("power_grid_model.validation._validation._all_greater_than_zero" , new = MagicMock ())
798
+ @patch ("power_grid_model.validation._validation._all_valid_enum_values" , new = MagicMock ())
799
+ @patch ("power_grid_model.validation._validation._all_valid_ids" )
800
+ def test_validate_generic_current_sensor__terminal_types (
801
+ _all_valid_ids : MagicMock , ref_component : str | list [str ], measured_terminal_type : MeasuredTerminalType
802
+ ):
803
+ # Act
804
+ validate_generic_current_sensor (data = {}, component = "" ) # type: ignore
805
+
806
+ # Assert
807
+ _all_valid_ids .assert_any_call (
808
+ ANY ,
809
+ ANY ,
810
+ field = ANY ,
811
+ ref_components = ref_component ,
812
+ measured_terminal_type = measured_terminal_type ,
813
+ )
814
+
815
+
721
816
def test_power_sigma_or_p_q_sigma ():
722
817
# node
723
818
node = initialize_array ("input" , "node" , 2 )
0 commit comments