Skip to content

Commit

Permalink
fix edge cases + unexpected behaviour
Browse files Browse the repository at this point in the history
Signed-off-by: Martijn Govers <[email protected]>

Third-Party DCO Remediation Commit for Jerry Guo <[email protected]>

On behalf of Jerry Guo <[email protected]>, I, Martijn Govers <[email protected]>, hereby add my Signed-off-by to this commit: 55063bf

Signed-off-by: Martijn Govers <[email protected]>
  • Loading branch information
mgovers committed Jan 17, 2024
1 parent 5d29fb8 commit b04197e
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
29 changes: 17 additions & 12 deletions src/power_grid_model_io/converters/pandapower_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
Panda Power Converter
"""
from functools import lru_cache
from typing import Dict, List, MutableMapping, Optional, Tuple, Union
from typing import Dict, List, MutableMapping, Optional, Tuple, Type, Union

import numpy as np
import pandas as pd
Expand Down Expand Up @@ -387,7 +387,7 @@ def _create_pgm_input_lines(self):
/ (2 * np.pi * self.system_frequency * 1e-3)
)
pgm_lines["i_n"] = (
(self._get_pp_attr("line", "max_i_ka", expected_type="f8") * 1e3)
(self._get_pp_attr("line", "max_i_ka", expected_type="f8", default=np.nan) * 1e3)
* self._get_pp_attr("line", "df", expected_type="f8", default=1)
* parallel
)
Expand Down Expand Up @@ -687,8 +687,8 @@ def _create_pgm_input_transformers(self): # pylint: disable=too-many-statements
switch_states = self.get_switch_states("trafo")

tap_side = self._get_pp_attr("trafo", "tap_side", expected_type="O", default=None)
tap_nom = self._get_pp_attr("trafo", "tap_neutral", expected_type="i4", default=np.nan)
tap_pos = self._get_pp_attr("trafo", "tap_pos", expected_type="i4", default=np.nan)
tap_nom = self._get_pp_attr("trafo", "tap_neutral", expected_type="f8", default=np.nan)
tap_pos = self._get_pp_attr("trafo", "tap_pos", expected_type="f8", default=np.nan)
tap_size = self._get_tap_size(pp_trafo)
winding_types = self.get_trafo_winding_types()
clocks = np.round(self._get_pp_attr("trafo", "shift_degree", expected_type="f8", default=0.0) / 30) % 12
Expand Down Expand Up @@ -749,8 +749,8 @@ def _create_pgm_input_transformers(self): # pylint: disable=too-many-statements
pgm_transformers["clock"] = clocks
pgm_transformers["winding_from"] = winding_types["winding_from"]
pgm_transformers["winding_to"] = winding_types["winding_to"]
pgm_transformers["tap_nom"] = tap_nom
pgm_transformers["tap_pos"] = tap_pos
pgm_transformers["tap_nom"] = tap_nom.astype("i4") # TODO(mgovers) shouldn't this be rounded?
pgm_transformers["tap_pos"] = tap_pos.astype("i4") # TODO(mgovers) shouldn't this be rounded?
pgm_transformers["tap_side"] = self._get_transformer_tap_side(tap_side)
pgm_transformers["tap_min"] = self._get_pp_attr("trafo", "tap_min", expected_type="i4", default=0)
pgm_transformers["tap_max"] = self._get_pp_attr("trafo", "tap_max", expected_type="i4", default=0)
Expand Down Expand Up @@ -786,8 +786,8 @@ def _create_pgm_input_three_winding_transformers(self):
in_service = self._get_pp_attr("trafo3w", "in_service", expected_type="bool", default=True)
switch_states = self.get_trafo3w_switch_states(pp_trafo3w)
tap_side = self._get_pp_attr("trafo3w", "tap_side", expected_type="O", default=None)
tap_nom = self._get_pp_attr("trafo3w", "tap_neutral", expected_type="i4", default=np.nan)
tap_pos = self._get_pp_attr("trafo3w", "tap_pos", expected_type="i4", default=np.nan)
tap_nom = self._get_pp_attr("trafo3w", "tap_neutral", expected_type="f8", default=np.nan)
tap_pos = self._get_pp_attr("trafo3w", "tap_pos", expected_type="f8", default=np.nan)
tap_size = self._get_3wtransformer_tap_size(pp_trafo3w)
vk_hv_percent = self._get_pp_attr("trafo3w", "vk_hv_percent", expected_type="f8")
vkr_hv_percent = self._get_pp_attr("trafo3w", "vkr_hv_percent", expected_type="f8")
Expand Down Expand Up @@ -879,8 +879,8 @@ def _create_pgm_input_three_winding_transformers(self):
pgm_3wtransformers["winding_1"] = winding_types["winding_1"]
pgm_3wtransformers["winding_2"] = winding_types["winding_2"]
pgm_3wtransformers["winding_3"] = winding_types["winding_3"]
pgm_3wtransformers["tap_nom"] = tap_nom
pgm_3wtransformers["tap_pos"] = tap_pos
pgm_3wtransformers["tap_nom"] = tap_nom.astype("i4") # TODO(mgovers) shouldn't this be rounded?
pgm_3wtransformers["tap_pos"] = tap_pos.astype("i4") # TODO(mgovers) shouldn't this be rounded?
pgm_3wtransformers["tap_side"] = self._get_3wtransformer_tap_side(tap_side)
pgm_3wtransformers["tap_min"] = self._get_pp_attr("trafo3w", "tap_min", expected_type="i4", default=0)
pgm_3wtransformers["tap_max"] = self._get_pp_attr("trafo3w", "tap_max", expected_type="i4", default=0)
Expand Down Expand Up @@ -2375,7 +2375,7 @@ def _get_pp_attr(
self,
table: str,
attribute: str,
expected_type: Optional[str] = "O",
expected_type: Optional[str] = None,
default: Optional[Union[float, bool, str]] = None,
) -> np.ndarray:
"""
Expand All @@ -2389,7 +2389,12 @@ def _get_pp_attr(
the selected PandaPower attribute from the selected PandaPower table
"""
pp_component_data = self.pp_input_data[table]
exp_dtype = type(default) if default is not None else expected_type

exp_dtype: Union[str, Type] = "O"
if expected_type is not None:
exp_dtype = expected_type
elif default is not None:
exp_dtype = type(default)

# If the attribute does not exist, return the default value
# (assume that broadcasting is handled by the caller / numpy)
Expand Down
12 changes: 6 additions & 6 deletions tests/unit/converters/test_pandapower_converter_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
converter._get_pp_attr.assert_any_call("line", "x_ohm_per_km", expected_type="f8")
converter._get_pp_attr.assert_any_call("line", "c_nf_per_km", expected_type="f8")
converter._get_pp_attr.assert_any_call("line", "g_us_per_km", expected_type="f8", default=0)
converter._get_pp_attr.assert_any_call("line", "max_i_ka", expected_type="f8")
converter._get_pp_attr.assert_any_call("line", "max_i_ka", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("line", "df", expected_type="f8", default=1)
converter._get_pp_attr.assert_any_call("line", "r0_ohm_per_km", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("line", "x0_ohm_per_km", expected_type="f8", default=np.nan)
Expand Down Expand Up @@ -562,7 +562,7 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
)
pgm.assert_any_call(
"i_n",
_get_pp_attr("line", "max_i_ka", expected_type="f8")
_get_pp_attr("line", "max_i_ka", expected_type="f8", default=np.nan)
* 1e3
* _get_pp_attr("line", "df", expected_type="f8", default=1)
* _get_pp_attr("line", "parallel", expected_type="u4", default=1),
Expand Down Expand Up @@ -856,10 +856,10 @@ def test_create_pgm_input_transformers(mock_init_array: MagicMock, two_pp_objs,
converter._get_pp_attr.assert_any_call("trafo", "i0_percent", expected_type="f8")
converter._get_pp_attr.assert_any_call("trafo", "shift_degree", expected_type="f8", default=0.0)
converter._get_pp_attr.assert_any_call("trafo", "tap_side", expected_type="O", default=None)
converter._get_pp_attr.assert_any_call("trafo", "tap_neutral", expected_type="i4", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo", "tap_neutral", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo", "tap_min", expected_type="i4", default=0)
converter._get_pp_attr.assert_any_call("trafo", "tap_max", expected_type="i4", default=0)
converter._get_pp_attr.assert_any_call("trafo", "tap_pos", expected_type="i4", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo", "tap_pos", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo", "parallel", expected_type="u4", default=1)
converter._get_pp_attr.assert_any_call("trafo", "in_service", expected_type="bool", default=True)
converter._get_pp_attr.assert_any_call("trafo", "vk0_percent", expected_type="f8", default=np.nan)
Expand Down Expand Up @@ -1148,10 +1148,10 @@ def test_create_pgm_input_three_winding_transformers(mock_init_array: MagicMock,
converter._get_pp_attr.assert_any_call("trafo3w", "shift_mv_degree", expected_type="f8", default=0.0)
converter._get_pp_attr.assert_any_call("trafo3w", "shift_lv_degree", expected_type="f8", default=0.0)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_side", expected_type="O", default=None)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_neutral", expected_type="i4", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_neutral", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_min", expected_type="i4", default=0)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_max", expected_type="i4", default=0)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_pos", expected_type="i4", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo3w", "tap_pos", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo3w", "in_service", expected_type="bool", default=True)
converter._get_pp_attr.assert_any_call("trafo3w", "vk0_hv_percent", expected_type="f8", default=np.nan)
converter._get_pp_attr.assert_any_call("trafo3w", "vkr0_hv_percent", expected_type="f8", default=np.nan)
Expand Down

0 comments on commit b04197e

Please sign in to comment.