power-grid-model-io 1.3.22__py3-none-any.whl → 1.3.23__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 +74 -37
- {power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/METADATA +2 -1
- {power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/RECORD +6 -6
- {power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/WHEEL +0 -0
- {power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/licenses/LICENSE +0 -0
- {power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/top_level.txt +0 -0
|
@@ -8,11 +8,13 @@ Panda Power Converter
|
|
|
8
8
|
|
|
9
9
|
import logging
|
|
10
10
|
from functools import lru_cache
|
|
11
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
11
12
|
from typing import Dict, List, MutableMapping, Optional, Tuple, Type
|
|
12
13
|
|
|
13
14
|
import numpy as np
|
|
14
15
|
import pandas as pd
|
|
15
16
|
import structlog
|
|
17
|
+
from packaging.version import Version
|
|
16
18
|
from power_grid_model import (
|
|
17
19
|
Branch3Side,
|
|
18
20
|
BranchSide,
|
|
@@ -34,6 +36,20 @@ PandaPowerData = MutableMapping[str, pd.DataFrame]
|
|
|
34
36
|
|
|
35
37
|
logger = structlog.get_logger(__file__)
|
|
36
38
|
|
|
39
|
+
PP_COMPATIBILITY_VERSION_3_2_0 = Version("3.2.0")
|
|
40
|
+
try:
|
|
41
|
+
PP_CONVERSION_VERSION = Version(version("pandapower"))
|
|
42
|
+
except PackageNotFoundError:
|
|
43
|
+
PP_CONVERSION_VERSION = PP_COMPATIBILITY_VERSION_3_2_0 # assume latest compatible version by default
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def get_loss_params_3ph():
|
|
47
|
+
if PP_CONVERSION_VERSION < PP_COMPATIBILITY_VERSION_3_2_0:
|
|
48
|
+
loss_params = ["p_a_l_mw", "q_a_l_mvar", "p_b_l_mw", "q_b_l_mvar", "p_c_l_mw", "q_c_l_mvar"]
|
|
49
|
+
else:
|
|
50
|
+
loss_params = ["pl_a_mw", "ql_a_mvar", "pl_b_mw", "ql_b_mvar", "pl_c_mw", "ql_c_mvar"]
|
|
51
|
+
return loss_params
|
|
52
|
+
|
|
37
53
|
|
|
38
54
|
# pylint: disable=too-many-instance-attributes
|
|
39
55
|
class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
@@ -631,34 +647,53 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
631
647
|
data_type=DatasetType.input, component_type=ComponentType.sym_load, shape=3 * n_loads
|
|
632
648
|
)
|
|
633
649
|
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
650
|
+
if PP_CONVERSION_VERSION < PP_COMPATIBILITY_VERSION_3_2_0:
|
|
651
|
+
const_i_p_multiplier = (
|
|
652
|
+
self._get_pp_attr("load", "const_i_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
653
|
+
)
|
|
654
|
+
const_z_p_multiplier = (
|
|
655
|
+
self._get_pp_attr("load", "const_z_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
656
|
+
)
|
|
657
|
+
const_p_multiplier = (1e6 - const_i_p_multiplier - const_z_p_multiplier) * scaling
|
|
658
|
+
const_q_multiplier = const_p_multiplier
|
|
659
|
+
const_i_q_multiplier = const_i_p_multiplier
|
|
660
|
+
const_z_q_multiplier = const_z_p_multiplier
|
|
661
|
+
else:
|
|
662
|
+
const_i_p_multiplier = (
|
|
663
|
+
self._get_pp_attr("load", "const_i_p_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
664
|
+
)
|
|
665
|
+
const_z_p_multiplier = (
|
|
666
|
+
self._get_pp_attr("load", "const_z_p_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
667
|
+
)
|
|
668
|
+
const_p_multiplier = (1e6 - const_i_p_multiplier - const_z_p_multiplier) * scaling
|
|
669
|
+
const_i_q_multiplier = (
|
|
670
|
+
self._get_pp_attr("load", "const_i_q_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
671
|
+
)
|
|
672
|
+
const_z_q_multiplier = (
|
|
673
|
+
self._get_pp_attr("load", "const_z_q_percent", expected_type="f8", default=0) * scaling * (1e-2 * 1e6)
|
|
674
|
+
)
|
|
675
|
+
const_q_multiplier = (1e6 - const_i_q_multiplier - const_z_q_multiplier) * scaling
|
|
641
676
|
|
|
642
677
|
pgm_sym_loads["id"][:n_loads] = self._generate_ids("load", pp_loads.index, name="const_power")
|
|
643
678
|
pgm_sym_loads["node"][:n_loads] = self._get_pgm_ids("bus", bus)
|
|
644
679
|
pgm_sym_loads["status"][:n_loads] = in_service
|
|
645
680
|
pgm_sym_loads["type"][:n_loads] = LoadGenType.const_power
|
|
646
681
|
pgm_sym_loads["p_specified"][:n_loads] = const_p_multiplier * p_mw
|
|
647
|
-
pgm_sym_loads["q_specified"][:n_loads] =
|
|
682
|
+
pgm_sym_loads["q_specified"][:n_loads] = const_q_multiplier * q_mvar
|
|
648
683
|
|
|
649
684
|
pgm_sym_loads["id"][n_loads : 2 * n_loads] = self._generate_ids("load", pp_loads.index, name="const_impedance")
|
|
650
685
|
pgm_sym_loads["node"][n_loads : 2 * n_loads] = self._get_pgm_ids("bus", bus)
|
|
651
686
|
pgm_sym_loads["status"][n_loads : 2 * n_loads] = in_service
|
|
652
687
|
pgm_sym_loads["type"][n_loads : 2 * n_loads] = LoadGenType.const_impedance
|
|
653
|
-
pgm_sym_loads["p_specified"][n_loads : 2 * n_loads] =
|
|
654
|
-
pgm_sym_loads["q_specified"][n_loads : 2 * n_loads] =
|
|
688
|
+
pgm_sym_loads["p_specified"][n_loads : 2 * n_loads] = const_z_p_multiplier * p_mw
|
|
689
|
+
pgm_sym_loads["q_specified"][n_loads : 2 * n_loads] = const_z_q_multiplier * q_mvar
|
|
655
690
|
|
|
656
691
|
pgm_sym_loads["id"][-n_loads:] = self._generate_ids("load", pp_loads.index, name="const_current")
|
|
657
692
|
pgm_sym_loads["node"][-n_loads:] = self._get_pgm_ids("bus", bus)
|
|
658
693
|
pgm_sym_loads["status"][-n_loads:] = in_service
|
|
659
694
|
pgm_sym_loads["type"][-n_loads:] = LoadGenType.const_current
|
|
660
|
-
pgm_sym_loads["p_specified"][-n_loads:] =
|
|
661
|
-
pgm_sym_loads["q_specified"][-n_loads:] =
|
|
695
|
+
pgm_sym_loads["p_specified"][-n_loads:] = const_i_p_multiplier * p_mw
|
|
696
|
+
pgm_sym_loads["q_specified"][-n_loads:] = const_i_q_multiplier * q_mvar
|
|
662
697
|
|
|
663
698
|
assert ComponentType.sym_load not in self.pgm_input_data
|
|
664
699
|
self.pgm_input_data[ComponentType.sym_load] = pgm_sym_loads
|
|
@@ -1846,6 +1881,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1846
1881
|
i_from = (pgm_output_lines["p_from"] + 1j * pgm_output_lines["q_from"]) / u_complex.iloc[from_nodes, :]
|
|
1847
1882
|
i_to = (pgm_output_lines["p_to"] + 1j * pgm_output_lines["q_to"]) / u_complex.iloc[to_nodes, :]
|
|
1848
1883
|
|
|
1884
|
+
loss_params = get_loss_params_3ph()
|
|
1849
1885
|
pp_output_lines_3ph = pd.DataFrame(
|
|
1850
1886
|
columns=[
|
|
1851
1887
|
"p_a_from_mw",
|
|
@@ -1860,12 +1896,12 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1860
1896
|
"q_b_to_mvar",
|
|
1861
1897
|
"p_c_to_mw",
|
|
1862
1898
|
"q_c_to_mvar",
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1899
|
+
loss_params[0],
|
|
1900
|
+
loss_params[1],
|
|
1901
|
+
loss_params[2],
|
|
1902
|
+
loss_params[3],
|
|
1903
|
+
loss_params[4],
|
|
1904
|
+
loss_params[5],
|
|
1869
1905
|
"i_a_from_ka",
|
|
1870
1906
|
"i_b_from_ka",
|
|
1871
1907
|
"i_c_from_ka",
|
|
@@ -1898,12 +1934,12 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1898
1934
|
pp_output_lines_3ph["q_b_to_mvar"] = pgm_output_lines["q_to"][:, 1] * 1e-6
|
|
1899
1935
|
pp_output_lines_3ph["p_c_to_mw"] = pgm_output_lines["p_to"][:, 2] * 1e-6
|
|
1900
1936
|
pp_output_lines_3ph["q_c_to_mvar"] = pgm_output_lines["q_to"][:, 2] * 1e-6
|
|
1901
|
-
pp_output_lines_3ph[
|
|
1902
|
-
pp_output_lines_3ph[
|
|
1903
|
-
pp_output_lines_3ph[
|
|
1904
|
-
pp_output_lines_3ph[
|
|
1905
|
-
pp_output_lines_3ph[
|
|
1906
|
-
pp_output_lines_3ph[
|
|
1937
|
+
pp_output_lines_3ph[loss_params[0]] = (pgm_output_lines["p_from"][:, 0] + pgm_output_lines["p_to"][:, 0]) * 1e-6
|
|
1938
|
+
pp_output_lines_3ph[loss_params[1]] = (pgm_output_lines["q_from"][:, 0] + pgm_output_lines["q_to"][:, 0]) * 1e-6
|
|
1939
|
+
pp_output_lines_3ph[loss_params[2]] = (pgm_output_lines["p_from"][:, 1] + pgm_output_lines["p_to"][:, 1]) * 1e-6
|
|
1940
|
+
pp_output_lines_3ph[loss_params[3]] = (pgm_output_lines["q_from"][:, 1] + pgm_output_lines["q_to"][:, 1]) * 1e-6
|
|
1941
|
+
pp_output_lines_3ph[loss_params[4]] = (pgm_output_lines["p_from"][:, 2] + pgm_output_lines["p_to"][:, 2]) * 1e-6
|
|
1942
|
+
pp_output_lines_3ph[loss_params[5]] = (pgm_output_lines["q_from"][:, 2] + pgm_output_lines["q_to"][:, 2]) * 1e-6
|
|
1907
1943
|
pp_output_lines_3ph["i_a_from_ka"] = pgm_output_lines["i_from"][:, 0] * 1e-3
|
|
1908
1944
|
pp_output_lines_3ph["i_b_from_ka"] = pgm_output_lines["i_from"][:, 1] * 1e-3
|
|
1909
1945
|
pp_output_lines_3ph["i_c_from_ka"] = pgm_output_lines["i_from"][:, 2] * 1e-3
|
|
@@ -2026,6 +2062,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2026
2062
|
|
|
2027
2063
|
loading = np.maximum(np.maximum(loading_a_percent, loading_b_percent), loading_c_percent)
|
|
2028
2064
|
|
|
2065
|
+
loss_params = get_loss_params_3ph()
|
|
2029
2066
|
pp_output_trafos_3ph = pd.DataFrame(
|
|
2030
2067
|
columns=[
|
|
2031
2068
|
"p_a_hv_mw",
|
|
@@ -2040,12 +2077,12 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2040
2077
|
"q_b_lv_mvar",
|
|
2041
2078
|
"p_c_lv_mw",
|
|
2042
2079
|
"q_c_lv_mvar",
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2080
|
+
loss_params[0],
|
|
2081
|
+
loss_params[1],
|
|
2082
|
+
loss_params[2],
|
|
2083
|
+
loss_params[3],
|
|
2084
|
+
loss_params[4],
|
|
2085
|
+
loss_params[5],
|
|
2049
2086
|
"i_a_hv_ka",
|
|
2050
2087
|
"i_a_lv_ka",
|
|
2051
2088
|
"i_b_hv_ka",
|
|
@@ -2071,22 +2108,22 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2071
2108
|
pp_output_trafos_3ph["q_b_lv_mvar"] = pgm_output_transformers["q_to"][:, 1] * 1e-6
|
|
2072
2109
|
pp_output_trafos_3ph["p_c_lv_mw"] = pgm_output_transformers["p_to"][:, 2] * 1e-6
|
|
2073
2110
|
pp_output_trafos_3ph["q_c_lv_mvar"] = pgm_output_transformers["q_to"][:, 2] * 1e-6
|
|
2074
|
-
pp_output_trafos_3ph[
|
|
2111
|
+
pp_output_trafos_3ph[loss_params[0]] = (
|
|
2075
2112
|
pgm_output_transformers["p_from"][:, 0] + pgm_output_transformers["p_to"][:, 0]
|
|
2076
2113
|
) * 1e-6
|
|
2077
|
-
pp_output_trafos_3ph[
|
|
2114
|
+
pp_output_trafos_3ph[loss_params[1]] = (
|
|
2078
2115
|
pgm_output_transformers["q_from"][:, 0] + pgm_output_transformers["q_to"][:, 0]
|
|
2079
2116
|
) * 1e-6
|
|
2080
|
-
pp_output_trafos_3ph[
|
|
2117
|
+
pp_output_trafos_3ph[loss_params[2]] = (
|
|
2081
2118
|
pgm_output_transformers["p_from"][:, 1] + pgm_output_transformers["p_to"][:, 1]
|
|
2082
2119
|
) * 1e-6
|
|
2083
|
-
pp_output_trafos_3ph[
|
|
2120
|
+
pp_output_trafos_3ph[loss_params[3]] = (
|
|
2084
2121
|
pgm_output_transformers["q_from"][:, 1] + pgm_output_transformers["q_to"][:, 1]
|
|
2085
2122
|
) * 1e-6
|
|
2086
|
-
pp_output_trafos_3ph[
|
|
2123
|
+
pp_output_trafos_3ph[loss_params[4]] = (
|
|
2087
2124
|
pgm_output_transformers["p_from"][:, 2] + pgm_output_transformers["p_to"][:, 2]
|
|
2088
2125
|
) * 1e-6
|
|
2089
|
-
pp_output_trafos_3ph[
|
|
2126
|
+
pp_output_trafos_3ph[loss_params[5]] = (
|
|
2090
2127
|
pgm_output_transformers["q_from"][:, 2] + pgm_output_transformers["q_to"][:, 2]
|
|
2091
2128
|
) * 1e-6
|
|
2092
2129
|
pp_output_trafos_3ph["i_a_hv_ka"] = pgm_output_transformers["i_from"][:, 0] * 1e-3
|
|
@@ -2396,7 +2433,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2396
2433
|
else:
|
|
2397
2434
|
raise KeyError(f"Can't get switch states for {pp_table}")
|
|
2398
2435
|
|
|
2399
|
-
component = self.pp_input_data[pp_table]
|
|
2436
|
+
component = self.pp_input_data[pp_table].copy()
|
|
2400
2437
|
component["index"] = component.index
|
|
2401
2438
|
|
|
2402
2439
|
# Select the appropriate switches and columns
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: power-grid-model-io
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.23
|
|
4
4
|
Summary: Power Grid Model Input/Output
|
|
5
5
|
Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
|
|
6
6
|
License: MPL-2.0
|
|
@@ -36,6 +36,7 @@ Requires-Dist: pytest-cov; extra == "dev"
|
|
|
36
36
|
Requires-Dist: ruff; extra == "dev"
|
|
37
37
|
Requires-Dist: pydantic>2; extra == "dev"
|
|
38
38
|
Requires-Dist: pandapower>2.11.1; extra == "dev"
|
|
39
|
+
Requires-Dist: lxml; extra == "dev"
|
|
39
40
|
Provides-Extra: examples
|
|
40
41
|
Requires-Dist: power-grid-model>1.9.80; extra == "examples"
|
|
41
42
|
Requires-Dist: pandapower>2.11.1; extra == "examples"
|
|
@@ -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=cueyZMYP5BteA4xpTQ9jJ1xP6jaIfGL2aSRA6fVUluc,119823
|
|
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.23.dist-info/licenses/LICENSE,sha256=7Pm2fWFFHHUG5lDHed1vl5CjzxObIXQglnYsEdtjo_k,14907
|
|
47
|
+
power_grid_model_io-1.3.23.dist-info/METADATA,sha256=N2gfmJvtgeWTOnBBt9D_P32KFPab3exW1y3beAzYUUA,8231
|
|
48
|
+
power_grid_model_io-1.3.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
49
|
+
power_grid_model_io-1.3.23.dist-info/top_level.txt,sha256=7sq9VveemMm2R0RgTBa4tH8y_xF4_1hxbufmX9OjCTo,20
|
|
50
|
+
power_grid_model_io-1.3.23.dist-info/RECORD,,
|
|
File without changes
|
{power_grid_model_io-1.3.22.dist-info → power_grid_model_io-1.3.23.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|