33# SPDX-License-Identifier: MPL-2.0
44
55from typing import Callable , List
6- from unittest .mock import ANY , MagicMock , patch
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
@@ -60,7 +63,12 @@ def test_create_output_data_3ph():
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
@@ -75,18 +83,13 @@ def test_create_output_data_3ph():
7583 (PandaPowerConverter ._pp_sgens_output , "sym_gen" ),
7684 (PandaPowerConverter ._pp_trafos_output , "transformer" ),
7785 (PandaPowerConverter ._pp_trafos3w_output , "three_winding_transformer" ),
78- (PandaPowerConverter ._pp_loads_output , "sym_load" ),
79- (PandaPowerConverter ._pp_asym_loads_output , "asym_load" ),
8086 (PandaPowerConverter ._pp_asym_gens_output , "asym_gen" ),
81- (PandaPowerConverter ._pp_ward_output , "ward" ),
82- (PandaPowerConverter ._pp_motor_output , "motor" ),
8387 (PandaPowerConverter ._pp_switches_output , "link" ),
8488 (PandaPowerConverter ._pp_buses_output_3ph , "node" ),
8589 (PandaPowerConverter ._pp_lines_output_3ph , "line" ),
8690 (PandaPowerConverter ._pp_ext_grids_output_3ph , "source" ),
8791 (PandaPowerConverter ._pp_sgens_output_3ph , "sym_gen" ),
8892 (PandaPowerConverter ._pp_trafos_output_3ph , "transformer" ),
89- (PandaPowerConverter ._pp_loads_output_3ph , "sym_load" ),
9093 (PandaPowerConverter ._pp_asym_loads_output_3ph , "asym_load" ),
9194 (PandaPowerConverter ._pp_asym_gens_output_3ph , "asym_gen" ),
9295 ],
@@ -109,6 +112,34 @@ def test_create_pp_output_object__empty(create_fn: Callable[[PandaPowerConverter
109112 mock_df .assert_not_called ()
110113
111114
115+ @pytest .mark .parametrize (
116+ ("create_fn" , "element" , "symmetric" , "table" ),
117+ [
118+ (PandaPowerConverter ._pp_load_elements_output , "load" , True , "sym_load" ),
119+ (PandaPowerConverter ._pp_load_elements_output , "ward" , True , "ward" ),
120+ (PandaPowerConverter ._pp_load_elements_output , "motor" , True , "motor" ),
121+ ],
122+ )
123+ def test_create_pp_output_object_with_params__empty (
124+ create_fn : Callable [[PandaPowerConverter , str , bool ], None ], element : str , symmetric : bool , table : str
125+ ):
126+ # Arrange: No table
127+ converter = PandaPowerConverter ()
128+
129+ # Act / Assert
130+ with patch ("power_grid_model_io.converters.pandapower_converter.pd.DataFrame" ) as mock_df :
131+ create_fn (converter , element , symmetric )
132+ mock_df .assert_not_called ()
133+
134+ # Arrange: Empty table
135+ converter .pgm_output_data [table ] = np .array ([]) # type: ignore
136+
137+ # Act / Assert
138+ with patch ("power_grid_model_io.converters.pandapower_converter.pd.DataFrame" ) as mock_df :
139+ create_fn (converter , element , symmetric )
140+ mock_df .assert_not_called ()
141+
142+
112143def test_output_bus (converter ):
113144 # Arrange
114145 mock_pgm_array = MagicMock ()
@@ -532,15 +563,34 @@ def test_pp_load_result_accumulate__asym():
532563
533564
534565@pytest .mark .parametrize (
535- ("output_fn" , "table" , "load_id_names" , "result_suffix" ),
566+ ("output_fn" , "element" , "symmetric" , " table" , "load_id_names" , "result_suffix" ),
536567 [
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" ),
568+ (
569+ PandaPowerConverter ._pp_load_elements_output ,
570+ "load" ,
571+ True ,
572+ "load" ,
573+ ["const_power" , "const_impedance" , "const_current" ],
574+ "" ,
575+ ),
576+ (PandaPowerConverter ._pp_load_elements_output , "motor" , True , "motor" , ["motor_load" ], "" ),
577+ (
578+ PandaPowerConverter ._pp_load_elements_output ,
579+ "load" ,
580+ False ,
581+ "load" ,
582+ ["const_power" , "const_impedance" , "const_current" ],
583+ "_3ph" ,
584+ ),
540585 ],
541586)
542587def test_output_load_types (
543- output_fn : Callable [[PandaPowerConverter ], None ], table : str , load_id_names : List [str ], result_suffix : str
588+ output_fn : Callable [[PandaPowerConverter , str , bool ], None ],
589+ element : str ,
590+ symmetric : bool ,
591+ table : str ,
592+ load_id_names : List [str ],
593+ result_suffix : str ,
544594):
545595 # Arrange
546596 converter = PandaPowerConverter ()
@@ -551,7 +601,7 @@ def test_output_load_types(
551601 converter ._pp_load_result_accumulate = MagicMock () # type: ignore
552602
553603 # Act
554- output_fn (converter )
604+ output_fn (converter , element , symmetric )
555605
556606 # Assert
557607 converter ._pp_load_result_accumulate .assert_called_once_with (pp_component_name = table , load_id_names = load_id_names )
@@ -570,7 +620,7 @@ def test_output_load_ward():
570620 converter ._pp_load_result_accumulate = MagicMock ()
571621
572622 # Act
573- converter ._pp_ward_output ( )
623+ converter ._pp_load_elements_output ( element = "ward" , symmetric = True )
574624
575625 # Assert
576626 converter ._pp_load_result_accumulate .assert_called_once_with (pp_component_name = "ward" , load_id_names = load_id_names )
0 commit comments