Skip to content

Commit cb03804

Browse files
authored
Merge pull request #275 from PowerGridModel/feature/modernize-ci
Feature/modernize ci
2 parents 770f21a + 9f326d3 commit cb03804

File tree

8 files changed

+212
-62
lines changed

8 files changed

+212
-62
lines changed

.github/workflows/check-code-quality.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ jobs:
5656
5757
- name: If needed raise error
5858
run: |
59-
6059
if [[ `git status --porcelain --untracked-files=no` ]]; then
6160
echo "Formatting not correct! See below the files which need to be reformatted!"
6261
git status --porcelain --untracked-files=no

.pre-commit-config.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44

55
repos:
66
- repo: https://github.com/fsfe/reuse-tool
7-
rev: v3.0.1
7+
rev: v4.0.3
88
hooks:
99
- id: reuse
1010
- repo: https://github.com/pycqa/isort
11-
rev: 5.12.0
11+
rev: 5.13.2
1212
hooks:
1313
- id: isort
1414
- repo: https://github.com/psf/black
15-
rev: 22.10.0
15+
rev: 24.8.0
1616
hooks:
1717
- id: black-jupyter
1818
- repo: https://github.com/pre-commit/mirrors-mypy
19-
rev: v1.2.0
19+
rev: v1.11.2
2020
hooks:
2121
- id: mypy
2222
additional_dependencies: [numpy, pandas]

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,4 @@ If you are using Power Grid Model IO in your research work, please consider citi
9595

9696
## Contact
9797

