Skip to content

Commit 08ef8b4

Browse files
authored
Merge pull request #326 from furqan463/main
Pandapower_converter bug fix: Resolve bug with broadcasting
2 parents 5437421 + a8675a4 commit 08ef8b4

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

src/power_grid_model_io/converters/pandapower_converter.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,8 @@ def _create_pgm_input_lines(self):
410410
in_service = self._get_pp_attr("line", "in_service", expected_type="bool", default=True)
411411
length_km = self._get_pp_attr("line", "length_km", expected_type="f8")
412412
parallel = self._get_pp_attr("line", "parallel", expected_type="u4", default=1)
413-
c_nf_per_km = self._get_pp_attr("line", "c_nf_per_km", expected_type="f8")
414-
c0_nf_per_km = self._get_pp_attr("line", "c0_nf_per_km", expected_type="f8", default=np.nan)
413+
c_nf_per_km = self._get_pp_attr("line", "c_nf_per_km", expected_type="f8", default=0)
414+
c0_nf_per_km = self._get_pp_attr("line", "c0_nf_per_km", expected_type="f8", default=0)
415415
multiplier = length_km / parallel
416416

417417
pgm_lines = initialize_array(
@@ -426,12 +426,12 @@ def _create_pgm_input_lines(self):
426426
pgm_lines["x1"] = self._get_pp_attr("line", "x_ohm_per_km", expected_type="f8") * multiplier
427427
pgm_lines["c1"] = c_nf_per_km * length_km * parallel * 1e-9
428428
# The formula for tan1 = R_1 / Xc_1 = (g * 1e-6) / (2 * pi * f * c * 1e-9) = g / (2 * pi * f * c * 1e-3)
429+
pgm_lines["tan1"] = 0.0
429430
pgm_lines["tan1"] = np.divide(
430431
self._get_pp_attr("line", "g_us_per_km", expected_type="f8", default=0),
431432
c_nf_per_km * (2 * np.pi * self.system_frequency * 1e-3),
432-
where=c_nf_per_km != 0.0,
433+
where=np.logical_not(np.isclose(c_nf_per_km, 0.0)),
433434
)
434-
pgm_lines["tan1"][np.equal(c_nf_per_km, 0.0)] = 0.0
435435
pgm_lines["i_n"] = (
436436
(self._get_pp_attr("line", "max_i_ka", expected_type="f8", default=np.nan) * 1e3)
437437
* self._get_pp_attr("line", "df", expected_type="f8", default=1)
@@ -440,12 +440,12 @@ def _create_pgm_input_lines(self):
440440
pgm_lines["r0"] = self._get_pp_attr("line", "r0_ohm_per_km", expected_type="f8", default=np.nan) * multiplier
441441
pgm_lines["x0"] = self._get_pp_attr("line", "x0_ohm_per_km", expected_type="f8", default=np.nan) * multiplier
442442
pgm_lines["c0"] = c0_nf_per_km * length_km * parallel * 1e-9
443+
pgm_lines["tan0"] = 0.0
443444
pgm_lines["tan0"] = np.divide(
444445
self._get_pp_attr("line", "g0_us_per_km", expected_type="f8", default=0),
445446
c0_nf_per_km * (2 * np.pi * self.system_frequency * 1e-3),
446-
where=c0_nf_per_km != 0.0,
447+
where=np.logical_not(np.isclose(c0_nf_per_km, 0.0)),
447448
)
448-
pgm_lines["tan0"][np.equal(c0_nf_per_km, 0.0)] = 0.0
449449
assert ComponentType.line not in self.pgm_input_data
450450
self.pgm_input_data[ComponentType.line] = pgm_lines
451451

tests/unit/converters/test_pandapower_converter_input.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -525,13 +525,13 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
525525
converter._get_pp_attr.assert_any_call("line", "parallel", expected_type="u4", default=1)
526526
converter._get_pp_attr.assert_any_call("line", "r_ohm_per_km", expected_type="f8")
527527
converter._get_pp_attr.assert_any_call("line", "x_ohm_per_km", expected_type="f8")
528-
converter._get_pp_attr.assert_any_call("line", "c_nf_per_km", expected_type="f8")
528+
converter._get_pp_attr.assert_any_call("line", "c_nf_per_km", expected_type="f8", default=0)
529529
converter._get_pp_attr.assert_any_call("line", "g_us_per_km", expected_type="f8", default=0)
530530
converter._get_pp_attr.assert_any_call("line", "max_i_ka", expected_type="f8", default=np.nan)
531531
converter._get_pp_attr.assert_any_call("line", "df", expected_type="f8", default=1)
532532
converter._get_pp_attr.assert_any_call("line", "r0_ohm_per_km", expected_type="f8", default=np.nan)
533533
converter._get_pp_attr.assert_any_call("line", "x0_ohm_per_km", expected_type="f8", default=np.nan)
534-
converter._get_pp_attr.assert_any_call("line", "c0_nf_per_km", expected_type="f8", default=np.nan)
534+
converter._get_pp_attr.assert_any_call("line", "c0_nf_per_km", expected_type="f8", default=0)
535535
converter._get_pp_attr.assert_any_call("line", "g0_us_per_km", expected_type="f8", default=0)
536536
assert len(converter._get_pp_attr.call_args_list) == 15
537537

@@ -566,7 +566,7 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
566566
)
567567
pgm.assert_any_call(
568568
"c1",
569-
_get_pp_attr("line", "c_nf_per_km", expected_type="f8")
569+
_get_pp_attr("line", "c_nf_per_km", expected_type="f8", default=0)
570570
* _get_pp_attr("line", "length_km", expected_type="f8")
571571
* _get_pp_attr("line", "parallel", expected_type="u4", default=1)
572572
* 1e-9,
@@ -575,8 +575,8 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
575575
"tan1",
576576
np.divide(
577577
_get_pp_attr("line", "g_us_per_km", expected_type="f8", default=0),
578-
_get_pp_attr("line", "c_nf_per_km", expected_type="f8") * (np.pi / 10),
579-
where=_get_pp_attr("line", "c_nf_per_km", expected_type="f8") != 0.0,
578+
_get_pp_attr("line", "c_nf_per_km", expected_type="f8", default=0) * (np.pi / 10),
579+
where=np.logical_not(np.isclose(_get_pp_attr("line", "c_nf_per_km", expected_type="f8", default=0), 0.0)),
580580
),
581581
)
582582
pgm.assert_any_call(
@@ -585,11 +585,18 @@ def test_create_pgm_input_lines(mock_init_array: MagicMock, two_pp_objs, convert
585585
* _get_pp_attr("line", "df", expected_type="f8", default=1)
586586
* _get_pp_attr("line", "parallel", expected_type="u4", default=1),
587587
)
588+
pgm.assert_any_call(
589+
"tan0",
590+
np.divide(
591+
_get_pp_attr("line", "g0_us_per_km", expected_type="f8", default=0),
592+
_get_pp_attr("line", "c0_nf_per_km", expected_type="f8", default=0) * (np.pi / 10),
593+
where=np.logical_not(np.isclose(_get_pp_attr("line", "c0_nf_per_km", expected_type="f8", default=0), 0.0)),
594+
),
595+
)
588596
pgm.assert_any_call("r0", ANY)
589597
pgm.assert_any_call("x0", ANY)
590598
pgm.assert_any_call("c0", ANY)
591-
pgm.assert_any_call("tan0", ANY)
592-
assert len(pgm.call_args_list) == 14
599+
assert len(pgm.call_args_list) == 16
593600

594601
# result
595602
assert converter.pgm_input_data[ComponentType.line] == mock_init_array.return_value

tests/validation/converters/test_pandapower_converter_input.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,13 @@ def test_pgm_input_lines__cnf_zero():
150150
pp_network.line.c0_nf_per_km = 0
151151
data, _ = pp_converter.load_input_data(pp_network)
152152
np.testing.assert_array_equal(data[ComponentType.line]["tan0"], 0)
153+
154+
155+
@pytest.mark.filterwarnings("error")
156+
def test_simple_example():
157+
from pandapower.networks import example_simple
158+
159+
pp_net = example_simple()
160+
pp_net["gen"] = pp_net["gen"].iloc[:0]
161+
pp_converter = PandaPowerConverter()
162+
data, _ = pp_converter.load_input_data(pp_net)

0 commit comments

Comments
 (0)