22#
33# SPDX-License-Identifier: MPL-2.0
44
5- from typing import Callable , List
6- from unittest .mock import ANY , MagicMock , patch
5+ from typing import Any , Callable , Dict , List
6+ from unittest .mock import ANY , MagicMock , call , patch
77
88import numpy as np
99import pandas as pd
@@ -38,11 +38,14 @@ def test_create_output_data():
3838 converter ._pp_sgens_output .assert_called_once_with ()
3939 converter ._pp_trafos_output .assert_called_once_with ()
4040 converter ._pp_trafos3w_output .assert_called_once_with ()
41- converter ._pp_loads_output .assert_called_once_with ()
41+ expected_calls = [
42+ call (element = "load" , symmetric = True ),
43+ call (element = "ward" , symmetric = True ),
44+ call (element = "motor" , symmetric = True ),
45+ ]
46+ converter ._pp_load_elements_output .assert_has_calls (expected_calls )
4247 converter ._pp_asym_loads_output .assert_called_once_with ()
4348 converter ._pp_asym_gens_output .assert_called_once_with ()
44- converter ._pp_motor_output .assert_called_once_with ()
45- converter ._pp_ward_output .assert_called_once_with ()
4649 converter ._pp_switches_output .assert_called_once_with ()
4750
4851
@@ -54,58 +57,65 @@ def test_create_output_data_3ph():
5457 PandaPowerConverter ._create_output_data_3ph (self = converter ) # type: ignore
5558
5659 # Assert
57- assert len (converter .method_calls ) == 8
60+ assert len (converter .method_calls ) == 11
5861 converter ._pp_buses_output_3ph .assert_called_once_with ()
5962 converter ._pp_lines_output_3ph .assert_called_once_with ()
6063 converter ._pp_ext_grids_output_3ph .assert_called_once_with ()
6164 converter ._pp_sgens_output_3ph .assert_called_once_with ()
6265 converter ._pp_trafos_output_3ph .assert_called_once_with ()
63- converter ._pp_loads_output_3ph .assert_called_once_with ()
66+ expected_calls = [
67+ call (element = "load" , symmetric = False ),
68+ call (element = "ward" , symmetric = False ),
69+ call (element = "motor" , symmetric = False ),
70+ ]
71+ converter ._pp_load_elements_output .assert_has_calls (expected_calls )
6472 converter ._pp_asym_loads_output_3ph .assert_called_once_with ()
6573 converter ._pp_asym_gens_output_3ph .assert_called_once_with ()
6674
6775
6876@pytest .mark .parametrize (
69- ("create_fn" , "table" ),
77+ ("create_fn" , "table" , "create_fn_kwargs" ),
7078 [
71- (PandaPowerConverter ._pp_buses_output , "node" ),
72- (PandaPowerConverter ._pp_lines_output , "line" ),
73- (PandaPowerConverter ._pp_ext_grids_output , "source" ),
74- (PandaPowerConverter ._pp_shunts_output , "shunt" ),
75- (PandaPowerConverter ._pp_sgens_output , "sym_gen" ),
76- (PandaPowerConverter ._pp_trafos_output , "transformer" ),
77- (PandaPowerConverter ._pp_trafos3w_output , "three_winding_transformer" ),
78- (PandaPowerConverter ._pp_loads_output , "sym_load" ),
79- (PandaPowerConverter ._pp_asym_loads_output , "asym_load" ),
80- (PandaPowerConverter ._pp_asym_gens_output , "asym_gen" ),
81- (PandaPowerConverter ._pp_ward_output , "ward" ),
82- (PandaPowerConverter ._pp_motor_output , "motor" ),
83- (PandaPowerConverter ._pp_switches_output , "link" ),
84- (PandaPowerConverter ._pp_buses_output_3ph , "node" ),
85- (PandaPowerConverter ._pp_lines_output_3ph , "line" ),
86- (PandaPowerConverter ._pp_ext_grids_output_3ph , "source" ),
87- (PandaPowerConverter ._pp_sgens_output_3ph , "sym_gen" ),
88- (PandaPowerConverter ._pp_trafos_output_3ph , "transformer" ),
89- (PandaPowerConverter ._pp_loads_output_3ph , "sym_load" ),
90- (PandaPowerConverter ._pp_asym_loads_output_3ph , "asym_load" ),
91- (PandaPowerConverter ._pp_asym_gens_output_3ph , "asym_gen" ),
79+ (PandaPowerConverter ._pp_buses_output , "node" , {}),
80+ (PandaPowerConverter ._pp_lines_output , "line" , {}),
81+ (PandaPowerConverter ._pp_ext_grids_output , "source" , {}),
82+ (PandaPowerConverter ._pp_shunts_output , "shunt" , {}),
83+ (PandaPowerConverter ._pp_sgens_output , "sym_gen" , {}),
84+ (PandaPowerConverter ._pp_trafos_output , "transformer" , {}),
85+ (PandaPowerConverter ._pp_trafos3w_output , "three_winding_transformer" , {}),
86+ (PandaPowerConverter ._pp_load_elements_output , "load" , {"symmetric" : True , "element" : "sym_load" }),
87+ (PandaPowerConverter ._pp_load_elements_output , "ward" , {"symmetric" : True , "element" : "ward" }),
88+ (PandaPowerConverter ._pp_load_elements_output , "motor" , {"symmetric" : True , "element" : "motor" }),
89+ (PandaPowerConverter ._pp_asym_loads_output , "asym_load" , {}),
90+ (PandaPowerConverter ._pp_asym_gens_output , "asym_gen" , {}),
91+ (PandaPowerConverter ._pp_switches_output , "link" , {}),
92+ (PandaPowerConverter ._pp_buses_output_3ph , "node" , {}),
93+ (PandaPowerConverter ._pp_lines_output_3ph , "line" , {}),
94+ (PandaPowerConverter ._pp_ext_grids_output_3ph , "source" , {}),
95+ (PandaPowerConverter ._pp_sgens_output_3ph , "sym_gen" , {}),
96+ (PandaPowerConverter ._pp_trafos_output_3ph , "transformer" , {}),
97+ (PandaPowerConverter ._pp_load_elements_output , "load" , {"symmetric" : False , "element" : "sym_load" }),
98+ (PandaPowerConverter ._pp_load_elements_output , "ward" , {"symmetric" : False , "element" : "ward" }),
99+ (PandaPowerConverter ._pp_load_elements_output , "motor" , {"symmetric" : False , "element" : "motor" }),
100+ (PandaPowerConverter ._pp_asym_loads_output_3ph , "asym_load" , {}),
101+ (PandaPowerConverter ._pp_asym_gens_output_3ph , "asym_gen" , {}),
92102 ],
93103)
94- def test_create_pp_output_object__empty (create_fn : Callable [[ PandaPowerConverter ] , None ], table : str ):
104+ def test_create_pp_output_object__empty (create_fn : Callable [... , None ], table : str , create_fn_kwargs : Dict [ str , Any ] ):
95105 # Arrange: No table
96106 converter = PandaPowerConverter ()
97107
98108 # Act / Assert
99109 with patch ("power_grid_model_io.converters.pandapower_converter.pd.DataFrame" ) as mock_df :
100- create_fn (converter )
110+ create_fn (converter , ** create_fn_kwargs )
101111 mock_df .assert_not_called ()
102112
103113 # Arrange: Empty table
104114 converter .pgm_output_data [table ] = np .array ([]) # type: ignore
105115
106116 # Act / Assert
107117 with patch ("power_grid_model_io.converters.pandapower_converter.pd.DataFrame" ) as mock_df :
108- create_fn (converter )
118+ create_fn (converter , ** create_fn_kwargs )
109119 mock_df .assert_not_called ()
110120
111121
@@ -532,15 +542,34 @@ def test_pp_load_result_accumulate__asym():
532542
533543
534544@pytest .mark .parametrize (
535- ("output_fn" , "table" , "load_id_names" , "result_suffix" ),
545+ ("output_fn" , "element" , "symmetric" , " table" , "load_id_names" , "result_suffix" ),
536546 [
537- (PandaPowerConverter ._pp_loads_output , "load" , ["const_power" , "const_impedance" , "const_current" ], "" ),
538- (PandaPowerConverter ._pp_motor_output , "motor" , ["motor_load" ], "" ),
539- (PandaPowerConverter ._pp_loads_output_3ph , "load" , ["const_power" , "const_impedance" , "const_current" ], "_3ph" ),
547+ (
548+ PandaPowerConverter ._pp_load_elements_output ,
549+ "load" ,
550+ True ,
551+ "load" ,
552+ ["const_power" , "const_impedance" , "const_current" ],
553+ "" ,
554+ ),
555+ (PandaPowerConverter ._pp_load_elements_output , "motor" , True , "motor" , ["motor_load" ], "" ),
556+ (
557+ PandaPowerConverter ._pp_load_elements_output ,
558+ "load" ,
559+ False ,
560+ "load" ,
561+ ["const_power" , "const_impedance" , "const_current" ],
562+ "_3ph" ,
563+ ),
540564 ],
541565)
542566def test_output_load_types (
543- output_fn : Callable [[PandaPowerConverter ], None ], table : str , load_id_names : List [str ], result_suffix : str
567+ output_fn : Callable [[PandaPowerConverter , str , bool ], None ],
568+ element : str ,
569+ symmetric : bool ,
570+ table : str ,
571+ load_id_names : List [str ],
572+ result_suffix : str ,
544573):
545574 # Arrange
546575 converter = PandaPowerConverter ()
@@ -551,7 +580,7 @@ def test_output_load_types(
551580 converter ._pp_load_result_accumulate = MagicMock () # type: ignore
552581
553582 # Act
554- output_fn (converter )
583+ output_fn (converter , element , symmetric )
555584
556585 # Assert
557586 converter ._pp_load_result_accumulate .assert_called_once_with (pp_component_name = table , load_id_names = load_id_names )
@@ -570,7 +599,7 @@ def test_output_load_ward():
570599 converter ._pp_load_result_accumulate = MagicMock ()
571600
572601 # Act
573- converter ._pp_ward_output ( )
602+ converter ._pp_load_elements_output ( element = "ward" , symmetric = True )
574603
575604 # Assert
576605 converter ._pp_load_result_accumulate .assert_called_once_with (pp_component_name = "ward" , load_id_names = load_id_names )
0 commit comments