98-
Please read [SUPPORT](https://github.com/PowerGridModel/.github/blob/main/SUPPORT.md) for how to connect and get into contact with the Power Gird Model IO project.
98+
Please read [SUPPORT](https://github.com/PowerGridModel/.github/blob/main/SUPPORT.md) for how to connect and get into contact with the Power Grid Model IO project.

set_pypi_version.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import os
1010
from pathlib import Path
11+
from typing import cast
1112

1213
import requests
1314

@@ -43,7 +44,7 @@ def set_version(pkg_dir: Path):
4344
def get_pypi_latest():
4445
request = requests.get("https://pypi.org/pypi/power-grid-model-io/json")
4546
data = request.json()
46-
version: str = data["info"]["version"]
47+
version = str(data["info"]["version"])
4748
return (int(x) for x in version.split("."))
4849

4950

src/power_grid_model_io/converters/pandapower_converter.py

Lines changed: 98 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"""
66
Panda Power Converter
77
"""
8+
89
import logging
910
from functools import lru_cache
1011
from typing import Dict, List, MutableMapping, Optional, Tuple, Type, Union
@@ -39,9 +40,21 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
3940
Panda Power Converter
4041
"""
4142

42-
__slots__ = ("pp_input_data", "pgm_input_data", "idx", "idx_lookup", "next_idx", "system_frequency")
43+
__slots__ = (
44+
"pp_input_data",
45+
"pgm_input_data",
46+
"idx",
47+
"idx_lookup",
48+
"next_idx",
49+
"system_frequency",
50+
)
4351

44-
def __init__(self, system_frequency: float = 50.0, trafo_loading: str = "current", log_level: int = logging.INFO):
52+
def __init__(
53+
self,
54+
system_frequency: float = 50.0,
55+
trafo_loading: str = "current",
56+
log_level: int = logging.INFO,
57+
):
4558
"""
4659
Prepare some member variables
4760
@@ -60,7 +73,12 @@ def __init__(self, system_frequency: float = 50.0, trafo_loading: str = "current
6073
self.idx_lookup: Dict[Tuple[str, Optional[str]], pd.Series] = {}
6174
self.next_idx = 0
6275

63-
def _parse_data(self, data: PandaPowerData, data_type: str, extra_info: Optional[ExtraInfo] = None) -> Dataset:
76+
def _parse_data(
77+
self,
78+
data: PandaPowerData,
79+
data_type: str,
80+
extra_info: Optional[ExtraInfo] = None,
81+
) -> Dataset:
6482
"""
6583
Set up for conversion from PandaPower to power-grid-model
6684
@@ -172,7 +190,13 @@ def _fill_pgm_extra_info(self, extra_info: ExtraInfo):
172190
for (pp_table, name), indices in self.idx_lookup.items():
173191
for pgm_id, pp_idx in zip(indices.index, indices):
174192
if name:
175-
extra_info[pgm_id] = {"id_reference": {"table": pp_table, "name": name, "index": pp_idx}}
193+
extra_info[pgm_id] = {
194+
"id_reference": {
195+
"table": pp_table,
196+
"name": name,
197+
"index": pp_idx,
198+
}
199+
}
176200
else:
177201
extra_info[pgm_id] = {"id_reference": {"table": pp_table, "index": pp_idx}}
178202

@@ -850,8 +874,8 @@ def _create_pgm_input_three_winding_transformers(self):
850874
# Default vector group for odd clocks_12 = Yndx, for odd clocks_13 = Ynxd and for even clocks = YNxyn or YNynx
851875
no_vector_groups = (
852876
np.isnan(winding_types["winding_1"])
853-
| np.isnan(winding_types["winding_2"])
854-
| np.isnan(winding_types["winding_3"])
877+
& np.isnan(winding_types["winding_2"])
878+
& np.isnan(winding_types["winding_3"])
855879
)
856880
no_vector_groups_ynd2 = no_vector_groups & (clocks_12 % 2)
857881
no_vector_groups_ynd3 = no_vector_groups & (clocks_13 % 2)
@@ -860,7 +884,9 @@ def _create_pgm_input_three_winding_transformers(self):
860884
winding_types.loc[no_vector_groups_ynd3, "winding_3"] = WindingType.delta
861885

862886
pgm_3wtransformers = initialize_array(
863-
data_type="input", component_type="three_winding_transformer", shape=len(pp_trafo3w)
887+
data_type="input",
888+
component_type="three_winding_transformer",
889+
shape=len(pp_trafo3w),
864890
)
865891
pgm_3wtransformers["id"] = self._generate_ids("trafo3w", pp_trafo3w.index)
866892

@@ -995,7 +1021,8 @@ def _create_pgm_input_wards(self):
9951021
if "sym_load" in self.pgm_input_data:
9961022
symload_dtype = self.pgm_input_data["sym_load"].dtype
9971023
self.pgm_input_data["sym_load"] = np.concatenate( # pylint: disable=unexpected-keyword-arg
998-
[self.pgm_input_data["sym_load"], pgm_sym_loads_from_ward], dtype=symload_dtype
1024+
[self.pgm_input_data["sym_load"], pgm_sym_loads_from_ward],
1025+
dtype=symload_dtype,
9991026
)
10001027
else:
10011028
self.pgm_input_data["sym_load"] = pgm_sym_loads_from_ward
@@ -1036,7 +1063,10 @@ def _create_pgm_input_motors(self):
10361063
p_spec = pgm_sym_loads_from_motor["p_specified"]
10371064
cos_phi = self._get_pp_attr("motor", "cos_phi", expected_type="f8")
10381065
valid = np.logical_and(np.not_equal(cos_phi, 0.0), np.isfinite(cos_phi))
1039-
q_spec = np.sqrt(np.power(np.divide(p_spec, cos_phi, where=valid), 2, where=valid) - p_spec**2, where=valid)
1066+
q_spec = np.sqrt(
1067+
np.power(np.divide(p_spec, cos_phi, where=valid), 2, where=valid) - p_spec**2,
1068+
where=valid,
1069+
)
10401070
q_spec[np.logical_not(valid)] = np.nan
10411071
pgm_sym_loads_from_motor["q_specified"] = q_spec
10421072

@@ -1045,7 +1075,8 @@ def _create_pgm_input_motors(self):
10451075
if "sym_load" in self.pgm_input_data:
10461076
symload_dtype = self.pgm_input_data["sym_load"].dtype
10471077
self.pgm_input_data["sym_load"] = np.concatenate( # pylint: disable=unexpected-keyword-arg
1048-
[self.pgm_input_data["sym_load"], pgm_sym_loads_from_motor], dtype=symload_dtype
1078+
[self.pgm_input_data["sym_load"], pgm_sym_loads_from_motor],
1079+
dtype=symload_dtype,
10491080
)
10501081
else:
10511082
self.pgm_input_data["sym_load"] = pgm_sym_loads_from_motor
@@ -1112,8 +1143,15 @@ def _pp_buses_output__accumulate_power(self, pp_output_buses: pd.DataFrame):
11121143
component_sides = {
11131144
"line": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
11141145
"link": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
1115-
"transformer": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
1116-
"three_winding_transformer": [("node_1", "p_1", "q_1"), ("node_2", "p_2", "q_2"), ("node_3", "p_3", "q_3")],
1146+
"transformer": [
1147+
("from_node", "p_from", "q_from"),
1148+
("to_node", "p_to", "q_to"),
1149+
],
1150+
"three_winding_transformer": [
1151+
("node_1", "p_1", "q_1"),
1152+
("node_2", "p_2", "q_2"),
1153+
("node_3", "p_3", "q_3"),
1154+
],
11171155
}
11181156

11191157
# Set the initial powers to zero
@@ -1229,7 +1267,8 @@ def _pp_ext_grids_output(self):
12291267
pgm_output_sources = self.pgm_output_data["source"]
12301268

12311269
pp_output_ext_grids = pd.DataFrame(
1232-
columns=["p_mw", "q_mvar"], index=self._get_pp_ids("ext_grid", pgm_output_sources["id"])
1270+
columns=["p_mw", "q_mvar"],
1271+
index=self._get_pp_ids("ext_grid", pgm_output_sources["id"]),
12331272
)
12341273
pp_output_ext_grids["p_mw"] = pgm_output_sources["p"] * 1e-6
12351274
pp_output_ext_grids["q_mvar"] = pgm_output_sources["q"] * 1e-6
@@ -1256,7 +1295,8 @@ def _pp_shunts_output(self):
12561295
at_nodes = self.pgm_nodes_lookup.loc[pgm_input_shunts["node"]]
12571296

12581297
pp_output_shunts = pd.DataFrame(
1259-
columns=["p_mw", "q_mvar", "vm_pu"], index=self._get_pp_ids("shunt", pgm_output_shunts["id"])
1298+
columns=["p_mw", "q_mvar", "vm_pu"],
1299+
index=self._get_pp_ids("shunt", pgm_output_shunts["id"]),
12601300
)
12611301
pp_output_shunts["p_mw"] = pgm_output_shunts["p"] * 1e-6
12621302
pp_output_shunts["q_mvar"] = pgm_output_shunts["q"] * 1e-6
@@ -1280,7 +1320,8 @@ def _pp_sgens_output(self):
12801320
pgm_output_sym_gens = self.pgm_output_data["sym_gen"]
12811321

12821322
pp_output_sgens = pd.DataFrame(
1283-
columns=["p_mw", "q_mvar"], index=self._get_pp_ids("sgen", pgm_output_sym_gens["id"])
1323+
columns=["p_mw", "q_mvar"],
1324+
index=self._get_pp_ids("sgen", pgm_output_sym_gens["id"]),
12841325
)
12851326
pp_output_sgens["p_mw"] = pgm_output_sym_gens["p"] * 1e-6
12861327
pp_output_sgens["q_mvar"] = pgm_output_sym_gens["q"] * 1e-6
@@ -1707,12 +1748,22 @@ def _pp_buses_output_3ph__accumulate_power(self, pp_output_buses_3ph: pd.DataFra
17071748
Returns:
17081749
accumulated power for each bus
17091750
"""
1710-
power_columns = ["p_a_mw", "p_b_mw", "p_c_mw", "q_a_mvar", "q_b_mvar", "q_c_mvar"]
1751+
power_columns = [
1752+
"p_a_mw",
1753+
"p_b_mw",
1754+
"p_c_mw",
1755+
"q_a_mvar",
1756+
"q_b_mvar",
1757+
"q_c_mvar",
1758+
]
17111759
# Let's define all the components and sides where nodes can be connected
17121760
component_sides = {
17131761
"line": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
17141762
"link": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
1715-
"transformer": [("from_node", "p_from", "q_from"), ("to_node", "p_to", "q_to")],
1763+
"transformer": [
1764+
("from_node", "p_from", "q_from"),
1765+
("to_node", "p_to", "q_to"),
1766+
],
17161767
}
17171768

17181769
# Set the initial powers to zero
@@ -1902,7 +1953,8 @@ def _pp_sgens_output_3ph(self):
19021953
pgm_output_sym_gens = self.pgm_output_data["sym_gen"]
19031954

19041955
pp_output_sgens = pd.DataFrame(
1905-
columns=["p_mw", "q_mvar"], index=self._get_pp_ids("sgen", pgm_output_sym_gens["id"])
1956+
columns=["p_mw", "q_mvar"],
1957+
index=self._get_pp_ids("sgen", pgm_output_sym_gens["id"]),
19061958
)
19071959
pp_output_sgens["p_mw"] = np.sum(pgm_output_sym_gens["p"], axis=1) * 1e-6
19081960
pp_output_sgens["q_mvar"] = np.sum(pgm_output_sym_gens["q"], axis=1) * 1e-6
@@ -1938,15 +1990,24 @@ def _pp_trafos_output_3ph(self): # pylint: disable=too-many-statements
19381990
loading = np.maximum(np.sum(ui_from, axis=1), np.sum(ui_to, axis=1)) / pgm_input_transformers["sn"]
19391991
elif self.trafo_loading == "power":
19401992
loading_a_percent = (
1941-
np.maximum(pgm_output_transformers["s_from"][:, 0], pgm_output_transformers["s_to"][:, 0])
1993+
np.maximum(
1994+
pgm_output_transformers["s_from"][:, 0],
1995+
pgm_output_transformers["s_to"][:, 0],
1996+
)
19421997
/ pgm_output_transformers["s_n"]
19431998
)
19441999
loading_b_percent = (
1945-
np.maximum(pgm_output_transformers["s_from"][:, 1], pgm_output_transformers["s_to"][:, 1])
2000+
np.maximum(
2001+
pgm_output_transformers["s_from"][:, 1],
2002+
pgm_output_transformers["s_to"][:, 1],
2003+
)
19462004
/ pgm_output_transformers["s_n"]
19472005
)
19482006
loading_c_percent = (
1949-
np.maximum(pgm_output_transformers["s_from"][:, 2], pgm_output_transformers["s_to"][:, 2])
2007+
np.maximum(
2008+
pgm_output_transformers["s_from"][:, 2],
2009+
pgm_output_transformers["s_to"][:, 2],
2010+
)
19502011
/ pgm_output_transformers["s_n"]
19512012
)
19522013
loading = pgm_output_transformers["loading"]
@@ -2136,7 +2197,10 @@ def _generate_ids(self, pp_table: str, pp_idx: pd.Index, name: Optional[str] = N
21362197
return pgm_idx
21372198

21382199
def _get_pgm_ids(
2139-
self, pp_table: str, pp_idx: Optional[Union[pd.Series, np.ndarray]] = None, name: Optional[str] = None
2200+
self,
2201+
pp_table: str,
2202+
pp_idx: Optional[Union[pd.Series, np.ndarray]] = None,
2203+
name: Optional[str] = None,
21402204
) -> pd.Series:
21412205
"""
21422206
Get numerical power-grid-model IDs for a PandaPower component
@@ -2155,7 +2219,12 @@ def _get_pgm_ids(
21552219
return self.idx[key]
21562220
return self.idx[key][pp_idx]
21572221

2158-
def _get_pp_ids(self, pp_table: str, pgm_idx: Optional[pd.Series] = None, name: Optional[str] = None) -> pd.Series:
2222+
def _get_pp_ids(
2223+
self,
2224+
pp_table: str,
2225+
pgm_idx: Optional[pd.Series] = None,
2226+
name: Optional[str] = None,
2227+
) -> pd.Series:
21592228
"""
21602229
Get numerical PandaPower IDs for a PandaPower component
21612230
@@ -2348,7 +2417,12 @@ def get_trafo3w_switch_states(self, trafo3w: pd.DataFrame) -> pd.DataFrame:
23482417
pp_3_switches = self.get_individual_switch_states(trafo3w[["index", bus3]], pp_switches, bus3)
23492418

23502419
return pd.DataFrame(
2351-
data={"side_1": pp_1_switches, "side_2": pp_2_switches, "side_3": pp_3_switches}, index=trafo3w.index
2420+
data={
2421+
"side_1": pp_1_switches,
2422+
"side_2": pp_2_switches,
2423+
"side_3": pp_3_switches,
2424+
},
2425+
index=trafo3w.index,
23522426
)
23532427

23542428
def get_trafo_winding_types(self) -> pd.DataFrame:

0 commit comments

Comments
 (0)