diff --git a/epowcore/power_factory/to_gdf/power_factory_extractor.py b/epowcore/power_factory/to_gdf/power_factory_extractor.py index fc1fac4..241fd0d 100644 --- a/epowcore/power_factory/to_gdf/power_factory_extractor.py +++ b/epowcore/power_factory/to_gdf/power_factory_extractor.py @@ -281,7 +281,7 @@ def extract_switches(self) -> None: self.uid += 1 self._component_dict[pf_switch] = switch self.graph.add_node(pf_switch) - + def extract_fuses(self) -> None: """Extract the PowerFactory fuses to the data format. Currently represented as a switch for the gdf""" pf_fuses = self.app.GetCalcRelevantObjects("RelFuse") @@ -323,6 +323,12 @@ def select_pss_type(self, generator: Any) -> None: self.graph.add_node(pss) # Create edge with the appropriate generator self.graph.add_edge(pss, generator) + self.graph.edges[pss, generator].update( + { + generic_pss.uid: generic_pss.connector_names.copy(), + self._component_dict[generator].uid: [], + } + ) def select_avr_type(self, generator: Any) -> None: """Selects one of the currently supported Exciter to extract""" @@ -348,6 +354,12 @@ def select_avr_type(self, generator: Any) -> None: self.graph.add_node(avr) # Create edge with the appropriate generator self.graph.add_edge(avr, generator) + self.graph.edges[avr, generator].update( + { + generic_avr.uid: generic_avr.connector_names.copy(), + self._component_dict[generator].uid: [], + } + ) def select_gov_type(self, generator: Any) -> None: """Selects one of the currently supported Governor to extract""" @@ -382,6 +394,12 @@ def select_gov_type(self, generator: Any) -> None: self.graph.add_node(gov) # Create edge with the appropriate generator self.graph.add_edge(gov, generator) + self.graph.edges[gov, generator].update( + { + generic_gov.uid: generic_gov.connector_names.copy(), + self._component_dict[generator].uid: [], + } + ) def set_core_model_graph(self) -> None: """This creates the graph for the GenericCoreModel""" diff --git a/tests/power_factory/pf_converter_test.py b/tests/power_factory/pf_converter_test.py index ad52eaf..b856a7d 100644 --- a/tests/power_factory/pf_converter_test.py +++ b/tests/power_factory/pf_converter_test.py @@ -1,4 +1,8 @@ import unittest + +from epowcore.gdf.exciters.exciter import Exciter +from epowcore.gdf.governors.governor import Governor +from epowcore.gdf.power_system_stabilizers.power_system_stabilizer import PowerSystemStabilizer from epowcore.gdf.transformers.two_winding_transformer import TwoWindingTransformer from epowcore.power_factory.power_factory_converter import PFModel, PowerFactoryConverter @@ -10,15 +14,19 @@ def test_minimal_conversion_no_errors(self) -> None: """Test if the CoreModel extraction from the Minimal PF model throws errors.""" converter = PowerFactoryConverter() core_model = converter.to_gdf(PFModel("Minimal", "Base", 50.0)) + self.assertEqual(len(core_model.graph.nodes), 8) self.assertEqual(len(core_model.graph.edges), 7) + two_winding_id = core_model.type_list(TwoWindingTransformer)[0].uid + self.assertTrue( any( two_winding_id in x[2] and x[2][two_winding_id] == ["HV"] for x in core_model.graph.edges.data() ) ) + self.assertTrue( any( two_winding_id in x[2] and x[2][two_winding_id] == ["LV"] @@ -26,6 +34,15 @@ def test_minimal_conversion_no_errors(self) -> None: ) ) + for controller_type in (Exciter, Governor, PowerSystemStabilizer): + controller = core_model.type_list(controller_type)[0] + self.assertTrue( + any( + controller.uid in edge_data and edge_data[controller.uid] == ["In", "Out"] + for _, _, edge_data in core_model.graph.edges.data() + ) + ) + if __name__ == "__main__": unittest.main()