power-grid-model-io 1.3.12__py3-none-any.whl → 1.3.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of power-grid-model-io might be problematic. Click here for more details.
- power_grid_model_io/converters/pandapower_converter.py +48 -41
- {power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/METADATA +1 -1
- {power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/RECORD +6 -6
- {power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/WHEEL +0 -0
- {power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/licenses/LICENSE +0 -0
- {power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/top_level.txt +0 -0
|
@@ -99,7 +99,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
99
99
|
self.idx_lookup = {}
|
|
100
100
|
self.next_idx = 0
|
|
101
101
|
|
|
102
|
-
# Set
|
|
102
|
+
# Set pandapower data
|
|
103
103
|
self.pp_input_data = data
|
|
104
104
|
|
|
105
105
|
# Convert
|
|
@@ -360,6 +360,9 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
360
360
|
Furthermore, creates a global node lookup table, which stores nodes' voltage magnitude per unit and the voltage
|
|
361
361
|
angle in degrees
|
|
362
362
|
"""
|
|
363
|
+
# TODO create output_data_3ph for remaining components
|
|
364
|
+
# Although Pandapower itself did not implmenet res_shunt_3ph
|
|
365
|
+
# Since results are avaiable in PGM output, these should be converted.
|
|
363
366
|
self._pp_buses_output_3ph()
|
|
364
367
|
self._pp_lines_output_3ph()
|
|
365
368
|
self._pp_ext_grids_output_3ph()
|
|
@@ -376,6 +379,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
376
379
|
Returns:
|
|
377
380
|
a power-grid-model structured array for the Node component
|
|
378
381
|
"""
|
|
382
|
+
# TODO handle out-of-service buses, either here or in get_switch_states
|
|
379
383
|
pp_busses = self.pp_input_data["bus"]
|
|
380
384
|
|
|
381
385
|
if pp_busses.empty:
|
|
@@ -422,11 +426,12 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
422
426
|
pgm_lines["x1"] = self._get_pp_attr("line", "x_ohm_per_km", expected_type="f8") * multiplier
|
|
423
427
|
pgm_lines["c1"] = c_nf_per_km * length_km * parallel * 1e-9
|
|
424
428
|
# The formula for tan1 = R_1 / Xc_1 = (g * 1e-6) / (2 * pi * f * c * 1e-9) = g / (2 * pi * f * c * 1e-3)
|
|
425
|
-
pgm_lines["tan1"] = (
|
|
426
|
-
self._get_pp_attr("line", "g_us_per_km", expected_type="f8", default=0)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
+
pgm_lines["tan1"] = np.divide(
|
|
430
|
+
self._get_pp_attr("line", "g_us_per_km", expected_type="f8", default=0),
|
|
431
|
+
c_nf_per_km * (2 * np.pi * self.system_frequency * 1e-3),
|
|
432
|
+
where=c_nf_per_km != 0.0,
|
|
429
433
|
)
|
|
434
|
+
pgm_lines["tan1"][np.equal(c_nf_per_km, 0.0)] = 0.0
|
|
430
435
|
pgm_lines["i_n"] = (
|
|
431
436
|
(self._get_pp_attr("line", "max_i_ka", expected_type="f8", default=np.nan) * 1e3)
|
|
432
437
|
* self._get_pp_attr("line", "df", expected_type="f8", default=1)
|
|
@@ -435,11 +440,12 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
435
440
|
pgm_lines["r0"] = self._get_pp_attr("line", "r0_ohm_per_km", expected_type="f8", default=np.nan) * multiplier
|
|
436
441
|
pgm_lines["x0"] = self._get_pp_attr("line", "x0_ohm_per_km", expected_type="f8", default=np.nan) * multiplier
|
|
437
442
|
pgm_lines["c0"] = c0_nf_per_km * length_km * parallel * 1e-9
|
|
438
|
-
pgm_lines["tan0"] = (
|
|
439
|
-
self._get_pp_attr("line", "g0_us_per_km", expected_type="f8", default=0)
|
|
440
|
-
|
|
441
|
-
|
|
443
|
+
pgm_lines["tan0"] = np.divide(
|
|
444
|
+
self._get_pp_attr("line", "g0_us_per_km", expected_type="f8", default=0),
|
|
445
|
+
c0_nf_per_km * (2 * np.pi * self.system_frequency * 1e-3),
|
|
446
|
+
where=c0_nf_per_km != 0.0,
|
|
442
447
|
)
|
|
448
|
+
pgm_lines["tan0"][np.equal(c0_nf_per_km, 0.0)] = 0.0
|
|
443
449
|
assert ComponentType.line not in self.pgm_input_data
|
|
444
450
|
self.pgm_input_data[ComponentType.line] = pgm_lines
|
|
445
451
|
|
|
@@ -755,7 +761,10 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
755
761
|
valid = np.logical_and(np.not_equal(sn_mva, 0.0), np.isfinite(sn_mva))
|
|
756
762
|
mag_g = np.divide(pfe, sn_mva * 1000, where=valid)
|
|
757
763
|
mag_g[np.logical_not(valid)] = np.nan
|
|
758
|
-
|
|
764
|
+
z_squared = i_no_load * i_no_load * 1e-4 - mag_g * mag_g
|
|
765
|
+
valid = np.logical_and(np.greater(z_squared, 0), np.isfinite(z_squared))
|
|
766
|
+
rx_mag = np.divide(mag_g, np.sqrt(z_squared, where=valid), where=valid)
|
|
767
|
+
rx_mag[np.logical_not(valid)] = np.inf
|
|
759
768
|
# positive and zero sequence magnetising impedance must be equal.
|
|
760
769
|
# mag0_percent = z0mag / z0.
|
|
761
770
|
checks = {
|
|
@@ -1382,7 +1391,9 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1382
1391
|
if self.trafo_loading == "current":
|
|
1383
1392
|
ui_from = pgm_output_transformers["i_from"] * pgm_input_transformers["u1"]
|
|
1384
1393
|
ui_to = pgm_output_transformers["i_to"] * pgm_input_transformers["u2"]
|
|
1385
|
-
loading =
|
|
1394
|
+
loading = (
|
|
1395
|
+
(np.sqrt(3) * np.maximum(ui_from, ui_to) / pgm_input_transformers["sn"]) * loading_multiplier * 1e2
|
|
1396
|
+
)
|
|
1386
1397
|
elif self.trafo_loading == "power":
|
|
1387
1398
|
loading = pgm_output_transformers["loading"] * loading_multiplier * 1e2
|
|
1388
1399
|
else:
|
|
@@ -1704,7 +1715,6 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1704
1715
|
)
|
|
1705
1716
|
pp_switches_output = pp_switches_output[["i_ka"]]
|
|
1706
1717
|
pp_switches_output.set_index(pp_switches_output_index, inplace=True)
|
|
1707
|
-
pp_switches_output["loading_percent"] = np.nan
|
|
1708
1718
|
|
|
1709
1719
|
# For et=b, ie bus to bus switches, links are created. get result from them
|
|
1710
1720
|
if not links_absent:
|
|
@@ -1712,6 +1722,9 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1712
1722
|
# For links, i_from = i_to = i_ka / 1e3
|
|
1713
1723
|
link_ids = self._get_pp_ids("switch", links["id"], "b2b_switches")
|
|
1714
1724
|
pp_switches_output.loc[link_ids, "i_ka"] = links["i_from"] * 1e-3
|
|
1725
|
+
in_ka = self.pp_input_data["switch"]["in_ka"].values
|
|
1726
|
+
pp_switches_output["loading_percent"] = np.nan
|
|
1727
|
+
pp_switches_output["loading_percent"] = np.divide(pp_switches_output["i_ka"], in_ka, where=in_ka != 0)
|
|
1715
1728
|
|
|
1716
1729
|
assert "res_switch" not in self.pp_output_data
|
|
1717
1730
|
self.pp_output_data["res_switch"] = pp_switches_output
|
|
@@ -1942,7 +1955,10 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1942
1955
|
pp_output_lines_3ph["loading_c_percent"] = (
|
|
1943
1956
|
np.maximum(pp_output_lines_3ph["i_c_from_ka"], pp_output_lines_3ph["i_c_to_ka"]) / pgm_input_lines["i_n"]
|
|
1944
1957
|
) * 1e5
|
|
1945
|
-
pp_output_lines_3ph["loading_percent"] =
|
|
1958
|
+
pp_output_lines_3ph["loading_percent"] = np.maximum(
|
|
1959
|
+
np.maximum(pp_output_lines_3ph["loading_a_percent"], pp_output_lines_3ph["loading_b_percent"]),
|
|
1960
|
+
pp_output_lines_3ph["loading_c_percent"],
|
|
1961
|
+
)
|
|
1946
1962
|
|
|
1947
1963
|
assert "res_line_3ph" not in self.pp_output_data
|
|
1948
1964
|
self.pp_output_data["res_line_3ph"] = pp_output_lines_3ph
|
|
@@ -2017,38 +2033,29 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2017
2033
|
# Only derating factor used here. Sn is already being multiplied by parallel
|
|
2018
2034
|
loading_multiplier = pp_input_transformers["df"] * 1e2
|
|
2019
2035
|
if self.trafo_loading == "current":
|
|
2020
|
-
ui_from = pgm_output_transformers["i_from"] * pgm_input_transformers["u1"]
|
|
2021
|
-
ui_to = pgm_output_transformers["i_to"] * pgm_input_transformers["u2"]
|
|
2022
|
-
loading_a_percent = np.maximum(ui_from[:, 0], ui_to[:, 0]) / pgm_input_transformers["sn"]
|
|
2023
|
-
loading_b_percent = np.maximum(ui_from[:, 1], ui_to[:, 1]) / pgm_input_transformers["sn"]
|
|
2024
|
-
loading_c_percent = np.maximum(ui_from[:, 2], ui_to[:, 2]) / pgm_input_transformers["sn"]
|
|
2025
|
-
loading = np.maximum(np.sum(ui_from, axis=1), np.sum(ui_to, axis=1)) / pgm_input_transformers["sn"]
|
|
2036
|
+
ui_from = pgm_output_transformers["i_from"] * pgm_input_transformers["u1"][:, None]
|
|
2037
|
+
ui_to = pgm_output_transformers["i_to"] * pgm_input_transformers["u2"][:, None]
|
|
2038
|
+
loading_a_percent = np.sqrt(3) * np.maximum(ui_from[:, 0], ui_to[:, 0]) / pgm_input_transformers["sn"]
|
|
2039
|
+
loading_b_percent = np.sqrt(3) * np.maximum(ui_from[:, 1], ui_to[:, 1]) / pgm_input_transformers["sn"]
|
|
2040
|
+
loading_c_percent = np.sqrt(3) * np.maximum(ui_from[:, 2], ui_to[:, 2]) / pgm_input_transformers["sn"]
|
|
2026
2041
|
elif self.trafo_loading == "power":
|
|
2027
|
-
loading_a_percent = (
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
/ pgm_output_transformers["s_n"]
|
|
2040
|
-
)
|
|
2041
|
-
loading_c_percent = (
|
|
2042
|
-
np.maximum(
|
|
2043
|
-
pgm_output_transformers["s_from"][:, 2],
|
|
2044
|
-
pgm_output_transformers["s_to"][:, 2],
|
|
2045
|
-
)
|
|
2046
|
-
/ pgm_output_transformers["s_n"]
|
|
2047
|
-
)
|
|
2048
|
-
loading = pgm_output_transformers["loading"]
|
|
2042
|
+
loading_a_percent = np.maximum(
|
|
2043
|
+
pgm_output_transformers["s_from"][:, 0],
|
|
2044
|
+
pgm_output_transformers["s_to"][:, 0],
|
|
2045
|
+
) / (pgm_input_transformers["sn"] / 3)
|
|
2046
|
+
loading_b_percent = np.maximum(
|
|
2047
|
+
pgm_output_transformers["s_from"][:, 1],
|
|
2048
|
+
pgm_output_transformers["s_to"][:, 1],
|
|
2049
|
+
) / (pgm_input_transformers["sn"] / 3)
|
|
2050
|
+
loading_c_percent = np.maximum(
|
|
2051
|
+
pgm_output_transformers["s_from"][:, 2],
|
|
2052
|
+
pgm_output_transformers["s_to"][:, 2],
|
|
2053
|
+
) / (pgm_input_transformers["sn"] / 3)
|
|
2049
2054
|
else:
|
|
2050
2055
|
raise ValueError(f"Invalid transformer loading type: {str(self.trafo_loading)}")
|
|
2051
2056
|
|
|
2057
|
+
loading = np.maximum(np.maximum(loading_a_percent, loading_b_percent), loading_c_percent)
|
|
2058
|
+
|
|
2052
2059
|
pp_output_trafos_3ph = pd.DataFrame(
|
|
2053
2060
|
columns=[
|
|
2054
2061
|
"p_a_hv_mw",
|
|
@@ -10,7 +10,7 @@ power_grid_model_io/config/excel/vision_en_9_8.yaml,sha256=yCa4v5VUK1xCZ0PrHG2Zf
|
|
|
10
10
|
power_grid_model_io/config/excel/vision_nl.yaml,sha256=0IOh5Ug9QwP2dgNMsl90RARV_v-xxcA6rv8Ya0WCPuI,21426
|
|
11
11
|
power_grid_model_io/converters/__init__.py,sha256=qng1-O8kfpgalPms_C_zAwBuiuKUoquf27u6JkVH-9k,487
|
|
12
12
|
power_grid_model_io/converters/base_converter.py,sha256=ifF-U1kmJIW9Tj9uW7d0XJlsBrmvpUZoi3WxNPAbKO4,6170
|
|
13
|
-
power_grid_model_io/converters/pandapower_converter.py,sha256=
|
|
13
|
+
power_grid_model_io/converters/pandapower_converter.py,sha256=mW4k1VaJjkK2duuFI7Y4hwKVxkXDTcz-FcYSQ8-5FRM,118674
|
|
14
14
|
power_grid_model_io/converters/pgm_json_converter.py,sha256=7Z1Qmoxn0qo4fkLXvmNTWNMHOJHhnyGTvxlRlcHbMLg,14210
|
|
15
15
|
power_grid_model_io/converters/tabular_converter.py,sha256=XmUDVthYyJQiHXxzspVCjUo3ZGsv4XXwZ_VRQLn4bvs,35666
|
|
16
16
|
power_grid_model_io/converters/vision_excel_converter.py,sha256=hiEOqXgfM3XbHDJ-ri-Os2a4Dh5lZFqF0m9_YFBaYs4,4166
|
|
@@ -43,8 +43,8 @@ power_grid_model_io/utils/modules.py,sha256=DJLmYKt9cV_GvqJI8wkXppNycqD4b8n5-o_8
|
|
|
43
43
|
power_grid_model_io/utils/parsing.py,sha256=cw6d3S89BvB8dncN0SeFHDhFG7ZlDNx9iGYWjZk5fVU,4684
|
|
44
44
|
power_grid_model_io/utils/uuid_excel_cvtr.py,sha256=FFsfnvELVTkIXE_qfEPjFlphsikAr7GyjnNwsDZ-AgY,7581
|
|
45
45
|
power_grid_model_io/utils/zip.py,sha256=VXHX4xWPPZbhOlZUAbMDy3MgQFzK6_l7sRvGXihNUY4,3875
|
|
46
|
-
power_grid_model_io-1.3.
|
|
47
|
-
power_grid_model_io-1.3.
|
|
48
|
-
power_grid_model_io-1.3.
|
|
49
|
-
power_grid_model_io-1.3.
|
|
50
|
-
power_grid_model_io-1.3.
|
|
46
|
+
power_grid_model_io-1.3.14.dist-info/licenses/LICENSE,sha256=7Pm2fWFFHHUG5lDHed1vl5CjzxObIXQglnYsEdtjo_k,14907
|
|
47
|
+
power_grid_model_io-1.3.14.dist-info/METADATA,sha256=ftBJigRRgbBr8zYqpock3Lxe6z29_mUCoGWjZleNmtw,8196
|
|
48
|
+
power_grid_model_io-1.3.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
49
|
+
power_grid_model_io-1.3.14.dist-info/top_level.txt,sha256=7sq9VveemMm2R0RgTBa4tH8y_xF4_1hxbufmX9OjCTo,20
|
|
50
|
+
power_grid_model_io-1.3.14.dist-info/RECORD,,
|
|
File without changes
|
{power_grid_model_io-1.3.12.dist-info → power_grid_model_io-1.3.14.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|